令和8年度 ITパスポート試験 公開問題 問57

関係データベースで管理している“学生”表,“科目”表,“成績”表がある。1人の学生は複数の科目を履修するものとし,“学生”表に登録されていない学生や,“科目”表に登録されていない科目は“成績”表に登録できないものとするとき,外部キーとして設定するのが適切なものはどれか。ここで,表中の下線は主キーを表す。

「学生」表
図の説明テキスト

「学生」表

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

「科目」表

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

「成績」表

学生番号 科目コード 成績
G001 K001 優
G001 K002 可
G002 K002 良
G002 K003 優
解答・解説

正解: ウ. “成績”表の学生番号と科目コード

外部キーの役割と本問の条件

  • 外部キーとは、関係データベースにおいて、他の表の 主キー を参照して、表同士を関連付けるための列のことです。
  • 問題文に「“学生”表に登録されていない学生や、“科目”表に登録されていない科目は“成績”表に登録できない」という制約があります。これを 参照制約 と呼びます。
  • 例えば、「学生」表には学生番号「G001」「G002」しか登録されていません。もし「成績」表に存在しない学生番号「G003」を登録しようとした場合、それを防ぐ仕組みが必要になります。

各表の構造と外部キーの設定

  • 「学生」表では、各学生を一意に識別する「学生番号」が主キー(下線付き)です。
  • 「科目」表では、各科目を一意に識別する「科目コード」が主キー(下線付き)です。
  • 「成績」表には、「G001」の学生が「K001」(データベース)の科目で「優」を取った、というようにデータが記録されています。
  • 未登録の学生・科目の入力を防ぐためには、「成績」表の「学生番号」が「学生」表の「学生番号」を参照し、「成績」表の「科目コード」が「科目」表の「科目コード」を参照するように設定します。
  • よって、外部キーとして設定すべき適切な列は、「成績」表の「学生番号」と「科目コード」になります。

各選択肢の解説

  • ア: “学生”表の学生番号、“成績”表の学生番号
    • “学生”表の「学生番号」は参照される側の主キーであり、外部キーではありません。外部キーを設定するのは参照する側の“成績”表です。また、「科目コード」への制約が含まれていません。
  • イ: “学生”表の学生名、“科目”表の科目名
    • 「学生名」や「科目名」は主キーではないため、他の表から参照するキーとして不適切です。また、外部キーは参照する側の“成績”表に設定する必要があります。
  • ウ: “成績”表の学生番号と科目コード
    • 適切です。“成績”表の「学生番号」と「科目コード」を外部キーに設定することで、“学生”表・“科目”表に存在しないデータの登録を防ぐことができます。
  • エ: “成績”表の成績
    • 「優」や「可」などの「成績」は他の表を参照するためのデータではないため、外部キーには設定しません。

Spineチーム