“従業員”表を第3正規形にしたものはどれか。
ここで,下線部は主キーを表す。
従業員(従業員番号,従業員氏名,{技能コード,技能名,技能経験年数})
({ }は繰返しを表す)
正答3
解説
正解は3です。
繰返し項目をもつ表を第3正規形まで正規化した結果を選ぶ問題です。
元の表では、1人の従業員に対して技能コード・技能名・技能経験年数の組が繰り返されています。
各項目の関数従属は次のとおりです。
従業員氏名は従業員番号だけで決まります。
技能名は技能コードだけで決まります。
技能経験年数は、従業員番号と技能コードの組で決まります。
したがって、この3つの従属関係ごとに表を分けたものが第3正規形です。
【選択肢別解説】
1:× 図のアは、従業員番号を主キーとする表と、技能コードを主キーとし技能名と技能経験年数をもつ表に分けています。
技能経験年数は従業員ごとに異なるので、技能コードだけでは決まりません。
また、どの従業員がどの技能をもつかという対応も失われます。
2:× 図のイは、従業員番号と技能コードを主キーとする表に従業員氏名を含めています。
従業員氏名は主キーの一部である従業員番号だけで決まる部分関数従属です。
部分関数従属が残るので、第2正規形にもなっていません。
3:○ 図のウは、従業員番号と技能コードを主キーとして技能経験年数をもつ表を作っています。
さらに、従業員番号と従業員氏名の表、技能コードと技能名の表に分けています。
部分関数従属も推移的関数従属もないので、第3正規形です。
4:× 図のエは、技能経験年数を従業員番号だけを主キーとする表に置いています。
1人の従業員は複数の技能をもつので、技能ごとの経験年数を記録できません。
【ポイント】
第1正規形は繰返しの排除、第2正規形は部分関数従属の排除、第3正規形は推移的関数従属の排除です。
「その項目は何によって一意に決まるか」を一つずつ確認すると、表の分け方が決まります。