基本情報技術者 2017年 秋期 午前(科目A) 問27
問題文
SQL文においてFOREIGN KEYとREFERENCESを用いて指定する制約はどれか。
選択肢
ア:キー制約
イ:検査制約
ウ:参照制約(正解)
エ:表明
FOREIGN KEY と REFERENCES を用いて指定する制約はどれか【午前2 解説】
要点まとめ
- 結論:FOREIGN KEY と REFERENCES は、親子テーブル間の参照整合性を保証する参照制約で、NULL許容やON DELETE/UPDATEの振る舞いを指定して参照関係を管理します。
- 根拠:SQL標準と主要RDBMSは FOREIGN KEY 句で外部キーを定義し、REFERENCES で参照先のテーブルと列を指定し、INSERT/UPDATE/DELETE時に参照整合性違反を抑止します。
- 差がつくポイント:キー制約(主キー・一意制約)や検査制約(CHECK)と混同せず「参照整合性=外部キー」に即答でき、ON DELETE/UPDATE の挙動を説明できると得点差がつきます。
正解の理由
正解は ウ(参照制約)です。
FOREIGN KEY は「外部キー」を定義するための構文で、REFERENCES はその外部キーが参照する親テーブルと列を明示します。これにより参照整合性(子テーブルの値が必ず親テーブルの対応する行を参照すること)をデータベース側で保証します。つまり FOREIGN KEY と REFERENCES の組合せは参照制約(referential constraint)を構成します。
FOREIGN KEY は「外部キー」を定義するための構文で、REFERENCES はその外部キーが参照する親テーブルと列を明示します。これにより参照整合性(子テーブルの値が必ず親テーブルの対応する行を参照すること)をデータベース側で保証します。つまり FOREIGN KEY と REFERENCES の組合せは参照制約(referential constraint)を構成します。
よくある誤解
- 「キー制約」と混同して外部キーも主キーや一意制約の一種だと考える誤解:外部キーは参照整合性を扱い、主キー・一意制約は値の一意性を保証します。
- REFERENCES は単なる注釈だと思う誤解:実際は参照元の値の存在を検証する制約を作り、違反時にエラーや指定したカスケード動作が発生します。
- ON DELETE/ON UPDATE の挙動を無視する誤解:動作(CASCADE, SET NULL, NO ACTION など)を知らないと運用で重大な不整合やデータ消失を招きます。
解法ステップ
- 問題文のキーワードを拾う:「FOREIGN KEY」と「REFERENCES」。
- それらがどの種類の制約と結び付くかを思い出す(外部キー=参照関係)。
- 選択肢を比較:キー制約は主キー・一意性、検査制約は CHECK、表明は一般的な用語ではない。最も該当するのは参照制約。
- 答えを選択(ウ)。
選択肢別の誤答解説
- ア: キー制約
キー制約は主キー(PRIMARY KEY)や一意制約(UNIQUE)で「一意性」を保証するもので、FOREIGN KEY / REFERENCES の役割とは異なります。外部キーは一意性ではなく参照整合性を扱います。 - イ: 検査制約
検査制約(CHECK)は列や行の値が指定条件を満たすかを検証する制約で、別テーブルの存在を参照する機能はありません。 - ウ: 参照制約(正解)
FOREIGN KEY と REFERENCES の組は親テーブルを参照する制約を作り、参照整合性を維持します。よって参照制約が正解です。 - エ: 表明
「表明」は一般的なSQLの制約名称ではなく曖昧な表現です。参照整合性を明確に示すものではありません。
補足コラム
- よく使うオプション例:ON DELETE CASCADE(親が削除されたら子も削除)、ON DELETE SET NULL(子の外部キーをNULL化)など。用途に応じて使い分ける必要があります。
- SQL例:
CREATE TABLE parent ( id INT PRIMARY KEY, name VARCHAR(100) ); CREATE TABLE child ( id INT PRIMARY KEY, parent_id INT, FOREIGN KEY (parent_id) REFERENCES parent(id) ON DELETE CASCADE );
- 補足事項:一部のRDBMSでは参照先に UNIQUE または PRIMARY KEY が必要です。また、遅延制約(DEFERRABLE)や複合外部キーも存在します。
FAQ
Q1: FOREIGN KEY と REFERENCES は同じ意味ですか?
A1: 同義ではありません。FOREIGN KEY は外部キー制約を宣言する部分で、REFERENCES はどのテーブル・列を参照するかを指定する句です。合わせて参照制約を構成します。
A1: 同義ではありません。FOREIGN KEY は外部キー制約を宣言する部分で、REFERENCES はどのテーブル・列を参照するかを指定する句です。合わせて参照制約を構成します。
Q2: 外部キーは参照先の主キーでなければいけませんか?
A2: 多くのRDBMSでは参照先に UNIQUE もしくは PRIMARY KEY が設定されている必要があります。仕様はDBMSごとに確認してください。
A2: 多くのRDBMSでは参照先に UNIQUE もしくは PRIMARY KEY が設定されている必要があります。仕様はDBMSごとに確認してください。
Q3: ON DELETE CASCADE を使うと安全ですか?
A3: 利便性は高いですが、意図せぬデータ消失を招く可能性があります。運用ルールに基づき慎重に採用してください。
A3: 利便性は高いですが、意図せぬデータ消失を招く可能性があります。運用ルールに基づき慎重に採用してください。
関連キーワード: SQL、外部キー、参照制約、参照整合性、FOREIGN KEY、REFERENCES、ON DELETE、ON UPDATE、CHECK制約、主キー、外部キー制約

\ せっかくなら /
基本情報技術者を
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

