外部キー(foreign key)
- テクノロジ系
- データベース
- 基本情報
- 応用情報
- 重要度 ★★★☆☆
別の表の主キーを参照する列。参照先に存在しない値は入れられない。
もう少し詳しい説明
外部キーは、別の表を指し示すための列です。指した先に無い値は入れられません。
通販の注文を思い浮かべてください。注文するとき、商品名を毎回書くのではなく商品番号を指定します。商品そのものの情報は、別に用意された商品一覧のほうに書かれています。
このとき、商品一覧に無い番号では注文できません。存在しない商品を注文したことになってしまうからです。だからシステムは、注文を受け付ける前に商品一覧を照合し、無い番号を弾きます。
この「指した先に無い値を入れさせない」働きを参照整合性と呼びます。
逆向きの制約もある
外部キーの効き目は、もう1つあります。
ある商品を一覧から消そうとしたとき、その商品への注文がまだ残っていると、消させてもらえません。消してしまうと、注文の側に「どの商品か分からない番号」が残ってしまうからです。
この場合の動きは、設計のときに選べます。
| 選べる動き | 何が起きるか |
|---|---|
| 拒否する(制限) | 参照している行がある限り、削除できない。既定はこれ |
| 連鎖して消す | その商品を指していた注文もまとめて消える |
| 空欄にする | 注文側の商品番号を空にする |
主キーとは性質が違う
外部キーは主キーの相棒ですが、求められる性質は違います。ここが試験でよく問われます。
- 値が重複してよい。 同じ商品への注文が何件あっても構いません
- 空欄を許すことがある。 「まだ決まっていない」状態を表せます
一意で空欄なしが求められる主キーとは、まったく逆です。
正規化と表裏の関係
そもそも、なぜ注文に商品番号だけを書くのか。それは同じ事実を1か所にだけ書くためで、これが正規化の考え方です。
ただし表を分けたままでは、ばらばらのデータになってしまいます。分けた表どうしをつなぎ直し、食い違いが起きないよう見張る役目が外部キーです。分けるのが正規化、つなぎ直すのが外部キー、と対で覚えると位置関係がつかめます。
試験ではこう出る
科目A(旧・午前)のデータベース分野で、主キーとの対比で出ます。多いのは、2つの表を示して外部キーに当たる列を選ばせる形と、参照整合性が働いたときに何が起きるかを問う形です。応用情報では、参照されている行を削除しようとしたときの動作(拒否するか、連鎖して消すか)まで踏み込みます。「参照先に無い値は入れられない」が中心で、ここさえ外さなければ解けます。 応用情報では、外部キーが空値を取りうる場面も問われます。
関連する用語
- 主キー
- 行を1つに特定する列。外部キーはその主キーを指しに行く側で、向きが逆
- 正規化
- 同じ事実を1か所にだけ書くよう表を分ける設計。分けた表をつなぎ直すのが外部キー
- 参照整合性
- 指した先に無い値を入れさせない決まり。外部キーが受け持つ働き
ミニクイズ
注文表の「商品番号」列が、商品表の主キーである「商品番号」を参照する外部キーとして定義されている。このとき成り立つこととして、最も適切なものはどれか。
正解は 2番:商品表に存在しない商品番号を、注文表に登録できない
外部キーは、指した先に無い値を入れさせない仕組みで、これを参照整合性と呼びます。同じ商品番号を2回登録できないのは一意性の話で、外部キーは同じ値が何度出てきても構いません(人気商品なら何百件でも注文が入ります)。行が自動で増えることはなく、索引の有無も外部キーの定義とは別の話です。
最終更新:2026-09-14