平成29年春期試験問題 問69

ある会社の社員の情報処理技術者試験の受験状況の一部を次に示す。この表を関係データベースで管理するために,二つの表に分割する方法として,適切なものはどれか。ここで,この会社には同姓同名の社員がいるものとする。
69.png

  • 69a.png
  • 69i.png
  • 69u.png
  • 69e.png
正解 問題へ
分野:テクノロジ系
中分類:データベース
小分類:データベース設計
解説
関係データベースにおいて、表の分解などによってデータベースの整合性および保守性を高める作業を正規化といいます。

正規化は、表を分割した際に情報が損失してしまうことを防止するために、以下の定められた手順に沿って行います。(第3正規化より後もありますが割愛します)
第1正規化
繰り返し項目や集合値をもつ属性を排除し、全ての属性が単一値から成るようにする。
第2正規化
主キーの一部に関数従属※2する属性を別表に分離する。
第3正規化
非キー属性に関数従属する属性を別表に分離する。
まず、この表の主キーについて考えます。主キーとは、表内の1つの行を特定可能な属性又は属性の組合せです。このケースでは、1人の社員が同じ日に複数の試験を受験することはありませんから、{社員ID,試験日}が主キー※1になります。
第2正規化では、主キーの一部に関数従属する属性を別表に移します。"試験日"に関数従属する属性は存在しませんが、"社員ID"は社員ごとに固有の番号なので、"社員ID"が決まれば"社員名"と"生年月日"も決まります。つまり社員ID→{社員名,生年月日}の関係が第2正規化における分割対象となります。したがって設問の表は次のように分解されます。
69_1.png
表の分解では、分離した表の主キー属性を元表に残して表同士を関連付けるので、"社員ID"は両方の表に存在することになります。

以上より適切な分割になっているのは「ア」です。

※1実際には随時開催されているITパスポートと別の試験を同日に受験するケースもあり得るので、{社員ID,試験種別,試験日}とした方が良いかもしれません。
※2関数従属とは、ある属性の値が決定したとき他の属性の値が一意に決定される関係のことです。

Pagetop