2009-07-17 142 views
3

我有一個存儲付款並希望確保如果付款方式是信用卡,然後卡類型字段應該是(「簽證」,「萬事達卡」,「發現」,「美國的表Express'),但是如果付款方式不是信用卡,那麼卡類型字段應該爲NULL。SQL Server的檢查約束詢價

將檢查約束允許我使用如下語句:

(method = 'CC' AND cardType IN ('Visa', 'MasterCard', 'Discover', 'American Express')) 
OR 
(method != 'CC' AND cardType = NULL) 

因爲限制應該也許只有被用來檢查1場(不知道),我可能會用這一個是完全關閉基地。

此外,如果允許這樣的陳述可能會有不利的表現打擊?

編輯:我計劃最終建立一個cardType領域,在我們的支付表的外鍵有cardType ......這只是一些我想在此期間

回答

3

爲什麼不只是外鍵做的到另一張桌子並允許空位?

更妙的是ahve另一個表中的卡類型代碼和存儲關鍵了這一點。

+0

+1 - 絕對使用CardType表進行標準化,以引用CardType表。例如使用「美國運通」進行50,000次支付,與當前模式相比,這是800,000字節,而標準化方法相比超過50,000字節 – AdaTheDev 2009-07-17 15:56:59