【がいぶきー】

外部キー とは?

💡 テーブルをつなぐ「参照パスポート」
📌 このページのポイント
外部キー(FOREIGN KEY) departments(親テーブル) 🔑 id name D01 営業部 D02 開発部 D03 人事部 主キー(PK) employees(子テーブル) id name 🔗 dept_id 1 田中太郎 D01 2 佐藤花子 D02 3 鈴木一郎 D01 外部キー(FK) 参照 ✓ INSERT (id=4, dept_id='D03') D03は親テーブルに存在 → 挿入OK ✗ INSERT (id=5, dept_id='D99') D99は親テーブルに存在しない → エラー(参照整合性違反) 外部キー = 親テーブルの主キーを参照し、参照整合性を保証する制約 存在しない値の挿入や、参照されている親データの削除を防止する
外部キーの仕組み
ひよこ ひよこ

外部キーって何のためにあるの?

ペンギン先生 ペンギン先生

テーブル同士を「関係」でつなぐためだよ。例えば「注文テーブル」に「この注文は誰のもの?」って情報を入れるとき、「ユーザーテーブルのID」を外部キーとして参照するんだ。

ひよこ ひよこ

それって単純に数字を入れるのとどう違うの?

ペンギン先生 ペンギン先生

「外部キー制約」を設定すると、存在しないIDを入れようとするとデータベースがエラーを出して弾いてくれるんだ。「ユーザーID=999のユーザーは存在しない!」ってね。これでデータの整合性が保たれるんだよ。

ひよこ ひよこ

ユーザーを削除したら注文はどうなるの?

ペンギン先生 ペンギン先生

ここが設定次第なんだ。「CASCADE DELETE」にすると関連する注文も一緒に消える、「制約エラー」にすると注文が残ってる限り削除できない、みたいに動作を選べるんだよ。

ひよこ ひよこ

じゃあCASCADEにすれば楽じゃない?

ペンギン先生 ペンギン先生

それが罠で、中上級者でもはまるポイントなんだ。CASCADEは便利だけど、意図せず大量のデータが消えるバグの原因になりやすいんだ。「ユーザー削除したら注文履歴も全消えした」なんて事故が起きやすいから、本番環境では特に慎重に設計する必要があるよ。

ペンギン
まとめ:ざっくりこれだけ覚えればOK!
外部キーって出てきたら「別テーブル主キーを参照してテーブルをつなぐ列」と思えばだいたいOK!
📖 おまけ:英語の意味
「Foreign Key」 = 外来の鍵
💬 「自テーブルではなく別テーブルの鍵(主キー)を参照するから外来(Foreign)」という意味
← 用語集にもどる