📌 結論から理解する
BCNF=「すべての関数従属の決定項が候補キーであること」
ボイスコッド正規形(BCNF)は3NFを強化したもので、「X→Y が成立するとき、Xは必ず候補キーでなければならない」という条件です。
3NFはほぼBCNFと同じですが、候補キーが複数ある特殊なケースでのみ3NFを満たしてもBCNF違反になることがあります。
3NF満たすがBCNF違反の例
授業スケジュールテーブル
| 学生ID🔑 | 科目名🔑 | 教員名 |
|---|---|---|
| S001 | データベース | 山田教授 |
| S001 | アルゴリズム | 田中教授 |
| S002 | データベース | 山田教授 |
制約:各科目は1人の教員のみが担当(科目→教員)
各教員は1科目のみ担当(教員→科目)
候補キー①:(学生ID, 科目名) 候補キー②:(学生ID, 教員名)
BCNF違反:科目名 → 教員名 が成立するが、「科目名」は候補キーではない
各教員は1科目のみ担当(教員→科目)
候補キー①:(学生ID, 科目名) 候補キー②:(学生ID, 教員名)
BCNF違反:科目名 → 教員名 が成立するが、「科目名」は候補キーではない
3NFとBCNFの違い
| 条件 | 3NF | BCNF |
|---|---|---|
| X→Y で X が非キーでも許容する条件 | Y が候補キーの一部なら許容 | 許容しない(すべてNGに) |
| 無損失分解が常に可能 | 可能 | 不可能な場合がある |
| 関数従属性の保存 | 保証される | 保証されない場合がある |
| 試験出題頻度 | ★★★★★ | ★★★☆☆ |
試験では「3NFを満たすがBCNFを満たさない例を示せ」という問題が出ることがある。複数の候補キーが存在し、候補キー以外が候補キーの属性を決定するケースがポイント。
BCNFは「常に適用すべき」ではない。BCNFへの変換で関数従属性が失われる場合は3NFで止める判断も設計上正しい。
🧠 確認クイズ
Q1. BCNFの条件として正しいのはどれか?
Q2. 3NFを満たしてもBCNF違反になる条件として正しいのはどれか?
Q3. BCNFへの変換で起きる可能性がある問題はどれか?