# 五、理论范式
# 1. 函数依赖
# 1.1 函数依赖的概念
# [1] 决定关系
其实就是 Y = f(X),X 决定 Y,Y 依赖于 X。
# [2] 非平凡的函数依赖
X -> Y,但是 Y ⊊ X
# [3] 平凡的函数依赖
X -> Y,但是 Y ⊆ X
# [4] 完全函数依赖(X-^F^>Y)
R(U)是属性集U上的关系模式,X, Y, Z 是 U 的不同子集,非空且不互相包含。
X -> Y,且任意 X 的真子集 X`,都有 X` ⧷> Y ,也就是 X 中没有滥竽充数的,每个都得要。
# [5] 部分函数依赖(X-^P^>Y)
就是不完全函数依赖。
# [6] 传递依赖(X-^t^>Z)
若有 X->Y( Y ⊊ X),Y⧷>X,Y->Z,则必有 X->Z,则称 Z 传递依赖于 X。
# △[例题]
- 左部位单属性的函数依赖一定是完全函数依赖。
- sno -> sname
- sno -> class
- tno -> tname
- 左部有多个,那就看起真子集能否决定右部属性。
- (sno,cno) -> grade:
- sno ⧷> grade
- cno ⧷> grade
- 完全函数依赖
- (sno,cno) -> sname:
- sno -> sname
- cno ⧷> sname
- 部分函数依赖
- cno -> tname
- cno -> tno, tno⧷> cno
- tno -> tname
- 传递函数依赖
- (sno,cno) -> grade:
# 1.2 候选键
# [1] 定义
唯一标识实体,且不包含多余属性的属性集。
# [2] 相关概念
主键
主属性
包含在任何一个候选键中的属性。
非主属性
不包含在任何一个候选键中的属性。
# 2. 关系模型的规范化
# 第 1 范式(1NF)
# [1] 特点
- 不重复
- 原子性
# [2] 问题
数据冗余
插入异常
删除异常
修改异常
# 第 2 范式(2NF)
# [1] 特点
任意一个非主属性都完全依赖于 R 的任一候选键。
# [2] 问题
减少了数据冗余
插入异常
删除异常
修改异常
一个地方修改,可能需要修改很多个表。
# 第 3 范式(3NF)
# [1] 特点
消除了非主属性对候选码的传递函数依赖。
# [2] 问题
- 减少了数据冗余
- 减少了前面的删除异常
- 减少了前面的插入异常
- 减少了前面的修改异常
- 不彻底性。
# BC 范式(BCNF)
[1] 特点
R 中的每一个非平凡函数依赖的决定因素都包含一个候选键(只有依赖于候选键的函数依赖)。
- 消除部分依赖
- 消除传递依赖
BCNF 必定是 3NF
# 第 4 范式(4NF)
# 多值依赖(一对多)
[1] 特点
如果存在元组(x,y~1~,z~1~)和(x,y~2~,z~2~),一定存在元组(x,y~2~,z~1~)和元组(x,y~1~,z~2~)。
U=X+Y+Z,X →→ Y 表示 X 多值决定 Y
- X 的一个值可以确定 Y 的多个值(这个关系决定于 Z 的取值无关,也就是说当 X 值确定后,无论 Z 取何值,得到的 Y 总是固定的。
- 对称性:
- 若 X →→ Y,则 X →→ Z
- 合并性:
- 若 X →→ Y,且 X →→ Z,则 X →→ YZ
- 相交性:
- 若 X →→ Y,且 X →→ Z,则 X →→ (Y∩Z)
- 传递性:
- 若X →→ Y,且 Y →→ Z,则 X →→ (Y-Z),X →→(Z-Y)
# 第 4 范式(4NF)
[1] 特点
设 R(U)是一个关系模式,D 是 R 上的多值依赖集合。如果 D 中每个非平凡多值依赖 X→→Y,X 都包含 R 的候选键,则 R∈4NF。
- 4NF 必定是 BCNF
← 四、语法 六、MySQL 存储引擎 →