# 规范化

# 1NF(第一范式)

定义:若关系模式 RR 的每一个分量是不可再分的数据项,则关系模式 RR 属于第一范式。记为 R1NFR∈1NF

例:学生 (学号,姓名,学院编号,学院名称,课程号,成绩)

F = {学号 → 姓名,学号 → 学院编号,学院编号 → 学院名称,(学号,课程号) → 成绩}

存在的问题:

  1. 数据冗余。
  2. 更新异常 (修改操作后数据不一致)。
  3. 插入异常。
  4. 删除异常。
学号 姓名 学院编号 学院名称 课程号 成绩
1001 王芳 D20 经济学院 C001 76
1001 王芳 D20 经济学院 C002 85
1001 王芳 D20 经济学院 C003 63
1002 李明 D12 计算机学院 C001 92
1002 李明 D12 计算机学院 C002 89
1003 赵晗 D12 计算机学院 C002 78
1003 赵晗 D12 计算机学院 C003 86
1004 刘晓 D25 管理学院 C002 90

# 2NF(第二范式)

定义:若关系模式 R1NFR\in 1NF,且每一个非主属性完全依赖于码,则关系模式 R2NFR\in 2NF

换句话说:当 1NF1NF 消除了非主属性对码的部分函数依赖,则称为 2NF2NF

例:学生 (学号,姓名,学院编号,学院名称,课程号,成绩)

F ={学号 → 姓名,学号 → 学院编号,学院编号 → 学院名称,(学号,课程号) → 成绩}

将学生关系分解为:

学生 1 (学号,姓名,学院编号,学院名称) 2NF∈2NF

学号 姓名 学院编号 学院名称
1001 王芳 D20 经济学院
1002 李明 D12 计算机学院
1003 赵晗 D12 计算机学院
1004 刘晓 D25 管理学院

学生 2 (学号,课程号,成绩) 2NF∈2NF

学号 课程号 成绩
1001 C001 76
1001 C002 85
1001 C003 63
1002 C001 92
1002 C002 89
1003 C002 78
1003 C003 86
1004 C002 90

# 3NF(第三范式)

定义:若关系模式 R(U,F)R(U,F) 中不存在这样的码 XX ,属性组 YY 及非主属性 Z(ZY)Z(Z⊈Y) 使得 XY,(YX),YZX→Y,(Y⇸X),Y→Z 成立,则关系模式 R3NFR∈3NF

即:当 2NF2NF 消除了非主属性对码的传递函数依赖,则称为 3NF3NF

例:学生 1 (学号,姓名,学院编号,学院名称)2NF∈2NF,但 3NF∉3NF

将学生 1 分解为:

学生 11 (学号,姓名,学院编号)3NF\in 3NF

学号 姓名 学院编号
1001 王芳 D20
1002 李明 D12
1003 赵晗 D12
1004 刘晓 D25

学生 12 (学院编号,学院名称)3NF\in 3NF

学院编号 学院名称
D20 经济学院
D12 计算机学院
D25 管理学院

# BCNF(巴克斯范式)

定义:关系模式 R1NFR∈1NF,若 XYX→YYXY⊈X 时,XX 必含有码,则关系模式 RBCNFR∈BCNF

也就是说,当 3NF3NF 消除了主属性对码的部分函数依赖和传递函数依赖,则称为 BCNFBCNF

结论:一个满足 BCNFBCNF 的关系模式,应有如下性质:

  1. 所有非主属性对每一个码都是完全函数依赖;

  2. 所有主属性对每一个不包含它的码,也是完全函数依赖;

  3. 没有任何属性完全函数依赖于非码的任何一组属性。

例:R(Pno,Pname,Mname)\text{R(Pno,Pname,Mname)} 的属性表示零件号、零件名和厂商名,如果约定,每种零件号只有一个零 件名,但不同的零件号可以有相同的零件名;每种零件可以有多个厂商生产,但每家厂商生产的零 件应有不同的零件名。函数依赖集如下:

(Pname,Mname)→Pno, Pno→Pname\text{(Pname,Mname)→Pno, Pno→Pname} 候选码为 (Pname,Mname)\text{(Pname,Mname)}(Pno,Mname)\text{(Pno,Mname)}

分解为:R1(Pno,Pname)BCNF\text{R1(Pno,Pname)}∈BCNF

R2(Pno,Mname)BCNF\text{R2(Pno,Mname)}∈BCNF

# 4NF(第四范式)

定义:关系模式 R1NFR∈1NF,若对于 RR 的每个非平凡多值依赖 XYX→→YYXY⊈X 时,XX 必含有码,则关系模式 R(U,F)4NFR(U,F)∈4NF

4NF4NF 是限制关系模式的属性间不允许有非平凡且非函数依赖的多值依赖。

注意:如果只考虑函数依赖,关系模式最高的规范化程度是 BCNFBCNF,如果考虑多值依赖,关系模式最高的规范化程度是 4NF4NF

例:学生 (学号,选修课程,兴趣爱好)

学生 1 (学号,选修课程)4NF∈4NF

学生 2 (学号,兴趣爱好)4NF∈4NF

书目 (ISBN\text{ISBN},书名,作者,排名,出版社)

学号 选修课程 兴趣爱好

书目 1 (ISBN\text{ISBN},作者,排名)4NF∈4NF

书目 2 (ISBN\text{ISBN},书名,出版社)BCNF∈BCNF

# 总结

1NF2NF3NFBCNF4NF5NF1NF⊃2NF⊃3NF⊃BCNF⊃4NF⊃5NF

通过分解,可以将一个低一级范式的关系模式转换成若干个高一级范式的关系模式,这种过程叫做规范化

# Armstrong 公理系统

Armstrong 公理系统(函数依赖的公理系统):设关系模式 R(U,F)R(U,F),其中 UU 为属性集,FFUU 上的一 组函数依赖,那么有如下推理规则:

  1. A1A1 自反律:若 YXUY⊆X⊆U,则 XYX→YFF 所蕴涵。
  2. A2A2 增广律:若 XYX→YFF 所蕴涵,且 ZUZ⊆U,则 XZYZXZ→YZFF 所蕴涵。
  3. A3A3 传递律:若 XY,YZX→Y,Y→ZFF 所蕴涵,则 XZX→ZFF 所蕴涵。

根据上述三条推理规则又可推出下述三条推理规则:

  1. 合并规则:若 XY,XZX→Y,X→Z,则 XYZX→YZFF 所蕴涵。
  2. 伪传递律:若 XY,WYZX→Y,WY→Z,则 XWZXW→ZFF 所蕴涵。
  3. 分解规则:若 XY,ZYX→Y,Z⊆Y,则 XZX→ZFF 所蕴涵。

# 函数依赖的闭包 F+F^+ 及属性的闭包 XF+X_F^ +

# 函数依赖的闭包 F+F^+

定义:关系模式 R(U,F)R(U,F) 中为 FF 所逻辑蕴含的函数依赖的全体称为 F 的闭包,记为:F+F^+

例:R(U,F)U=(A,B,C,D),F={AB,BC,ACD}R(U,F),U=(A,B,C,D),F=\{A→B,B→C,AC→D\}

# 属性的闭包 XF+X_F^+

定义:设 FF 为属性集 U 上的一组函数依赖,XUX⊆UXF+={AXA能由F根据Armstrong公理导出}X_F^ +=\{A|X→A能由F根据Armstrong 公理导出\},则称 XF+X_F^ + 为属性集 X 关于函数依赖集 F 的闭包。

即:属性集 XX 的闭包 XF+X_F^ + 是指所有能由 XX​ 决定的属性集合。

# 候选码的求解方法

给定一个关系模式 R(U,F),U={A1,A2,,An}R(U,F),U=\{A_1,A_2,…,A_n\}FFRR 的函数依赖集,那么,可以将属性分为如下四类:

  • LL:仅出现在函数依赖集 F 左部的属性
  • RR:仅出现在函数依赖集 F 右部的属性
  • LRLR:在函数依赖集 F 左右部都出现的属性
  • NLRNLR:在函数依赖集 F 左右部都未出现的属性

根据候选码的特性,对于给定一个关系模式 R(U,F)R(U,F),可以得出如下结论:

  • 结论 1:若 X(XU)X(X⊆U) 是 L 类属性,则 XX 必为 RR 的任一候选码的成员。若 XF+=UX_F^ +=U,则 XX 必为 RR 的唯一候选码。
  • 结论 2:若 X(XU)X(X⊆U) 是 R 类属性,则 XX 不是 RR 的任一候选码的成员。
  • 结论 3:是 X(XU)X(X⊆U) 是 NLR 类属性,则 XX 必为 RR 的任一候选码的成员
  • 结论 4:若 X(XU)X(X⊆U) 是 L 类和 NLR 类属性组成的属性集,若 XF+=UX_F^+=U,则 XX 必为 RR 的唯一候选码

第 1 步,根据题意,将所有的属性分类:

  • LL:只在左边出现,一定是
  • RR:只在右边出现,一定不是
  • LRLR:左右都出现,有可能是,也有可能不是
  • NLRNLR:左右都没出现,一定是

第 2 步,将所有的 LL 类和 NLRNLR 类属性组合起来,设为 PP ,求其闭包 PF+P_F^+,如果是全集 UU,那么它就是候选码。

第 3 步,如果 PF+P_F^+ 不是全集 UU,则依次将 LR 类属性跟 PP 组合起来求闭包,只要其闭包是全集 UU,就是候选码。

# 最小函数依赖集

如果函数依赖集 FF 满足下列条件,则称 FF 为一个最小函数依赖集,或称极小函数依赖集或最小覆盖。

  1. FF 中的任一函数依赖的右部仅有一个属性,即无多余的属性;
  2. FF 中不存在这样的函数依赖 XAX→A,使得 FFF{XA}F-\{X→A\} 等价,即无多余的函数依赖;
  3. FF 中不存在这样的函数依赖 XAX→AXX 有真子集 ZZ 使得 FFF{XA}{ZA}F-\{X→A\}⋃\{Z→A\} 等价,即去掉各函数依赖左边的多余属性。 即:
    1. 所有函数依赖的右侧只有一个属性。
    2. 没有冗余的函数依赖。
    3. 所有函数依赖的左侧没有冗余的属性。

例:关系模式 R(U,F)R(U,F)R(A,B,C,D,E),F={ABC,AE,AD,DE,ACD}R(A,B,C,D,E), F=\{A→BC,A→E,A→D,D→E,AC→D\}

# 无损连接

分解及无损连接的定义:略,见教材 P288

无损连接是指将一个关系模式分解成若干个关系模式后,通过自然连接和投影等运算仍能还原到 原来的关系模式,则称这种分解为无损连接分解。

定理:关系模式 R(U,F)R(U,F) 的一个分解 ρ={R1(U1,F1),R2(U2,F2)}ρ =\{ R_1(U_1,F_1),R_2(U_2,F_2)\},具有无损连接的充分必要的条件是: U1U2U1U2F+U_1⋂U_2→U_1-U_2∈F^+U1U2U2U1F+U_1⋂U_2→U_2-U_1∈F^+

注意:这个定理只适用于分解为两个子模式的情况,分解为多个子模式的时候不适用。

例:对给定的关系模式R(U,F)R(U,F)U={A,B,C}U=\{A,B,C\}F={AB}F=\{A→B\},有两个分解:ρ1={AB,BC}ρ1 =\{AB,BC\}ρ2={AB,AC}ρ_2 =\{AB,AC\}。请判断这两 个分解是否无损。

# 保持函数依赖

定义:设关系模式 R(U,F)R(U,F) 的一个分解 ρ=R1(U1,F1),R2(U2,F2),,Rk(Uk,Fk)ρ ={R_1(U_1,F_1), R_2(U_2,F_2),…,R_k(U_k,F_k)},如果 F+=(i=1kFi)+F^+=(\bigcup_{i=1}^{k} F_i)^+,则称分解 ρρ 保持函数依赖。

即:(F1F2F3Fk)+=F+(F_1⋃F_2⋃F_3⋃…⋃F_k)^+ = F^+