【SQL】整合性制約 ~ Integrity Constraints ~

■ はじめに

https://dk521123.hatenablog.com/entry/2016/07/08/234918

で扱ったSQLの制約(Constraints)について、学びなおす

補足:Constraint の英語的意味

(名) 制約、強制

【動】Constrain = 抑制する、抑止(よくし)する
 [語源] con(完全に)+strain(引っ張る) => 強制

 ■ 整合性制約 (Integrity Constraints)

 * データベースに保存されているデータを
 正しい状態で保存しておくための条件のこと。

 ■ 一意性制約(Unique Constraints)

 * テーブル内の全ての行で、ユニーク(固有の値)である制約。

 ■ 参照制約 (Referential Constraints(Integrity))

 * 複数のテーブルを関連付けるため、
 同じ意味を持つ項目同士にリレーションを持たせる制約。

 利点

 * テーブルの行を削除、および、更新することで、
 更新対象データを参照していた別の列の値がなくなってしまうような
 データ矛盾を防ぐことができる

もし、考慮に入れないと...

 * 参照制約を確認せずにレコードを削除すると、
 参照していたレコードが残ってしまう
 →良くあるバグ

 サンプル

-- 以下のようなテーブルおよびデータがあった場合...
CREATE TABLE Employee
(ID CHAR(3) PRIMARY KEY,
 Name NCHAR(3),
 SectionCode CHAR(3),
 FOREIGN KEY(SectionCode) REFERENCES Section));

Section

 ┌────┬────┐
 │ Code │ Name │
 ┝━━━━┿━━━━┥
 │ B01  │人事部 │
 │ B02  │総務部 │
 │ B03  │経理部 │
 │ B04  │企画部 │
 └────┴────┘

もし、Employee表に、『SectionCode = 'B05'』を入れた場合、
SectionCode は外部キーなので、Section 表の Code との参照制約に反することになる。

 参考

 * 【主キー制約】 = 【参照制約】 + 【NOT NULL制約】

 ■ チェック制約 (Check Constraints)

 * 任意の制約条件に違反した値が入らないことを保証する制約。

 参考文献

http://ext-web.edu.sgu.ac.jp/HIKO/Prog03/SenpaiKyozai/shiohara/restriction.html
http://blog.livedoor.jp/akf0/archives/51003441.html
http://thinkit.co.jp/free/tech/31/4/

関連記事

ALTER TABLE ~ テーブル制約変更 編 ~
https://dk521123.hatenablog.com/entry/2016/07/08/234918