同步发布:Hedon丨MySQL丨理论丨(五)理论范式 (排版更佳!)
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,y1,z1)和(x,y2,z2),一定存在元组(x,y2,z1)和元组(x,y1,z2)。
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