コンテンツにスキップ

外部キー制約の知っておいて欲しいこと

チェック

  • [ ] 本文を確認した
  • [ ] 概要を確認した
  • [ ] タグを確認した
  • [ ] inbox/ 直下へ移行した

概要

RDBMS を正しく使うために、外部キー制約がどのように関係の整合性を守るかを説明する資料。 リレーショナルデータベースは集合と関係を扱うデータモデルであり、関係は意図的な整合性を含む。 外部キー制約はその意図を DB に表現する仕組みであり、親に存在しない値を子に作れないようにする。

本文

資料は、データモデリングの重要性から始まる。 リレーショナルデータベースは、集合と関係を扱うデータモデル。 関係は単なる参照ではなく、意図的な整合性を含んだ集合として扱われる。 外部キー制約は、その意図を DBMS に表現するための仕組み。

外部キー制約は、参照元、つまり子の値が、参照先、つまり親に必ず存在することを担保する。 親にない値は子に作れない。 また、子が参照している親の値を削除・変更すると不整合が発生するため、親の変更時にどう整合性を保つかを定義する。

代表的な動作は次の通り。

  • RESTRICT / NO ACTION: 子がいる限り親を削除できない
  • CASCADE: 親を削除すると子も削除する。更新も追従する
  • SET NULL: 親が消えると子の FK を NULL にする
  • SET DEFAULT: 親が消えると子の FK を DEFAULT にする

MySQL InnoDB の説明では、値確認や親の変更時に index が関わる。 外部キーを使うなら、親子の参照関係だけでなく index と lock の挙動も理解しておく必要がある。

要点

  • 外部キー制約は関係の意図を DB に表現するもの。
  • 親に存在しない値を子に持たせない。
  • 親の削除・更新時の挙動は RESTRICTCASCADESET NULL などで決まる。
  • RDBMS を正しく使うには外部キー制約と index / lock の理解が必要。

タグ

database #foreign-key #rdbms #data-modeling #mysql