我有一张表依赖
CREATE TABLE DEPENDANT (DEPENDANT_NM VARCHAR2(15) PRIMARY KEY,
DEP_GENDER CHAR(1), DEP_BDAT DATE, RELATED_HOW VARCHAR2 (8), ESSNO CHAR(9));
ALTER TABLE DEPENDANT ADD CONSTRAINT FK_ESSNO FOREIGN KEY (ESSNO)
REFERENCES HW_EMPLOYEE(SSNO);
ALTER TABLE DEPENDANT ADD CONSTRAINT CK_DEP_GENDER CHECK
(DEP_GENDER IN ('M','F'));
我需要添加一个限制条件,确保女性家属只能被称为“女儿”或“配偶”和男性家属,或者仅仅是“儿子”或“配偶”
我是否使用像...这样的检查约束
ALTER TABLE DEPENDANT ADD CONSTRAINT CK_RELATEDF CHECK (DEP_GENDER = 'F' AND
RELATED_HOW IN('Daughter' OR 'Spouse'));
答案 0 :(得分:2)
你必须这样写:
ALTER TABLE DEPENDANT
ADD CONSTRAINT CK_RELATEDF
CHECK (DEP_GENDER = 'F' AND RELATED_HOW IN ('Daughter', 'Spouse'));
修改:您必须在一次检查中执行此操作:
ALTER TABLE DEPENDANT ADD CONSTRAINT CK_RELATEDF
CHECK ((DEP_GENDER = 'F' AND RELATED_HOW IN ('Daughter', 'Spouse'))
OR (DEP_GENDER = 'M' AND RELATED_HOW IN ('Son', 'Spouse')));
答案 1 :(得分:2)
“你必须在一次检查中完成”
我被这个断言所吸引(没有双关语意)。
在我看来,四个约束不仅是可能的,而且是可取的(以提供增加的故障消息的粒度),例如
ALTER TABLE DEPENDANT ADD CONSTRAINT Gender_legal_values
CHECK ( DEP_GENDER IN ( 'M', 'F' ) );
ALTER TABLE DEPENDANT ADD CONSTRAINT Related_legal_values
CHECK ( RELATED_HOW IN ( 'Son', 'Daughter', 'Spouse' ) );
ALTER TABLE DEPENDANT ADD CONSTRAINT Female_legal_values
CHECK ( DEP_GENDER = 'M' OR RELATED_HOW IN ( 'Daughter', 'Spouse' ) );
ALTER TABLE DEPENDANT ADD CONSTRAINT Male_legal_values
CHECK ( DEP_GENDER = 'F' OR RELATED_HOW IN ( 'Son', 'Spouse' ) );