令和8年度 ITパスポート試験 公開問題 問57
関係データベースで管理している“学生”表,“科目”表,“成績”表がある。1人の学生は複数の科目を履修するものとし,“学生”表に登録されていない学生や,“科目”表に登録されていない科目は“成績”表に登録できないものとするとき,外部キーとして設定するのが適切なものはどれか。ここで,表中の下線は主キーを表す。

図の説明テキスト
「学生」表
| 学生番号 | 学生名 |
|---|---|
| G001 | 鈴木 次郎 |
| G002 | 山田 春子 |

図の説明テキスト
「科目」表
| 科目コード | 科目名 |
|---|---|
| K001 | データベース |
| K002 | コンピュータ |
| K003 | ネットワーク |

図の説明テキスト
「成績」表
| 学生番号 | 科目コード | 成績 |
|---|---|---|
| G001 | K001 | 優 |
| G001 | K002 | 可 |
| G002 | K002 | 良 |
| G002 | K003 | 優 |
解答・解説
正解: ウ. “成績”表の学生番号と科目コード
外部キーの役割と本問の条件
- 外部キーとは、関係データベースにおいて、他の表の 主キー を参照して、表同士を関連付けるための列のことです。
- 問題文に「“学生”表に登録されていない学生や、“科目”表に登録されていない科目は“成績”表に登録できない」という制約があります。これを 参照制約 と呼びます。
- 例えば、「学生」表には学生番号「G001」「G002」しか登録されていません。もし「成績」表に存在しない学生番号「G003」を登録しようとした場合、それを防ぐ仕組みが必要になります。
各表の構造と外部キーの設定
- 「学生」表では、各学生を一意に識別する「学生番号」が主キー(下線付き)です。
- 「科目」表では、各科目を一意に識別する「科目コード」が主キー(下線付き)です。
- 「成績」表には、「G001」の学生が「K001」(データベース)の科目で「優」を取った、というようにデータが記録されています。
- 未登録の学生・科目の入力を防ぐためには、「成績」表の「学生番号」が「学生」表の「学生番号」を参照し、「成績」表の「科目コード」が「科目」表の「科目コード」を参照するように設定します。
- よって、外部キーとして設定すべき適切な列は、「成績」表の「学生番号」と「科目コード」になります。
各選択肢の解説
- ア: “学生”表の学生番号、“成績”表の学生番号
- “学生”表の「学生番号」は参照される側の主キーであり、外部キーではありません。外部キーを設定するのは参照する側の“成績”表です。また、「科目コード」への制約が含まれていません。
- イ: “学生”表の学生名、“科目”表の科目名
- 「学生名」や「科目名」は主キーではないため、他の表から参照するキーとして不適切です。また、外部キーは参照する側の“成績”表に設定する必要があります。
- ウ: “成績”表の学生番号と科目コード
- 適切です。“成績”表の「学生番号」と「科目コード」を外部キーに設定することで、“学生”表・“科目”表に存在しないデータの登録を防ぐことができます。
- エ: “成績”表の成績
- 「優」や「可」などの「成績」は他の表を参照するためのデータではないため、外部キーには設定しません。