支払いを保存するテーブルがあり、支払い方法がクレジットカードであることを確認したい場合は、カードタイプフィールドをIN( 'Visa'、 'MasterCard'、 'Discover'、 'American Express ')、支払い方法がクレジットカードでない場合、カードタイプフィールドはNULLにする必要があります。SQL Serverチェック制約の照会
は、チェック制約ウィル私はこのようなステートメントを使用することができます:
(method = 'CC' AND cardType IN ('Visa', 'MasterCard', 'Discover', 'American Express'))
OR
(method != 'CC' AND cardType = NULL)
制約は多分のみ1つのフィールド(わからない)を確認するために使用されなければならないので、私はこの1つを完全にオフベースであるかもしれません。
また、このようなステートメントが許可されていると、パフォーマンスが低下する可能性がありますか?
編集:私は最終的にCARDTYPEフィールドの作成に関する計画し、外部キーとして私達の支払テーブルにCARDTYPEを持っている...これはちょうど私がその間に
+1 - 参照するCardTypeテーブルを使用して構造を明確に正規化します。例えば標準化されたアプローチの場合、50,000バイトを超える場合と比較して、現在のスキーマで800,000バイトである「American Express」で50,000回の支払いが行われます。 – AdaTheDev
このルートに進む予定です。これは私が作業している既存の構造で、新しいカードタイプテーブルを作成して、チェック制約を使用することを考えていた既存のレコードを更新するまでです。 –
マッピングのような別のテーブルではなく、アプリケーションのenum値。 – Shimmy