第六章 关系数据理论
问题的提出
- 数据冗余
- 更新异常
- 插入异常
- 删除异常
函数依赖
- 平凡函数依赖/非平凡函数依赖
- 部分函数依赖/完全函数依赖
例如:
学号 F→ 姓名
(学号,课名) F→ 分数
(注:因为同一个的学号对应的分数不确定,同一个课名对应的分数也不确定)
-
传递函数依赖
-
多值依赖
设R(U)是一个属性集合U上的一个关系模式,X, Y
和Z是U的子集,并且Z=U-X-Y,多值依赖X->->Y成立当且仅当对R的任一个关系r
r在(X,Z)上的每个值对应一组Y的值,这组值仅仅决定于X值而与Z值无关。
2NF
- 每一个非主属性完全函数依赖于任何一个候选码
- 属于1NF
不属于2NF的问题
- 插入异常
- 删除异常
- 修改复杂
3NF
- 属于2NF
- 每个属性不传递函数依赖于码
BCNF
- 所有非主属性对每一个码都是完全函数依赖
- 所有主属性对每个不包含它的码也是完全函数依赖
- 没用任何属性完全函数依赖于码的任何一组属性
- 换而言之,对于函数依赖的左部必须包含所有候选码
4NF
不允许有非平凡且函数依赖的多值依赖
graph TB
1NF--消除非主属性对码的部分函数依赖-->2NF
2NF--消除非主属性对码的传递函数依赖-->3NF
3NF--消除主属性对码的部分和传递函数依赖-->BCNF
BCNF--消除平凡且非函数依赖的多值依赖-->4NF
Armstrong公理
- 合并规则:
X -> Y, X -> Z, 有 X->YZ
- 伪传递规则
X -> Y, WY -> Z, 有 XW->Z
- 分解规则
X -> Y, Z 属于 Y, 有 X->Z