外部キー制約の知っておいて欲しいこと¶
チェック¶
- [ ] 本文を確認した
- [ ] 概要を確認した
- [ ] タグを確認した
- [ ]
inbox/直下へ移行した
概要¶
RDBMS を正しく使うために、外部キー制約がどのように関係の整合性を守るかを説明する資料。 リレーショナルデータベースは集合と関係を扱うデータモデルであり、関係は意図的な整合性を含む。 外部キー制約はその意図を DB に表現する仕組みであり、親に存在しない値を子に作れないようにする。
本文¶
資料は、データモデリングの重要性から始まる。 リレーショナルデータベースは、集合と関係を扱うデータモデル。 関係は単なる参照ではなく、意図的な整合性を含んだ集合として扱われる。 外部キー制約は、その意図を DBMS に表現するための仕組み。
外部キー制約は、参照元、つまり子の値が、参照先、つまり親に必ず存在することを担保する。 親にない値は子に作れない。 また、子が参照している親の値を削除・変更すると不整合が発生するため、親の変更時にどう整合性を保つかを定義する。
代表的な動作は次の通り。
RESTRICT/NO ACTION: 子がいる限り親を削除できないCASCADE: 親を削除すると子も削除する。更新も追従するSET NULL: 親が消えると子の FK を NULL にするSET DEFAULT: 親が消えると子の FK を DEFAULT にする
MySQL InnoDB の説明では、値確認や親の変更時に index が関わる。 外部キーを使うなら、親子の参照関係だけでなく index と lock の挙動も理解しておく必要がある。
要点¶
- 外部キー制約は関係の意図を DB に表現するもの。
- 親に存在しない値を子に持たせない。
- 親の削除・更新時の挙動は
RESTRICT、CASCADE、SET NULLなどで決まる。 - RDBMS を正しく使うには外部キー制約と index / lock の理解が必要。