FE EXAM

外部キー(表同士を関連づける列)

他の表の主キーを参照して表同士を関連づける列。

DIAGRAM
主キー(PK)
外部キー(FK)
社員表の「部署番号」が、部署表の主キーを参照する社員表社員番号🔑氏名部署番号101田中 太郎D01102鈴木 花子D02103佐藤 次郎D01外部キー(FK)部署表部署番号🔑部署名D01営業部D02開発部主キー(PK)参照「D99」のように部署表に存在しない値は登録できない→ 参照整合性が保たれ、宙に浮いた社員が生まれない
解説

📌
外部キーとは

FK が別表の PK を指し示す社員表部署番号(FK)部署表部署番号(PK)

外部キー(フォーリンキー)とは、他の表の主キーを参照して、表同士を関連づける列です。主キーが「自分の表の行を識別する列」なのに対し、外部キーは「別の表の行を指し示す列」だと考えると分かりやすいです。

身近な例で考えると、本に付いている著者番号に似ています。「本の一覧表」に著者番号を1つ書いておけば、「著者の一覧表」のどの著者かをたどれます。社員表に「部署番号」を書いておくと、部署表のどの部署に所属しているかが分かる、という仕組みです。

上の図解では、社員表の「部署番号」(外部キー)が、部署表の「部署番号」(主キー)を指し示しています。こうして同じ値を橋渡しに使うことで、別々の表に分けたデータを結びつけられます。1つの表に外部キーは複数あってもかまいません。

📌
参照整合性との関係

存在しない参照先はエラーになるOK部署=D01部署表に存在NG部署=D99部署表に存在しない

外部キーには参照整合性という大切な働きがあります。これは、外部キーの値が必ず参照先の主キーに存在することを保証する仕組みです。

データベースは外部キー制約により、次のような矛盾したデータを防ぎます。
存在しない部署番号の社員は登録できない(参照先にない値を拒否)
社員がまだ所属する部署を、不用意に削除できない
こうして「どこにも所属していない社員」のような宙に浮いたデータが生まれないようにします。

身近な例で考えると、住所録と地名の関係に似ています。住所録に「存在しない市町村名」を書けないようにしておけば、配達できない住所が混ざらずに済みます。参照整合性は、表同士のつながりが常に正しい状態を保つための「番人」のような役割です。

📌
参照先を削除しようとしたとき — 何が起きるのか

部署表D01営業部D02開発部社員表101D01102D01103D02FK×削除しようとすると…エラー(拒否)RESTRICT参照がある限り削除不可一緒に削除(CASCADE)参照している社員行も削除NULLに置換(SET NULL)社員のFK列をNULLにする

外部キーで参照されている行を削除しようとしたとき、データベースは「宙に浮いたデータ」が生まれないよう保護します。この動作のことを「ON DELETE アクション」といい、設定によって動きが変わります。

主な3パターンを覚えておくと便利です。
RESTRICT(制限):参照している行が存在する限り、削除を拒否してエラーにします。最も安全。
CASCADE(連鎖):参照元の行を自動的に一緒に削除します。親の部署が消えたら、その部署の社員も全員削除されます。
SET NULL(NULL置換):参照先が消えたら、外部キー列を空(NULL)に置き換えます。社員は残るが所属部署が「未設定」になります。

なぜこの動作を知っておくのか。外部キーの制約はデータを守るためのものですが、「削除できなくてエラー」「間違えて大量削除」といった問題も引き起こしえます。どのアクションが設定されているかを理解しておくことが、データを正しく扱うための第一歩です。

📌
主キーと外部キー — 役割の違いを整理する

主キー(PK)外部キー(FK)
役割自分の表の行を一意に識別する別の表の行を指し示して関連づける
表の数1つの表に1つだけ1つの表に複数あってもよい
NULL禁止(必ず値が必要)許可される(場合による)
重複禁止(必ず一意)許可(同じ値が複数行にあってよい)
具体例社員表の「社員番号」社員表の「部署番号」(部署表を参照)

主キーと外部キーは名前が似ていて混同しやすいですが、役割がまったく異なります

主キーは「自分の表の番号札」です。クラスの出席番号のように、その表の中で行を区別するためだけの番号で、空も重複も許されません。

外部キーは「別の表への案内板」です。社員表の「部署番号」列は、部署表を指し示すための値を持ちます。同じ部署に複数の社員がいるので値の重複は普通にあります(D01が101・103の両方に入る)。また、所属部署が未定の社員がいれば NULL も許容されます。

2つのキーを組み合わせることで、データを別々の表に整理しつつ、必要なときにつなぎ直せる関係データベースの仕組みが成立します。

📌
用途

表を分けて重複を防ぐ注文表顧客ID(FK)顧客表顧客ID(PK)

外部キーは、データを複数の表に分けて整理しつつ、必要なときに結びつけるために使います。1つの表にすべてを詰め込むと、同じ情報が何度も繰り返し書かれてしまうからです。

外部キーがもたらす主な利点は次のとおりです。
重複を防ぐ:部署名や顧客名を1か所にまとめ、ほかの表は番号で参照する
変更が楽になる:部署名が変わっても、部署表の1行を直すだけで済む
関連をたどれる:社員 → 部署、注文 → 顧客のように表をつないで検索できる

身近な例で考えると、レシートと商品マスタの関係に似ています。レシートには商品名をそのまま書かず「商品コード」だけを書いておき、商品名や価格は別の一覧(商品マスタ)で管理します。こうしておけば価格改定のときも、マスタを1か所直すだけで全レシートに反映できる、というイメージです。

練習問題

🎯
基本情報技術者 練習問題

Q1.外部キーの説明として最も適切なものはどれか。
A.同じ表の中でレコードを一意に識別する列
B.他の表の主キーを参照して表同士を関連づける列
C.データを暗号化するための鍵
D.検索を高速化するための索引
Q2.外部キーによって保たれる「参照整合性」の説明として最も適切なものはどれか。
A.外部キーの値は、参照先の表に必ず存在しなければならない
B.外部キーの値は必ず空(NULL)でなければならない
C.外部キーは数値しか入れられない
D.参照先の表は削除されてはならない
Q3.部署表と社員表があり、社員表の「部署番号」が部署表の主キーを参照している。このとき社員表に登録できないデータはどれか。
A.部署表に存在する部署番号を持つ社員
B.部署表に存在しない部署番号を持つ社員
C.氏名が長い社員
D.入社年が古い社員

関連コンテンツ