データベーススペシャリスト試験 2019年 午前2 問08
第3正規形において存在する可能性のある関数従属はどれか。
ア:候補キーから繰返し属性への関数従属
イ:候補キーの真部分集合から他の候補キーの真部分集合への関数従属(正解)
ウ:候補キーの真部分集合から非キー属性への関数従属
エ:非キー属性から他の非キー属性への関数従属
解説
第3正規形において存在する可能性のある関数従属はどれか【午前2 解説】
要点まとめ
- 結論:第3正規形(3NF)では候補キーの真部分集合から他の候補キーの真部分集合への関数従属が存在する可能性があります。
- 根拠:3NFは非キー属性の部分関数従属や推移的関数従属を排除しますが、候補キー間の関数従属は許容されます。
- 差がつくポイント:候補キーの真部分集合から非キー属性や非キー属性間の関数従属は3NF違反となるため、これらを正確に区別できるかが重要です。
正解の理由
選択肢イ「候補キーの真部分集合から他の候補キーの真部分集合への関数従属」は第3正規形で許される関数従属です。
3NFは「非キー属性が候補キーの真部分集合に関数従属してはならない」「非キー属性間の関数従属を排除する」ことを条件としますが、候補キー同士の関数従属は正規形の制約対象外です。
したがって、候補キーの部分集合間の関数従属は存在し得ます。
3NFは「非キー属性が候補キーの真部分集合に関数従属してはならない」「非キー属性間の関数従属を排除する」ことを条件としますが、候補キー同士の関数従属は正規形の制約対象外です。
したがって、候補キーの部分集合間の関数従属は存在し得ます。
よくある誤解
非キー属性間の関数従属は3NFで禁止されるため、候補キーの部分集合から非キー属性への関数従属も禁止されると誤解されがちです。
しかし、3NFは候補キー同士の関数従属は許容します。
しかし、3NFは候補キー同士の関数従属は許容します。
解法ステップ
- 第3正規形の定義を確認する(非キー属性の部分関数従属と推移的関数従属の排除)。
- 各選択肢の関数従属の種類を「候補キー」「非キー属性」の観点で分類する。
- 候補キーの真部分集合から非キー属性への関数従属は3NF違反と判断する。
- 非キー属性から他の非キー属性への関数従属も3NF違反と判断する。
- 候補キーの真部分集合から他の候補キーの真部分集合への関数従属は3NFで許容されるため正解とする。
選択肢別の誤答解説ステップ
- ア: 候補キーから繰返し属性への関数従属
→繰返し属性は多値属性であり、正規化の観点で第1正規形違反の可能性があるため3NFの議論対象外。 - イ: 候補キーの真部分集合から他の候補キーの真部分集合への関数従属
→3NFで許容される関数従属で正解。 - ウ: 候補キーの真部分集合から非キー属性への関数従属
→非キー属性が候補キーの部分集合に依存するのは部分関数従属であり、3NF違反。 - エ: 非キー属性から他の非キー属性への関数従属
→推移的関数従属に該当し、3NF違反。
補足コラム
第3正規形は「すべての非キー属性が候補キーに対して完全関数従属し、かつ非キー属性間の関数従属がない」状態を指します。
候補キー同士の関数従属は、候補キーの選択や設計方針によっては存在し得るため、3NFの制約対象外です。
より厳密な正規形であるボイス・コッド正規形(BCNF)では、候補キー以外からの関数従属はすべて排除されます。
候補キー同士の関数従属は、候補キーの選択や設計方針によっては存在し得るため、3NFの制約対象外です。
より厳密な正規形であるボイス・コッド正規形(BCNF)では、候補キー以外からの関数従属はすべて排除されます。
FAQ
Q: 第3正規形とボイス・コッド正規形の違いは何ですか?
A: 3NFは非キー属性の部分関数従属と推移的関数従属を排除しますが、BCNFはすべての関数従属の左辺が候補キーであることを要求します。
A: 3NFは非キー属性の部分関数従属と推移的関数従属を排除しますが、BCNFはすべての関数従属の左辺が候補キーであることを要求します。
Q: 候補キーの真部分集合から非キー属性への関数従属はなぜ3NF違反ですか?
A: それは部分関数従属に該当し、非キー属性が候補キーの一部にのみ依存しているため、データの冗長性や更新異常を引き起こします。
A: それは部分関数従属に該当し、非キー属性が候補キーの一部にのみ依存しているため、データの冗長性や更新異常を引き起こします。
Q: 繰返し属性はどの正規形で扱うべきですか?
A: 繰返し属性は第1正規形(1NF)で排除すべき多値属性の一種であり、3NFの前段階で対応します。
A: 繰返し属性は第1正規形(1NF)で排除すべき多値属性の一種であり、3NFの前段階で対応します。
関連キーワード: 第3正規形, 関数従属, 候補キー, 部分関数従属, 推移的関数従属, 正規化