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



選択肢
- ア:“学生”表の学生番号,“成績”表の学生番号
- イ:“成績”表の学生名,“科目”表の科目名
- ウ:“成績”表の学生番号と科目コード
- エ:“成績”表の成績
- ア
- イ
- ウ
- エ
正解と解き方・学習ポイント(AI解説)
外部キーは、他の表の主キーに存在する値だけを登録できるようにするために、参照する側の表に設定する列です。問題の条件では、「成績」表に「学生」表にない学生番号や、「科目」表にない科目コードを登録できない必要があります。したがって、「成績」表の学生番号は「学生」表の学生番号を参照する外部キー、「成績」表の科目コードは「科目」表の科目コードを参照する外部キーとして設定するのが適切です。
Point
この問題は、参照整合性を満たすために、子表(成績)から親表(学生、科目)の主キーを参照する外部キー列を判断できるかを確認しています。
解くために必要な知識
この問題を解くには、主キー、外部キー、参照整合性制約の基本を理解している必要があります。
用語の整理
| 用語 | 意味 |
|---|---|
| 主キー | 表の各行を一意に識別する列(または列の組)です。原則として重複できません。 |
| 外部キー | 他の表の主キー(または一意な列)を参照する列です。参照先に存在する値だけを登録できるようにします。 |
| 参照整合性制約 | 外部キーの値が、参照先の表に存在する値でなければならないという制約です。 |
図表から分かる表の役割
“学生”表
- 学生番号(主キー)で学生を一意に識別します。
“科目”表
- 科目コード(主キー)で科目を一意に識別します。
“成績”表
-
学生番号と科目コードで、誰がどの科目を履修したかを表します。
-
成績は履修結果です。
外部キーにする列の決め方
条件から決める
-
未登録の学生を登録できない。
- “成績”表の学生番号は、“学生”表の学生番号を参照する外部キーにします。
-
未登録の科目を登録できない。
- “成績”表の科目コードは、“科目”表の科目コードを参照する外部キーにします。
名称列が外部キーに不向きな理由
-
学生名や科目名は、同じ値になる可能性があるため、一意に識別できない可能性があります。
-
外部キーは原則として主キーを参照します。
問題の解法手順
図表の読み取り
主キー(下線)を確認します
-
“学生”表:学生番号
-
“科目”表:科目コード
-
“成績”表:学生番号と科目コード(複合主キー)
解く手順
1. 問題文の制約から、参照関係を決めます
-
“学生”表に登録されていない学生は“成績”表に登録できない。
- よって、“成績”表の学生番号は、“学生”表の学生番号を参照する必要があります。
-
“科目”表に登録されていない科目は“成績”表に登録できない。
- よって、“成績”表の科目コードは、“科目”表の科目コードを参照する必要があります。
2. 外部キーにする列を決めます
-
外部キーは参照する側(子表)の列です。
-
よって、“成績”表の学生番号と科目コードを外部キーとして設定するのが適切です。
選択肢ごとの解説
- ア:不正解
“学生”表の学生番号は参照される側(親表)の主キーであり、外部キーは参照する側(子表)である“成績”表に設定します。
- イ:不正解
学生名や科目名は重複する可能性があるため、主キーを参照する外部キーとしては扱わないのが一般的です。
- ウ:正解
“成績”表の学生番号を“学生”表の学生番号に、“成績”表の科目コードを“科目”表の科目コードに、それぞれ外部キーとして設定します。これにより、未登録の学生や未登録の科目を“成績”表へ登録できません。
- エ:不正解
成績は履修結果の値であり、“学生”表や“科目”表の主キーを参照する列ではありません。外部キーにしても、未登録の学生や科目を登録できない条件を満たせません。
まとめ
外部キーは、他の表の主キーに存在する値だけを登録できるようにするために、参照する側の表に設定する列です。問題の条件では、「成績」表に「学生」表にない学生番号や、「科目」表にない科目コードを登録できない必要があります。したがって、「成績」表の学生番号は「学生」表の学生番号を参照する外部キー、「成績」表の科目コードは「科目」表の科目コードを参照する外部キーとして設定するのが適切です。
テクノロジ系 > 技術要素 > データベース
“学生”表の学生番号は参照される側(親表)の主キーであり、外部キーは参照する側(子表)である“成績”表に設定します。
学生名や科目名は重複する可能性があるため、主キーを参照する外部キーとしては扱わないのが一般的です。
“成績”表の学生番号を“学生”表の学生番号に、“成績”表の科目コードを“科目”表の科目コードに、それぞれ外部キーとして設定します。これにより、未登録の学生や未登録の科目を“成績”表へ登録できません。
成績は履修結果の値であり、“学生”表や“科目”表の主キーを参照する列ではありません。外部キーにしても、未登録の学生や科目を登録できない条件を満たせません。