問57 成績の表に置く外部キー

ITパスポート 令和8年度 公開問題、全100問のうちの問57。

出典:令和8年度 ITパスポート試験 公開問題 問57(3 つの表は原本の画像を文字に書き起こし、狭い画面で読めるよう 1 行ずつ並べる 2 列の表にまとめた。下線の主キーは列の名前のあとに書いた)

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

表列と登録されている行
学生列は 学生番号 (主キー),学生名
学生G0⁠0⁠1 鈴木 次郎
学生G0⁠0⁠2 山田 春子
科目列は 科目コード (主キー),科目名
科目K0⁠0⁠1 データベース
科目K0⁠0⁠2 コンピュータ
科目K0⁠0⁠3 ネットワーク
成績列は 学生番号 (主キー),科目コード (主キー),成績
成績G0⁠0⁠1 K0⁠0⁠1 優
成績G0⁠0⁠1 K0⁠0⁠2 可
成績G0⁠0⁠2 K0⁠0⁠2 良
成績G0⁠0⁠2 K0⁠0⁠3 優
  1. ア“学生”表の学生番号,“成績”表の学生番号
  2. イ“学生”表の学生名,“科目”表の科目名
  3. ウ“成績”表の学生番号と科目コード
  4. エ“成績”表の成績
答えと解説を開く

正解はウです。

外部キーは、ある表の列の値が、別の表の主キーに必ずある値だけになるよう縛る仕組みです。“成績”表の学生番号に外部キーを置き、“学生”表の学生番号を指すようにすれば、“学生”表にいない学生の成績は登録できません。同じように“成績”表の科目コードを“科目”表の科目コードへの外部キーにすれば、ない科目は登録できません。この 2 つの列は“成績”表の主キーでもありますが、主キーと外部キーを兼ねてかまいません。だから正解はウです。

ほかの選択肢が違う理由

  • ア“学生”表の学生番号は主キーで、指される側です。外部キーは“成績”表の側に置きます。また科目の縛りが入っていません。
  • イ学生名や科目名は主キーではなく、同じ名前の人がいることもあります。外部キーで指す先にはできません。
  • エ“成績”表の成績 (優、良、可) は、ほかの表を指す値ではないので外部キーになりません。

仕組み

主キーは、表の中で行を 1 つに決める列です。外部キーは、ほかの表の主キーを指す列で、表と表のつながりを表します。

外部キーを置くと、DBMS が「指す先に無い値」を入れさせません。これを参照制約と呼び、データの食い違いを防ぎます。

この問に出る言葉