情報処理試験を勉強していると、「外部キーって結局何のためにあるの?主キーとどう違うの?」と混乱しがちです。

外部キーは関係データベースにおいてテーブル間をつなぐ「橋」の役割を果たし、データの整合性を守る制約の中心です。この記事では、その仕組みと試験での問われ方をまとめます。

対象試験と出題頻度

外部キー(Foreign Key)は、基本情報技術者・応用情報技術者で出題されるテーマです。

「外部キーの定義を選ばせる問題」や「参照制約によって拒否される操作を判断する問題」が定番化しており、主キーとの役割の違いを正確に区別できるかが問われます。

詳細をクリックして確認
対象試験:
基本情報技術者
応用情報技術者
出題頻度:
★★★★☆
ランクA(重要)必ず覚えておくべき

用語の定義

外部キー(Foreign Key)とは、一言で言うと

 「他の表の主キー(候補キー)を参照する列で、表と表を関連付ける役割を持つもの

です。

イメージとしては、図書カードに書かれた「著者番号」です。

図書館で本のカードを見ると「著者番号:A012」のような記載があります。

この番号だけでは著者の名前は分かりませんが、著者名簿で「A012」を引けば「夏目漱石」と分かります。著者番号は著者名簿の管理番号(主キー)を借りてきたもので、これが外部キーの構造です。

📊 外部キーの基本情報

項目 内容
英語名 Foreign Key(FK)
分類 関係データベースの整合性制約(参照制約)
SQL構文 FOREIGN KEY (列名) REFERENCES 親テーブル(列名)
対になる概念 主キー(Primary Key)

解説

関係データベースでは、データの冗長性を排除するために正規化でテーブルを分割します。分割すると「別のテーブルにあるデータとどう結び付けるか」が問題になります。

この問題を解決するのが外部キーです。

参照先テーブルの主キーの値を参照元テーブルに持たせることで、テーブル間の関連を定義します。

外部キーが保証する「参照制約」

外部キーを設定すると、DBMSは自動的に「参照制約(参照整合性制約)」を適用します。

これは次の2つのルールで成り立っています。

ルール 内容 具体例
挿入の制限 参照先テーブルに存在しない値を外部キー列に挿入できない 部署テーブルに「D99」がないのに、社員テーブルの部署IDに「D99」を入れるとエラー
削除の制限 参照元テーブルから参照されている行を親テーブルから削除できない 社員テーブルで部署ID「D01」を参照中なら、部署テーブルの「D01」行は削除不可

図解:参照制約の仕組み

以下は、注文テーブルの「顧客番号」が顧客テーブルの主キーを参照しているケースです。

どの操作が許可され、どの操作が拒否されるかを確認してください。

参照制約の動作イメージ

顧客テーブル(親)

顧客番号 氏名
C001 田中
C002 鈴木
C003 佐藤

※ 実線下線=主キー

◀── 参照 ──

注文テーブル(子)

注文番号 顧客番号 商品名
0001 C001 ノートPC
0002 C002 マウス

※ 実線下線=主キー / 破線下線=外部キー

× 拒否される操作

注文テーブルに顧客番号「C999」の行を追加
→ 顧客テーブルにC999が存在しない

顧客テーブルの「C002」行を削除
→ 注文テーブルから参照されている

○ 許可される操作

注文テーブルに顧客番号「C003」の行を追加
→ 顧客テーブルにC003が存在する

注文テーブルの行を削除
→ 子テーブル側の削除は制限されない

SQLでの定義方法

外部キーはCREATE TABLE文の中で定義します。以下は注文テーブルで顧客番号を外部キーに指定する構文例です。

CREATE TABLE 注文 (
    注文番号  CHAR(4)  PRIMARY KEY,
    顧客番号  CHAR(4),
    商品名    VARCHAR(50),
    FOREIGN KEY (顧客番号) REFERENCES 顧客(顧客番号)
);

FOREIGN KEYで参照元の列を、REFERENCESで参照先のテーブルと列を指定します。

この構文で設定される制約が「参照制約」です。

ON DELETE / ON UPDATE の参照動作

参照先の行が削除・更新されたときの振る舞いを、外部キー定義時にオプションで指定できます。

詳細をクリックして確認(何となくで覚えたい人向け)
参照動作 動作内容
CASCADE 親の削除・更新に連動して子の行も削除・更新する
SET NULL 親の削除・更新時に子の外部キー列をNULLにする
SET DEFAULT 親の削除・更新時に子の外部キー列をデフォルト値にする
RESTRICT / NO ACTION 子から参照されている親の行は削除・更新を拒否する(デフォルト動作)

※ AP R1秋 午前問27で「ON DELETE CASCADE」の動作を問う問題が出題されています。

主キー・候補キー・スーパーキーとの違い

「キー」と名の付く用語は複数あり、混同しやすいポイントです。以下で整理します。

キーの種類 役割 特徴
主キー 行を一意に識別する列 重複不可・NULL不可。1テーブルに1つ
候補キー 主キーになり得る列の集合のうち極小のもの 複数存在しうる。主キーに選ばれなかったものは代理キー
スーパーキー 行を一意に識別できる列の組を含む集合 極小でなくてもよい(余分な列を含んでいてもOK)
外部キー 他の表の候補キーを参照する列 値の重複OK・NULLも許容される場合がある

では、この用語が試験でどのように出題されるか見ていきましょう。

💡 外部キーの核心を3行で

・他の表の主キー(候補キー)を参照し、テーブル間の関連を定義する列
・参照制約により「存在しない値の挿入」と「参照されている行の削除」が拒否される
・SQLではFOREIGN KEY … REFERENCES構文で定義する


試験ではこう出る!

外部キーは、FE・APの午前問題でデータベースの整合性制約に関する定番テーマとして繰り返し出題されています。

出題パターンは大きく3つに分かれます。

📊 過去問での出題実績

試験回 出題内容 問われたポイント
AP R5秋
午前 問27
関係モデルにおける外部キーの説明として適切なものを選ぶ ・正解は「ある関係の候補キーを参照する属性、又は属性の組」
・代理キー・候補キー・スーパーキーの定義がひっかけ
FE H29秋
午前 問27
FOREIGN KEYとREFERENCESで指定する制約は何か ・正解は「参照制約」
・キー制約・検査制約・表明がひっかけ
FE H28春
午前 問29
外部キーを定義する目的として適切なものを選ぶ ・正解は「レコード間の参照一貫性が維持される制約をもたせる」
・同一問題がR4修了試験問21等でも流用
FE H24秋
午前 問31
参照の整合性を損なうデータ操作を選ぶ ・正解は「顧客テーブルに存在しない顧客番号の行を注文テーブルに追加する操作」
・H22秋問33と同一問題
AP R1秋
午前 問27
ON DELETE CASCADEの参照動作を問う ・親テーブルの行削除時に子テーブルの対応行も自動削除される動作

📝 IPA試験での出題パターン

パターン1:「外部キーの定義を選べ」
AP R5秋問27のように、候補キー・スーパーキー・代理キーと紛らわしい選択肢が並ぶ形式。ここだけは確実に押さえてください。「他の関係の候補キーを参照する」が外部キーの本質です。「行を一意に識別」と書いてあったら外部キーではありません。

 

パターン2:「FOREIGN KEY構文が指定する制約名を答えよ」
FE H29秋問27の形式。SQL構文と制約名の対応を覚えていれば即答できます。FOREIGN KEY+REFERENCES=参照制約、これだけで得点になります。

 

パターン3:「参照整合性を損なう操作を選べ」
FE H24秋問31のように、具体的な表データを見て「この操作は通るか、拒否されるか」を判断する形式。子テーブルへの挿入と親テーブルからの削除、この2つの方向だけチェックすれば正解にたどり着けます。

 

試験ではここまででOKです。ON DELETEの参照動作(CASCADE等)はAPレベルで出ることがありますが、FEでは深追い不要です。


【確認テスト】理解度チェック

ここまでの内容を理解できたか、簡単なクイズで確認してみましょう。


Q. 関係データベースにおいて、外部キーを定義する目的として最も適切なものはどれでしょうか?

  • A. 表の中で行を一意に識別し、重複データの登録を防止する。
  • B. 関係する相互のテーブルにおいて、レコード間の参照一貫性が維持される制約をもたせる。
  • C. 列に格納できる値の範囲やデータ型を制限し、不正な値の入力を防ぐ。

正解と解説を見る

正解:B

解説:
外部キーは、他のテーブルの候補キー(主キー)を参照する列であり、テーブル間のレコード参照が常に有効であることを保証する「参照制約」を実現するために定義します。FE H28春 午前問29で同趣旨の出題が確認されています。

選択肢Aは主キー(PRIMARY KEY)の目的です。主キーは行の一意識別が役割であり、参照先との関連付けは外部キーの担当です。選択肢Cは検査制約(CHECK制約)やドメイン制約の目的です。値の範囲や型を制限する仕組みであり、テーブル間の関連を定義する外部キーとは目的が異なります。


よくある質問(FAQ)

Q. 外部キーの値にNULLは入れられますか?

テーブル定義でNOT NULL制約を付けていなければ、外部キー列にNULLを入れることは可能です。例えば社員テーブルの「部署ID」がNULLなら「まだ部署に配属されていない」状態を表せます。主キーはNULL不可ですが、外部キーにはこの制限はありません。ただしNULLにした場合、その行はどの親行とも関連付けられない「孤立した状態」になります。

Q. 外部キーは必ず主キーを参照するのですか?候補キーでもよいのですか?

SQL標準上、外部キーが参照できるのは主キーまたはUNIQUE制約が付いた列(候補キー)です。AP R5秋 午前問27の正解選択肢が「候補キーを参照する属性」となっている通り、主キー以外の候補キーも参照先になり得ます。IPA試験では「主キーを参照」と書かれることが多いですが、厳密には候補キーを含む点を知っておくと選択肢の判別に役立ちます。

Q. 外部キーと「リレーションシップ」は同じ意味ですか?

異なります。リレーションシップはE-R図(Entity-Relationship Diagram)でエンティティ間の関連を概念的に表す用語です。外部キーはその概念的な関連を物理テーブル上で実装する手段にあたります。E-R図で「顧客 ─1:N─ 注文」と描いたリレーションシップが、テーブル設計では「注文テーブルに顧客番号の外部キーを持たせる」形で具体化されます。

Q. 実務で外部キー制約をあえて設定しないケースはありますか?

あります。大量データの一括ロード処理やパフォーマンス最優先のシステムでは、外部キー制約による整合性チェックがボトルネックになることがあり、アプリケーション側で整合性を担保する設計を採るケースがあります。ただし、これはIPA試験の範囲では深掘りされません。試験ではあくまで「外部キー=参照制約を実現する仕組み」として理解していれば得点に支障はありません。