戦国IT - 情報処理技術者試験の過去問対策サイト
ブログお知らせお問い合わせ料金プラン

ITパスポート 2018年 秋期 73


問題文

データベースにおける外部キーに関する記述のうち、適切なものはどれか。

選択肢

外部キーがもつ特性を、一意性制約という。
外部キーを設定したフィールドには、重複する値を設定することはできない。
一つの表に複数の外部キーを設定することはできない。
複数のフィールドを、まとめて一つの外部キーとして設定することができる。(正解)

🔒 解説は解答すると表示されます

データベースにおける外部キーに関する記述のうち、適切なものはどれか。【ITパスポート 解説】

正解の理由

外部キー(foreign key:別の表の行を参照するためのキー)は、複数のフィールドをまとめて一つの外部キー(いわゆる「複合外部キー」)として設定できます。つまり、ある表の複数列の組み合わせが、別の表の主キー(primary key:表内で各行を一意に識別する値)や一意制約(unique constraint:重複を許さない制約)となっている場合、その組をまとめて参照することができます。したがって、選択肢のうち正しいのは です。

解法ステップ

  1. 「外部キーとは何か」をまずは押さえる
    • 外部キーは「別の表のキーを参照して、表同士の関係を保つ仕組み」です(参照整合性:referential integrity)。
  2. 各選択肢が外部キーの性質に合うか比べる
    • 一意性(重複不可)は主に主キーや一意制約の性質。
    • 重複の可否や複数設定の可否はデータベース設計で確認。
  3. 複数フィールドをまとめて参照できるかを考える
    • 複合主キーや複合一意制約を参照するために、複合外部キーは普通に使われる。
  4. よって が正しいと判定する。

選択肢別の誤答解説

  • ア: 外部キーがもつ特性を、一意性制約という。
    • 誤り。外部キーは「参照関係」を保つためのものであり、「一意性(重複不可)」は主キーや一意制約の役割です。外部キー自身が重複禁止になるわけではありません(参照先が一意であれば参照は成立しますが、外部キー側で重複を禁止するのは別の制約です)。
  • イ: 外部キーを設定したフィールドには、重複する値を設定することはできない。
    • 誤り。外部キーの列に同じ値(同じ参照先)を複数行で持つことは普通にあります。例えば「社員ID」を参照する外部キーを持つ「勤怠」テーブルでは、同じ社員IDが多数の勤怠行に現れます。重複を禁止したいなら、その列に一意制約(unique)や主キー制約を追加します。
  • ウ: 一つの表に複数の外部キーを設定することはできない。
    • 誤り。一つの表は複数の外部キーを持てます。例えば「受注明細」テーブルが「受注(order)」と「商品(product)」の両方を参照する場合、order_id と product_id の両方に外部キーを設定します。
  • エ: 複数のフィールドを、まとめて一つの外部キーとして設定することができる。
    • 正しい。複合外部キーにより、複数列の組を参照できます。参照先が複合主キーや複合一意制約である場合に使います。

よくある誤解

  1. 「外部キー=一意(重複不可)」と考える
    • 外部キー自体は参照のための制約であって、重複を禁止するものではありません。重複禁止は主キーや一意制約です。
  2. 「外部キーは必ず1列しか持てない」
    • 実際は複数列を組にして外部キーにできます(複合外部キー)。また、同じテーブルに別々の外部キー列を複数設定することも普通です。
  3. 「外部キーはNULLを許さない」
    • 多くのデータベースでは外部キー列にNULLを設定できます(「参照先がない」ことを意味)。ただし、NULLを禁止したい場合は NOT NULL 制約を付けます。

補足コラム

  • 参照整合性(referential integrity)とは
    • 外部キーは参照整合性を保つための仕組みです。参照先の行が削除されたときにどうするか(DELETE時の挙動)を指定できます。代表的な動作は次の通りです。
      • CASCADE:参照先が削除されたら参照元も削除する。
      • SET NULL:参照先が削除されたら参照元をNULLにする。
      • RESTRICT / NO ACTION:参照先が削除できないようにする(参照があると削除を拒否)。
  • 複合外部キーの具体例(SQL)
    • 店舗ごとの在庫テーブルを複合主キー(store_id, product_id)で作り、販売テーブルがその組を参照する例:
CREATE TABLE ProductAvailability (
  store_id INT,
  product_id INT,
  stock INT,
  PRIMARY KEY (store_id, product_id)
);

CREATE TABLE Sales (
  sale_id INT PRIMARY KEY,
  store_id INT,
  product_id INT,
  qty INT,
  FOREIGN KEY (store_id, product_id)
    REFERENCES ProductAvailability (store_id, product_id)
);
  • このように、複数列をまとめて外部キーにできます。

FAQ

Q1. 外部キーは必ず主キーを参照しないといけませんか?
A1. 必ずしも主キーである必要はありません。参照先の列に一意制約(unique)があれば、それを参照できます。重要なのは参照先が重複しないこと(参照が曖昧にならないこと)です。
Q2. 外部キーにNULLを入れられますか?
A2. 多くのDBで可能です。NULLは「参照先が定まっていない」ことを意味します。NULLを禁止したければ NOT NULL 制約を付けます。
Q3. 複合外部キーはどんな場面で使いますか?
A3. 参照先が複合主キー(2列以上で一意を保っている)になっているときに使います。ジョインテーブルや「店舗+商品」のような複合キー設計でよく使われます。

関連キーワード: 外部キー, 主キー, 参照整合性, 複合外部キー, 一意制約, SQL, 外部参照
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

ITパスポート
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

©︎2026 情報処理技術者試験対策アプリ

このサイトについてブログプライバシーポリシー利用規約特商法表記開発者について