応用情報技術者 2023年 秋期 午前2 問27
問題文
関係モデルにおける外部キーの説明として、適切なものはどれか。
選択肢
ア:ある関係の候補キーを参照する属性、又は属性の組(正解)
イ:主キー以外で、タプルを一意に識別できる属性、又は属性の組
ウ:タプルを一意に識別できる属性、又は属性の組の集合のうち極小のもの
エ:タプルを一意に識別できる属性、又は属性の組を含む集合
🔒 解説は解答すると表示されます
外部キーの定義【午前2解説】
正解の理由
選択肢アは「ある関係の候補キーを参照する属性、又は属性の組」と述べており、外部キー(foreign key)の本質を正しく表しています。関係モデルにおける外部キーとは、一方の関係(テーブル)の属性が、他方の関係における候補キー(通常は主キーや一意制約のある属性)を参照して、参照整合性を保つための仕組みです。重要な点は、外部キー自身が参照先の候補キーを指すものであり、外部キーの側で一意性が保証される必要はないことです。したがって「候補キーを参照する属性」であるアが正解となります。
解法ステップ
- 用語の整理:スーパーキー、候補キー、主キー、外部キーの定義を短く確認する。
- スーパーキー:属性の集合でタプルを一意に識別できるもの(非最小でも可)。
- 候補キー:スーパーキーのうち極小(不要な属性がない)なもの。
- 主キー:候補キーの中から代表に選んだもの(実装上は主に用いられる)。
- 外部キー:ある関係の属性が、別の関係の候補キーを参照するための属性。
- 選択肢を定義と照合する:
- 外部キーは「参照する」ことが本質なので「参照する属性」と明示している選択肢を探す。
- 「一意に識別できる属性」とだけ書かれた選択肢は、外部キーの説明として不十分/誤りである可能性が高い。
- 結論:参照対象が「候補キー」であると明示している選択肢を採る(ア)。
選択肢別の誤答解説
- ア:正しい。外部キーは他の関係の候補キー(多くは主キー)を参照する属性または属性の組であり、参照整合性を確保するために使われる。外部キー側で一意性が要求されるわけではない点に注意。
- イ:誤り。記述は「主キー以外で、一意に識別できる属性、又は属性の組」となっているが、これは候補キー(あるいは候補キーに該当する属性)に関する説明に近いものの、外部キーの定義とは無関係である。また「主キー以外で」と限定するのは誤りで、候補キーには主キーが含まれる(主キーは候補キーの一つとして選ばれたもの)ため、表現が不適切。さらに外部キーは自分のリレーション内で一意である必要はないため、この選択肢は外部キーの説明にならない。
- ウ:誤り。これは「タプルを一意に識別できる属性、又は属性の組の集合のうち極小のもの」とあり、候補キー(=極小なスーパーキー)の定義に相当する。外部キーではなく候補キー(または主キー)の説明である。
- エ:誤り。「タプルを一意に識別できる属性、又は属性の組を含む集合」はスーパーキーやスーパーキーの超集合を指す表現に近い。外部キーは“参照する”側の属性であり、参照先が候補キーである点が欠けているため不適切である。
よくある誤解
- 外部キーは自分のテーブル内で一意でなければならない、という誤解。実際には外部キーは参照先の候補キーの値を参照する役割であり、外部キー側の値が重複していても構わない(業務上の要件次第では一意にすることもあるが、定義上の必須条件ではない)。
- 主キーと候補キーの混同。候補キーは「一意に識別でき、極小である属性集合」で、主キーはその候補キーの一つを選んだもの。主キー以外にも候補キーは存在しうる。
- 外部キーは必ず主キーだけを参照する、という誤解。実際には参照先は候補キー(実装上は主キーや一意制約のある属性)であればよく、必ずしも“主キー”に限定されない(ただし実務では主キー参照が一般的)。
補足コラム
参照整合性(referential integrity)は、外部キー制約によって実現されます。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)
);
上記では child.parent_id が parent.id を参照する外部キーです。参照先の parent.id は候補キー(ここでは主キー)であり、child 側は複数のタプルで同じ parent_id を持つことができます(多対一の関係)。
また、外部キー制約には削除・更新時の動作を指定できます(CASCADE、SET NULL、RESTRICT など)。業務要件に応じて適切に設定することが重要です。
FAQ
Q: 外部キーは参照先の主キーでなければならないですか?
A: 必須ではありません。参照先は候補キー(唯一性が保証される属性)であればよく、主キーが使われることが多いだけです。
A: 必須ではありません。参照先は候補キー(唯一性が保証される属性)であればよく、主キーが使われることが多いだけです。
Q: 外部キー列にNULLを許すことはできますか?
A: できます。NULLは「未設定」を示すため、参照先が存在しないことを許す設計であれば許容されます。ただし業務要件に注意してください。
A: できます。NULLは「未設定」を示すため、参照先が存在しないことを許す設計であれば許容されます。ただし業務要件に注意してください。
Q: 外部キーと一意制約(UNIQUE)の違いは何ですか?
A: 外部キーは参照関係を示す制約であり、参照先の候補キーとの整合性を保ちます。UNIQUEはその列(または列組)が同一テーブル内で重複しないことを保証する制約です。外部キー自身にUNIQUEを付けると一対一の関係になります。
A: 外部キーは参照関係を示す制約であり、参照先の候補キーとの整合性を保ちます。UNIQUEはその列(または列組)が同一テーブル内で重複しないことを保証する制約です。外部キー自身にUNIQUEを付けると一対一の関係になります。
関連キーワード: 関係モデル、外部キー、参照整合性、候補キー、主キー、スーパーキー、外部キー制約

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

