本文へスキップ

平成25年度 春期 ITパスポート試験 問55

この問題の解説と、これまでの解答の記録です。

問55
頻出度★★★

関係データベースを使い“社員”表と“部署”表を作成して社員情報を管理する。“社員”表と“部署”表に,必要に応じて設定する主キーと外部キーの適切な組合せはどれか。ここで,社員は必ず“部署”表に存在する部署に所属するものとし,社員データの追加や更新をするときには,参照制約を利用して整合性を確保するものとする。 社員

社員コード社員名入社年生年月日部署コード

部署

部署コード部署名
出典 平成25年度 春期 ITパスポート試験 問55
解説

問 55

  • 不正解ア

    主キーの設定は正しいものの、外部キーを「なし」としています。外部キーが無いと参照制約が働かないため、「部署」表に存在しない部署コードを社員データに入力しても DBMS が防げません。設問が求める「参照制約を利用して整合性を確保する」という条件を満たせないので誤りです。

  • イ

    正解 主キーは「表の各行を一意に識別する列」なので、社員1人1行の「社員」表では社員コード、部署1つ1行の「部署」表では部署コードがそれぞれ主キーになります。次に「社員」表の部署コード列は、その社員が所属する部署を表す値であり、「部署」表の主キー (部署コード) の値を指し示しています。このように他の表の主キーを参照する列が外部キーです。外部キーを設定すると参照制約 (参照整合性制約) が働き、「部署」表に存在しない部署コードを社員データに登録・更新しようとすると DBMS が拒否するため、設問の「社員は必ず『部署』表に存在する部署に所属する」という条件を自動的に守れます。したがって、主キーは「社員」表の社員コードと「部署」表の部署コード、外部キーは「社員」表の部署コード、というイが正解です。

  • 不正解ウ

    「社員」表に主キーが設定されていないため、社員コードが重複した行を登録でき、社員を一意に識別できません。また社員コードは他の表の主キーを参照する列ではないので、外部キーには該当しません。外部キーになり得るのは「社員」表の部署コードだけです。

  • 不正解エ

    「社員」表の部署コードを主キーにすると値の重複が許されなくなり、同じ部署に複数の社員が所属できなくなってしまいます。また「部署」表の部署コードは参照される側の主キーであって外部キーではなく、社員コードも他表を参照しないため外部キーになりません。主キーと外部キーの役割が入れ替わった組合せで、参照の向きも逆です。

ここがポイント
  • 主キーは表の行を一意に識別する列で、重複と空値 (NULL) が許されない。社員1人を識別するのは社員コード、部署1つを識別するのは部署コード。
  • 外部キーは他の表の主キーを参照する列で、1対多の「多」側 (ここでは社員) に置く。外部キーに設定することで参照制約が働き、参照先に存在しない値の追加・更新を DBMS が拒否して整合性を保つ。
用語

解答の記録