2008-10-23 55 views
2

我正在創建一個看起來像這樣的表。如何確保一列包含一組值中的一個?

CREATE TABLE packages 
(
    productCode char(2) 
    , name nvarchar(100) 
    , ... 
) 

我如何確保產品代碼始終是兩個值XJXD之一?

+0

7年後看了這個問題,如果我再做一遍,我會添加一個表和一個外鍵。用於文檔「XJ是什麼意思?」和數據倉庫以及DBMS之間更好的可移植性。 – 2015-03-07 12:35:11

回答

10
ALTER TABLE packages 
ADD CONSTRAINT constraintname CHECK (productCode in ('XJ', 'XD')) 
+0

我建議使用查找表爲未來的擴展原因。在表中插入另一行比找出如何重新約束要容易得多。 – 2008-10-23 18:23:16

+0

是的,我在這種情況下調用YAGNI。 :-) – 2008-10-23 18:33:26

3
CREATE TABLE packages 
(
    productCode char(2) 
    , name nvarchar(100) 
    , ... 
    ,CONSTRAINT productCode CHECK (productCode in ('XJ','XD')) 
) 
1

在這種情況下,它聽起來像valueset的產品代碼是相當有限的,不要期望它在可預見的未來成長,所以我傾向於checkconstraint的答案一致。但是,在大多數情況下,我會按照格蘭特先生的建議實施外鍵解決方案,因爲我的客戶每天大約有一次改變主意(以及需求)的惡習。在這種情況下,我認爲FK版本更容易維護。

相關問題