“従業員”表を第3正規形にしたものはどれか。
ここで,下線部は主キーを表す。
従業員(従業員番号,従業員氏名,{技能コード,技能名,技能経験年数})
({ }は繰返しを表す)
正答3
解説
正解は3です。
繰返し項目を含む“従業員”表を、第3正規形まで正規化した結果を選ぶ問題です。
関数従属は、従業員番号で従業員氏名が決まり、技能コードで技能名が決まり、従業員番号と技能コードの組で技能経験年数が決まります。
【選択肢別解説】
1:× 技能経験年数は、従業員と技能の組合せで決まる値です。
技能コードだけを主キーとする表に置くと、従業員ごとの経験年数を表せません。
また、どの従業員がどの技能を持つかの対応も失われます。
2:× 主キーが従業員番号と技能コードの組なのに、従業員氏名は従業員番号だけで決まります。
主キーの一部に従属する部分関数従属が残っており、第2正規形を満たしません。
3:○ (従業員番号、技能コード、技能経験年数)、(従業員番号、従業員氏名)、(技能コード、技能名)の3表は、各属性が主キー全体だけに従属しています。
部分関数従属も推移的関数従属もないので、第3正規形として正しいです。
4:× 技能経験年数を従業員番号だけを主キーとする表に置いています。
1人の従業員が複数の技能を持つと経験年数を一つに決められず、関数従属が成り立ちません。
【ポイント】
第1正規形で繰返しを除き、第2正規形で部分関数従属を除き、第3正規形で推移的関数従属を除きます。
「その属性は何が決まれば一つに決まるか」を考え、決める側を主キーにした表に置くのが基本です。