ITパスポート 2018年 秋期 問85
問題文
関係データベースで管理している“担当社員”表、“地区”表及び“顧客”表を結合して、A表を得た。結合に用いた“顧客”表はどれか。ここで、下線のうち実線は主キーを、破線は外部キーを表す。


選択肢
ア:
イ:
ウ:
エ:(正解)
🔒 解説は解答すると表示されます
関係データベースの結合(担当社員・地区・顧客)【ITパスポート 解説】
正解の理由
A表にある「社員名」と「地区名」は、それぞれ「担当社員」表と「地区」表から取り出された列です。A表の残り(顧客コード、顧客名、代表者名)は顧客表が持っている情報と考えられます。したがって、顧客表には「担当社員」表と「地区」表と結合(JOIN)できるための外部キー(担当社員を示す社員コード、地区を示す地区コード)が含まれていなければなりません。
選択肢のうち、顧客表に主キー(顧客コード、実線)と代表者名・顧客名を持ち、さらに社員コードと地区コードが破線(外部キー)で示されているのは エ だけです。よって エ が正解です。
(用語補足)主キー(Primary Key:表の各行を一意に識別する項目)、外部キー(Foreign Key:別の表の主キーを参照する項目)、結合(JOIN:複数の表をつなげて一つの表のように扱う操作)
解法ステップ
- A表の列を確認:顧客コード(主キー)、顧客名、社員名、地区名、代表者名。
- 各列の出所を推測:
- 社員名 → 「担当社員」表
- 地区名 → 「地区」表
- 顧客コード・顧客名・代表者名 → 顧客表
- 「担当社員」表と「地区」表の情報をA表に取り込むには、顧客表にそれぞれの表を参照する外部キー(社員コード、地区コード)が必要。
- 選択肢を見て、顧客表に両方の外部キー(破線で示されるもの)があるものを選ぶ。該当するのは エ だけ。
選択肢別の誤答解説
- ア:顧客コード(主キー)、顧客名、代表者名のみ。社員名・地区名を取得するための外部キーがないため、担当社員表・地区表と結合できない。A表の「社員名」「地区名」を作れない。
- イ:社員コードが破線(外部キー)であるため担当社員表とは結合可能。ただし地区コードの外部キーがないため地区表とは結合できない。A表にある「地区名」を得られない。
- ウ:地区コードが破線(外部キー)であるため地区表とは結合可能。ただし社員コードの外部キーがないため担当社員表とは結合できない。A表にある「社員名」を得られない。
- エ:顧客コード(主キー)と顧客名・代表者名を持ち、社員コードと地区コードが外部キー(破線)になっている。担当社員表・地区表両方と結合でき、A表の全列を再現できるため正しい。
よくある誤解
- 「A表に社員名や地区名がある=顧客表にその名前もある」と考える誤解。実際は名前は別のテーブルにあり、顧客表は名前ではなく参照用のキー(社員コードや地区コード)を持つことが多いです。
- 線の見方を誤る(実線=主キー、破線=外部キーを逆に読む)。図の線種はキーの役割を示すため、必ず確認すること。
補足コラム
関係データベース設計では「正規化」と呼ばれるルールで、重複する情報を別の表に分けます。例えば社員の名前を顧客表に何度も書くと修正漏れが発生します。そこで社員は「担当社員」表で一度だけ管理し、顧客表は社員コード(外部キー)で参照します。これが今回の問題の背景にある考え方です。
FAQ
Q. 顧客表に社員名・地区名を直接入れてはいけないのですか?
A. 技術的には可能ですが、データの重複や整合性の問題が起きやすくなるため、一般的には外部キーで参照する方法(正規化)が推奨されます。
A. 技術的には可能ですが、データの重複や整合性の問題が起きやすくなるため、一般的には外部キーで参照する方法(正規化)が推奨されます。
Q. 実線・破線が無くても判断できますか?
A. 線が無いと難しいですが、A表に社員名・地区名があるなら、その情報の出所(別の表)があるはずと考え、参照キーが必要と推理できます。図の記号は重要な手がかりです。
A. 線が無いと難しいですが、A表に社員名・地区名があるなら、その情報の出所(別の表)があるはずと考え、参照キーが必要と推理できます。図の記号は重要な手がかりです。
Q. JOIN の種類(内部結合・外部結合)は関係ありますか?
A. 今回は「どの顧客表が結合に使われたか」を問う問題で、結合の種類までは指定がありません。必要な外部キーがあるかが判断基準です。
A. 今回は「どの顧客表が結合に使われたか」を問う問題で、結合の種類までは指定がありません。必要な外部キーがあるかが判断基準です。
関連キーワード: リレーショナルデータベース, 主キー, 外部キー, テーブル結合, 正規化, JOIN, テーブル設計

\ せっかくなら /
ITパスポートを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

