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

応用情報技術者 2014年 春期 午前225


問題文

SQL文においてFOREIGN KEYとREFERENCESを用いて指定する制約はどれか。

選択肢

キー制約
検査制約
参照制約(正解)
表明

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

参照制約(外部キー)【午前2解説】

正解の理由

SQLでのFOREIGN KEYとREFERENCESは、他の表の行を参照して「参照整合性」を維持するための制約を定義します。したがって選択肢が正解です。具体的には、FOREIGN KEY句は外部キー制約を宣言する役割を持ち、REFERENCES句は参照先の親表と列(主キーまたは候補キー=UNIQUE制約付き列)を指定します。
※重要な点として、REFERENCESが参照できるのは「主キー」に限らず、候補キー(UNIQUE制約の付いた列)も対象になります。またREFERENCES句は列レベルでも単独に書いて参照制約を定義できます(必ずFOREIGN KEYとセットでなければならない、という記述は誤りです)。

解法ステップ

  1. 問題文にあるキーワード(FOREIGN KEY, REFERENCES)を確認する。
  2. それらが何のために使われるかを想起する(他表を参照して整合性を保つため)。
  3. 選択肢に当てはめる:参照整合性に直結する語を選ぶ(参照制約)。
  4. 他の選択肢(キー制約、検査制約、表明)と比較して意味が一致するか検証する。

選択肢別の誤答解説

  • ア: キー制約
    「キー制約」は主キーやユニーク制約のようにキー自体に関する制約を指します。FOREIGN KEY/REFERENCESは親表のキーを参照するために使うが、制約の本質は「参照(整合性)」であり、単にキーを定義することとは区別されます。
  • イ: 検査制約
    「検査制約(CHECK)」は列や行の値が特定の条件を満たすかを検証するためのものです。FOREIGN KEY/REFERENCESは表間の参照関係を扱うため一致しません。
  • : 参照制約
    正解。表間の参照整合性(参照制約/外部キー制約)を表す語です。
  • エ: 表明
    「表明(ASSERTION)」はSQL標準にある表レベルの制約概念ですが、問題文で示されているFOREIGN KEYとREFERENCESが直接表明を意味するわけではありません。

よくある誤解

  1. REFERENCESは必ず主キーを参照する
    → 誤り。REFERENCESは親テーブルの主キーだけでなく、候補キー(UNIQUE制約のある列・列組合せ)を参照できます。参照先の列は一意である必要がありますが、必ずしもPRIMARY KEYである必要はありません。
  2. REFERENCESは常にFOREIGN KEYとセットで書かなければならない
    → 誤り。列定義の中で直接 REFERENCES を書いて参照制約を作ることが可能です(例: col INT REFERENCES parent(col))。一方、テーブル定義の表レベルでは FOREIGN KEY (...) REFERENCES ... の形式で記述します。
  3. 外部キーの削除時に自動で子も削除される
    → デフォルトはNO ACTION/RESTRICT(削除や更新を拒否)で、ON DELETE/ON UPDATEで明示的にCASCADE等を指定しない限り自動削除は行われません。

補足コラム

参照制約(外部キー制約)はデータベースの参照整合性を保つ基本機能です。よく使われるオプションに ON DELETE と ON UPDATE があり、親表の行が削除・更新されたときの子表側の振る舞いを指定します。代表的な指定は以下です。
  • ON DELETE CASCADE / ON UPDATE CASCADE: 親の変更に合わせて子も自動で変更・削除される
  • ON DELETE SET NULL: 親削除時に子の該当列をNULLにする(NULLを許容する場合)
  • ON DELETE RESTRICT / NO ACTION: 親に対する操作を拒否(デフォルト系)
実際の記述例:
-- 列レベルのREFERENCES(列定義に直接指定)
CREATE TABLE child (
  id INT PRIMARY KEY,
  parent_id INT REFERENCES parent(id)
);

-- テーブルレベルのFOREIGN KEY
CREATE TABLE child2 (
  id INT,
  parent_id INT,
  FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE
);

-- 複合キー(親側がUNIQUEまたはPRIMARY KEY)
CREATE TABLE parent (
  a INT,
  b INT,
  UNIQUE (a, b)
);
CREATE TABLE child3 (
  a INT,
  b INT,
  FOREIGN KEY (a, b) REFERENCES parent(a, b)
);
なお、参照先の列数・データ型は外部キー側と整合している必要があります(列数や型が一致すること)。

FAQ

Q: REFERENCESは必ずPRIMARY KEYを参照しますか?
A: いいえ。主キー(PRIMARY KEY)だけでなく、候補キー(UNIQUE制約の付いた列や列組合せ)も参照先にできます。要件は「参照先で一意に識別できること」です。
Q: FOREIGN KEYとREFERENCESはどちらが制約の本体ですか?
A: 外部キー制約の表現には2通りあります。テーブルレベルでは FOREIGN KEY (...) REFERENCES ... と書きますが、列レベルでは列定義内に直接 REFERENCES を書いて参照制約を作れます。本質的には「参照制約(外部キー制約)」が目的です。
Q: 親テーブルの行を削除すると子テーブルの行は自動で消えますか?
A: デフォルトでは消えません。自動で消したい場合は ON DELETE CASCADE を指定します。指定が無ければ削除は制約違反になり、エラーになります。

関連キーワード: 外部キー, 参照整合性, REFERENCES句, FOREIGN KEY, UNIQUE, PRIMARY KEY, ON DELETE CASCADE, 列レベル制約, テーブルレベル制約
← 前の問題へこの年度をクイズで解く次の問題へ →
戦国ITクイズ機能

\ せっかくなら /

応用情報技術者
クイズ形式で学習しませんか?

クイズ画面へ遷移する

すぐに利用可能!

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

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