2

私はテーブルDEPENDENTを持っています

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'));
4

2 に答える 2

2

次のように記述する必要があります。

ALTER TABLE DEPENDANT 
    ADD CONSTRAINT CK_RELATEDF 
        CHECK (DEP_GENDER = 'F' AND RELATED_HOW IN ('Daughter', 'Spouse'));

編集:1回のチェックでそれを行う必要があります:

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')));
于 2013-11-05T22:04:39.953 に答える
2

「1回のチェックでそれをしなければならない」

私はこの主張に興味をそそられました(しゃれた意図はありません)。

4 つの制約が可能であるだけでなく、(失敗メッセージの粒度を高めるために) 望ましいと思われます。

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' ) );
于 2013-11-06T22:28:18.147 に答える