SQL 指南書集 目次 - ray88’s diary
■Check制約の条件式にCASE文を使用する
【事例】
女性社員の給料は20万円以下という給与体系をもつ会社の人事テーブルの制約
※「--error」のコメント文のところでエラーとなる。(女性社員の給料が20万円以上で制約違反のため)
CREATE TABLE TestSal (sex CHAR(1) , salary INTEGER, CONSTRAINT check_salary CHECK ( CASE WHEN sex = '2' THEN CASE WHEN salary <= 200000 THEN 1 ELSE 0 END ELSE 1 END = 1 )); INSERT INTO TestSal VALUES(1, 200000); INSERT INTO TestSal VALUES(1, 300000); INSERT INTO TestSal VALUES(1, NULL); INSERT INTO TestSal VALUES(2, 200000); INSERT INTO TestSal VALUES(2, 300000); --error INSERT INTO TestSal VALUES(2, NULL); INSERT INTO TestSal VALUES(1, 300000);
※例えば、以下のように倫理積のCHECK制約を付けると、男性を雇用できない。条件法であれば男性も働ける
※条件法はそもそも社員の性別が女性ではない、あるいは性別不明の場合は真となる。その意味で、倫理積よりも緩い制約であるといえる。
CONSTRAINT check_salary CHECK (sex = '2' AND salary <= 200000)
【倫理積と条件法】