分解

如果分解后无法重建原始信息,那么就是有损分解(Lossy Decomposition),反之则为无损分解(Lossless-Join Decomposition)

好的分解要做到无损分解和依赖保存

BCNF 分解可以保证无损,3NF 可以保证依赖保存,但是 3NF 无法保证没有冗余,因此需要在 BCNF 和 3NF 间权衡

第一范式

  • 如果一个域的元素都是不可分的单位,这个域是原子的
  • 一个关系模式R的所有属性的域都是原子的,这个关系模式属于第一范式(First Normal Form, 1NF)
  • 原子性实际上是与域的元素如何使用相关的属性,就是说我们怎么看待这个属性

第二范式

  • 函数依赖是对合法关系集合的约束条件
  • 要求某个属性集合的值唯一确定另一个属性集合的值
  • 定义为:$A\rightarrow B$
    • $A$是模式$(A,B)$的超码
    • 属性$A$的取值决定$B$的取值
  • 平凡函数依赖:$A\subseteq B$
  • 完全函数依赖:$A$的任意真子集都推不出$B$
  • 部分函数依赖:$A$的任意一个真子集可以推出$B$
  • 非主码都完全函数依赖于主码的,这个关系模式属于第二范式(Second Normal Form, 2NF)

第三范式

  • 闭包
    • $F^{+}$表示所有能从函数依赖$F$中推出的函数依赖闭包
    • 如果两个函数依赖集的闭包相等,那么我们就说这两个函数依赖集是等价的
    • 性质
      • 自反性
      • 扩充性
      • 传递性
    • 附加规则
      • 并集规则
      • 分解规则
      • 伪传递规则
  • $A\rightarrow B~and~B\rightarrow C\Rightarrow A\rightarrow C$ 成为传递依赖
  • 没有传递依赖的第二范式,这个关系模式属于第三范式(Third Normal Form, 3NF)

BCNF范式

  • 要验证一个属性$x$对于给定的$Ax\rightarrow B$是否冗余,如果$A\rightarrow B$成立,$x$就是冗余的
  • 关系模式 $R$ 在 BCNF(Boyce-Codd 范式)中,如果对于$R$中的存在的所有函数依赖关系$F$,形式为$A\rightarrow B$,其中$A\subseteq R$且$B\subseteq R$,至少满足以下条件之一
    • $A\subseteq B$
    • $A$是$R$的超键
  • 检查BCNF
    • 计算函数依赖的闭包$A^{+}$
    • 验证是否满足$R\subseteq A^{+}$

总结

🧡 范式之间的关系:
第一范式(1NF)
非码的非平凡
↓ 消除非主属性对码的部分函数依赖
第二范式(2NF)
↓ 消除非主属性对码的传递函数依赖
第三范式(3NF)
↓ 消除主属性对码的部分和传递函数依赖
BC 范式(BCNF)
↓ 消除非平凡且非函数依赖的多值依赖
第四范式(4NF)
↓ 消除不是由候选码所蕴含的连接依赖
第五范式(5NF)