最近SQLの学習をしているのですが、テーブル設計に関する項目を学習したので、テーブル作成時に使用する、制約についてまとめておきたいと思います。
そもそもなぜ、制約をかけるのか
データベースはというものは非常に重要で、簡単書き換えられてはいけません。
なので、あえて制約をかけ、予期しない値を格納できないようにすることで、人為的ミスによるデータ破壊の可能性を減らすことができます。
NOT NULL 制約
NOT NULL制約はが設定された列にはNULLは格納されません。
NOT NULL制約が設定された列に対してINSERTしようとするとエラーが発生し、処理が失敗します。
NOT NULL制約はDEFAULT指定と組み合わせて利用されることが多い。
UNIQUE 制約
ある列の内容が決して重複しない場合はUNIQUE制約を設定します。
例えば、カテゴリーなどはは同じものがデータとして登録されることがないのでUNIQUE制約がかけられます。
また、NULLが格納された行が複数存在することは許容されています。
CHECK制約
ある列に格納される値が妥当であるかを細かく判定したい場合は、CHECK制約を設定します。
CHECKの後ろのカッコ内に記述した条件式が真となるような値だけが格納できます。
主キー制約
主キーとは...その列の値を指定すれば、どの一行か完全に特定できる列のこと(いわゆるID列)
主キーの性質として、他の行と重複してはならない、必ず値が格納されていなければならない。
UNIQUE制約とNOT NULL制約の両方の性質を持っているが、主キーを担う列に主キー制約(PRIMARY KEY 制約)を設定する
外部キー制約
外部キー...関連したテーブル間を結ぶために設定する列のことで、データの整合性を保証するために設定する。
参照整合性...外部キーが指し示す先にきちんと行が存在してリレーションが成立していること。
外部キー制約とは参照整合性を崩壊させないための制約である。
外部キー制約を設定していると、参照整合性を崩すような操作をしようとした時にエラーを発生させて強制的に処理が中断される。
普段SELECT文ばっかりだったので改めて制約について学んでみると、データベースのことを深く知れた気がします。
ちなみに僕が今学習中の本は下の本です。
初心者でもわかりやすいと思います。
※Amazon.co.jpのアフィリエイトになっています。