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

ITパスポート 2017年 秋期 88


問題文

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

選択肢

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

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

関係データベースの外部キーに関する記述【ITパスポート 解説】

正解の理由

関係データベースでいう外部キー(foreign key:他の表の主キーを参照する列)は、ある表の中で「別の表の行を指し示すための値」を保持します。したがって、1つの表に複数の外部キーを設定することは可能です。例えば「注文(Order)」表が「顧客(Customer)」表の顧客IDと「出荷先(Shipping)」表の出荷先ID、両方を参照する場合、注文表に外部キーが2つ存在します。これが選択肢のが適切な理由です。

解法ステップ

  1. 「外部キーとは何か」を簡単に定義する:他の表の主キー(primary key:一意に行を識別する列)を参照する列であると確認する。
  2. 各選択肢を定義に当てはめる:外部キーが「一意である必要があるか」「複数設定できるか」「複数列をまとめてできないか」などを照らし合わせる。
  3. 実例を頭に描く:注文表、顧客表、商品表など身近な例で試すと誤りに気づきやすい。
  4. 最も現実的かつ定義に一致する選択肢を選ぶ。

選択肢別の誤答解説

  • ア: 外部キーがもつ特性を、一意性制約という。
    誤り。外部キーは「参照関係(他表の値を参照する)」を示すものであって、必ずしも一意(ユニーク)である必要はありません。一意性制約(unique constraint:列の値が重複しないようにする制約)は別の概念です。外部キーと一意性制約は独立して設定できます。
  • イ: 外部キーを設定したフィールドには、重複する値を設定することはできない。
    誤り。外部キーは同じ参照先を複数の行で指すことが普通にあります(例:同じ顧客が複数の注文を出す)。したがって重複(同じ外部キー値の複数行)を許すのが一般的です。必要なら一意性制約を別途付けます。
  • : 一つの表に複数の外部キーを設定することができる。
    正しい。1つの表が複数の他表を参照するケースは日常的に発生します(注文→顧客、注文→商品、支払→口座 など)。
  • エ: 複数のフィールドを、まとめて一つの外部キーとして設定することはできない。
    誤り。複数の列を組み合わせて1つの外部キー(複合外部キー、composite foreign key)にすることは可能です。参照先の主キーが複数列で構成されている場合に使われます。

よくある誤解

  1. 外部キー=ユニークだと思う
    → 外部キーは参照を保証するものであって、重複禁止(ユニーク)とは別です。重複を禁止したければ明示的に一意性制約を付けます。
  2. 外部キーは必ず1つの列だけだと思う
    → 複合(複数列)で外部キーを作ることができます。参照先の主キーが複数列の場合に必要です。
  3. 外部キーを参照先のテーブルにしか設定できない、という混同
    → 外部キーは「参照する側(子テーブル)」に設定します。参照される側(親テーブル)には主キーなどの一意制約があることが多い、という役割の違いを押さえてください。

補足コラム

  • 参照整合性(referential integrity)
    外部キーは参照整合性を保つために使います。参照される側に存在しない値が子テーブルに入らないようにするルールです。多くのデータベースでは外部キー制約で「親レコードが削除されたときに子も削除する(ON DELETE CASCADE)」や「削除・更新を禁止する(ON DELETE RESTRICT / NO ACTION)」などの動作を指定できます。
  • NULL と外部キー
    外部キー列は NULL(何も値がないこと)を許す設定にもできます。NULLは「参照なし」を意味することが多く、必ず参照を要求するかどうかは設計次第です。
  • SQL例(複数の外部キーと複合外部キー)
-- 例1: 一つの表に複数の外部キー
CREATE TABLE Orders (
  order_id INT PRIMARY KEY,
  customer_id INT,
  product_id INT,
  FOREIGN KEY (customer_id) REFERENCES Customers(customer_id),
  FOREIGN KEY (product_id) REFERENCES Products(product_id)
);

-- 例2: 複合外部キー(親の主キーが複数列の場合)
CREATE TABLE Parent (
  a INT,
  b INT,
  PRIMARY KEY (a, b)
);

CREATE TABLE Child (
  x INT,
  y INT,
  FOREIGN KEY (x, y) REFERENCES Parent(a, b)
);

FAQ

Q1: 外部キーは必ず制約として設定しないといけませんか?
A1: 必須ではありませんが、データの整合性を保つために制約として設定するのが一般的です。制約なしだと誤った参照が発生する可能性があります。
Q2: 外部キーで参照先の複数のテーブルを同時に指せますか?
A2: 1つの外部キー列が複数テーブルを直接参照することはできません。必要なら別の外部キー列を追加するか、設計を見直します。
Q3: 外部キーにインデックスは必要ですか?
A3: パフォーマンスや参照整合性の観点から、外部キーの列にインデックスを張ることが推奨される場合があります。DBMS(データベース管理システム)によって自動でインデックスを作ることもあります。

関連キーワード: 外部キー、主キー、リレーショナルデータベース、参照整合性、複合キー、一意性制約
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

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

クイズ画面へ遷移する

すぐに利用可能!

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

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