📌 結論から理解する
外部キー=「他テーブルの主キーへの参照」
外部キー(Foreign Key / FK)は、あるテーブルの列が別テーブルの主キー(または一意キー)を参照する仕組みです。
外部キーにより「存在しない顧客IDを注文に入れる」といったデータの矛盾を防ぎます。これを参照整合性と言います。
外部キーの関係図
customers(親テーブル)
| customer_id🔑 | name |
|---|---|
| 1001 | 田中 |
| 1002 | 鈴木 |
→
orders(子テーブル)
| order_id🔑 | customer_id🔗 | amount |
|---|---|---|
| 2001 | 1001 | ¥5,000 |
| 2002 | 1002 | ¥3,200 |
| 2003 | 1001 | ¥8,900 |
🔑主キー 🔗外部キー(customersのcustomer_idを参照)
ON DELETE / ON UPDATE 動作
親テーブルのレコードを削除・更新したとき、子テーブルの外部キー列をどう扱うかを指定します。
| 動作 | 説明 | 向いているケース |
|---|---|---|
| RESTRICT | 子が存在する場合は削除・更新を拒否 | 厳格な整合性が必要な場合 |
| CASCADE | 親の削除・更新に子も連動 | 注文明細など親子が運命共同体 |
| SET NULL | 子の外部キー列をNULLにする | 担当者削除後も履歴を残したい |
| NO ACTION | 何もしない(DB依存でエラーになる場合も) | デフォルト動作 |
試験では「CASCADEを使うと子テーブルも自動削除」「RESTRICTは子がある限り親削除不可」が問われる。
よくある勘違い
「外部キーは必須」は誤り。外部キーを設定しなくても動くが、参照整合性が保証されなくなるだけ。ただし試験では「参照整合性の保証に外部キー制約が有効」という理解が必要。
「外部キーの値はNULLにできない」は誤り。外部キー列はNULLを許可できます(「担当者未定」などの状態を表現)。
🧠 確認クイズ
Q1. 外部キーが参照しているのはどれか?
Q2. ON DELETE CASCADE を設定した場合、親レコードを削除するとどうなるか?
Q3. 参照整合性とは何か?