⏱ 6分 ★★★☆☆ 頻出:中

ボイスコッド正規形

3NFとBCNFの違い。複数候補キーの特殊ケースを理解する

BCNF=「すべての関数従属の決定項が候補キーであること」

ボイスコッド正規形(BCNF)は3NFを強化したもので、「X→Y が成立するとき、Xは必ず候補キーでなければならない」という条件です。

3NFはほぼBCNFと同じですが、候補キーが複数ある特殊なケースでのみ3NFを満たしてもBCNF違反になることがあります。

3NF満たすがBCNF違反の例

授業スケジュールテーブル
学生ID🔑科目名🔑教員名
S001データベース山田教授
S001アルゴリズム田中教授
S002データベース山田教授
制約:各科目は1人の教員のみが担当(科目→教員)
各教員は1科目のみ担当(教員→科目)

候補キー①:(学生ID, 科目名) 候補キー②:(学生ID, 教員名)

BCNF違反:科目名 → 教員名 が成立するが、「科目名」は候補キーではない

3NFとBCNFの違い

条件3NFBCNF
X→Y で X が非キーでも許容する条件Y が候補キーの一部なら許容許容しない(すべてNGに)
無損失分解が常に可能可能不可能な場合がある
関数従属性の保存保証される保証されない場合がある
試験出題頻度★★★★★★★★☆☆
試験では「3NFを満たすがBCNFを満たさない例を示せ」という問題が出ることがある。複数の候補キーが存在し、候補キー以外が候補キーの属性を決定するケースがポイント。
BCNFは「常に適用すべき」ではない。BCNFへの変換で関数従属性が失われる場合は3NFで止める判断も設計上正しい。
🧠 確認クイズ
Q1. BCNFの条件として正しいのはどれか?
Q2. 3NFを満たしてもBCNF違反になる条件として正しいのはどれか?
Q3. BCNFへの変換で起きる可能性がある問題はどれか?