■ はじめに
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