跳到主要内容

BCNF

BCNF 要求什么?​

  • 要求: 对 R 中的任意非平凡函数依赖 A1A2⋯An→B1B2⋯BmA_1A_2\cdots A_n \rightarrow B_1B_2\cdots B_m, 属性组 AA 必须是 R 的超键;
  • 一句话: 任何非平凡函数依赖的左边都必须是超键;
  • 定位: BCNF 是修正后更严格的 3NF;

BCNF 比第三范式严格在哪?​

范式对非平凡依赖 A→BA \rightarrow B 的要求
3NFAA 是超键, 或 BB 是某个键的子集
BCNFAA 必须是超键, 没有例外
  • 差异来源: 当 AA 不是超键但 BB 属于某个键时, 3NF 放行, BCNF 拒绝;

BCNF 分解的代价是什么?​

  • 收益: 消除函数依赖带来的冗余;
  • 代价: 分解后可能不再保持原有的函数依赖;
  • 权衡: 与 3NF 的对比见 范式概览;

(source: 020-关系数据库设计理论.md §函数范式/§BCNF)