ある会社の社員の情報処理技術者試験の受験状況の一部を次に示す。
この表を関係データベースで管理するために,二つの表に分割する方法として,適切なものはどれか。
ここで,この会社には同姓同名の社員がいるものとする。
元の表は社員ID,社員名,生年月日,試験種別,試験日,合否の列をもつ(例:0001 佐藤 花子 1985/4/29 ITパスポート 2013/4/21 合 など)。
選択肢1〜4(図のア〜エ)は,それぞれ二つの表への列の分割の仕方を示している。
正答1
解説
正解は1です。
図の元の表には、社員ID、社員名、生年月日、試験種別、試験日、合否の列があります。
同じ社員(例:0001の佐藤花子)が複数回受験しているので、社員の情報が行ごとに重複しています。
社員の情報と受験の情報を分け、両者を社員IDで結び付けられるようにするのが適切な分割です。
同姓同名の社員がいるので、社員名では社員を一意に特定できない点も判断のポイントです。
【選択肢別解説】
1:○ 社員の表を[社員ID、社員名、生年月日]、受験の表を[社員ID、試験種別、試験日、合否]に分けています。
社員の情報の重複がなくなり、社員IDで二つの表を結び付ければ、元の表を正しく復元できます。
2:× 受験の表に社員IDがなく、社員名で社員の表と結び付ける形です。
同姓同名の社員がいるので、受験結果がどの社員のものかを特定できません。
3:× 試験日が社員の表に入っています。
同じ社員の行が受験回数だけでき、社員の情報の重複が残ります。
また試験日と試験種別が別の表にあるため、どの試験をいつ受けたかの対応が分からなくなります。
4:× 試験日が社員ID・生年月日と同じ表にあり、試験種別・合否とは別の表に分かれています。
複数回受験した社員について、どの試験がいつ行われたかを対応付けられません。
【ポイント】
関係データベースの正規化では、繰り返し現れる情報を別の表に分け、主キーと外部キーで結び付けます。
結び付けに使う列は、値が一意に決まる社員IDのような列でなければなりません。