DATABASE SYSTEM CONCEPTS-Chapter8 Relational Database Design
分解
如果分解后无法重建原始信息,那么就是有损分解(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^{+}$