0
我試圖創建具有兩個特定列的表。在其中一個(送貨員)中有一些可能的價值。其次,也有幾個可能的價值。只有當拯救了值「A」在第二列的值是必需的,否則它可以(也應該是實際上是一個NULL)CREATE TABLE如果其他列有值,則創建具有特定值的列
這是我atempt
CREATE TABLE dict_shipping_types (
id bigserial NOT NULL,
deliverer varchar(50) NOT NULL,
gage varchar(1)
)
;
ALTER TABLE dict_shipping_types
ADD CONSTRAINT CHK_dict_shipping_types_deliverer CHECK (deliverer IN ('CompanyA','CompanyB','CompanyC'))
;
ALTER TABLE dict_shipping_types
ADD CONSTRAINT CHK_dict_shipping_types_gage_not_null
CHECK (
(DELIVERER='CompanyA' AND GAGE IN ('A','B','C') AND GAGE != NULL) OR
(DELIVERER!='CompanyA' AND GAGE=NULL)
)
;
ALTER TABLE dict_shipping_types ADD CONSTRAINT PK_dict_shipping_types
PRIMARY KEY (id)
;
測試查詢
INSERT INTO dict_shipping_types(deliverer) VALUES('CompanyA')
INSERT INTO dict_shipping_types(deliverer,GAGE) VALUES('CompanyB','A')
INSERT INTO dict_shipping_types(deliverer,GAGE) VALUES('CompanyA','D')
他們都應該失敗,但只有第三個失敗。如何檢查我可以允許NULL
或NOT NULL
值?
所以,如果拯救被'A',量具應'A',否則,蓋奇應該是'NULL'?這真的必須存儲嗎?當然,你總是可以推斷Gage *會基於送貨員的價值? – 2014-09-24 10:10:53
我修改了更具體的示例。以前有錯誤。如果送貨員是'A',那麼量具可以具有價值形式(A,B,C),否則它必須是空的 – 2014-09-24 10:14:31