我正在創建一個看起來像這樣的表。如何確保一列包含一組值中的一個?
CREATE TABLE packages
(
productCode char(2)
, name nvarchar(100)
, ...
)
我如何確保產品代碼始終是兩個值XJ
或XD
之一?
我正在創建一個看起來像這樣的表。如何確保一列包含一組值中的一個?
CREATE TABLE packages
(
productCode char(2)
, name nvarchar(100)
, ...
)
我如何確保產品代碼始終是兩個值XJ
或XD
之一?
ALTER TABLE packages
ADD CONSTRAINT constraintname CHECK (productCode in ('XJ', 'XD'))
我建議使用查找表爲未來的擴展原因。在表中插入另一行比找出如何重新約束要容易得多。 – 2008-10-23 18:23:16
是的,我在這種情況下調用YAGNI。 :-) – 2008-10-23 18:33:26
要麼使它foreign key查找表,或添加check constraint來執行它。
CREATE TABLE packages
(
productCode char(2)
, name nvarchar(100)
, ...
,CONSTRAINT productCode CHECK (productCode in ('XJ','XD'))
)
在這種情況下,它聽起來像valueset的產品代碼是相當有限的,不要期望它在可預見的未來成長,所以我傾向於checkconstraint的答案一致。但是,在大多數情況下,我會按照格蘭特先生的建議實施外鍵解決方案,因爲我的客戶每天大約有一次改變主意(以及需求)的惡習。在這種情況下,我認爲FK版本更容易維護。
7年後看了這個問題,如果我再做一遍,我會添加一個表和一個外鍵。用於文檔「XJ是什麼意思?」和數據倉庫以及DBMS之間更好的可移植性。 – 2015-03-07 12:35:11