软考中级——关系数据库(下)

规范化

1NF(第一范式)

定义:若关系模式 R 的每一个分量是不可再分的数据项,则关系模式 R 属于第一范式。记为 R∈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(第二范式)

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

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

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

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

将学生关系分解为:

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

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

学生2(学号,课程号,成绩) ∊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) 中不存在这样的码 X ,属性组 Y 及非主属性 Z(Z⊈Y) 使得 X→Y,(Y⇸X),Y→Z 成立,则关系模式 R∈3NF

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

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

将学生1分解为:

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

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

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

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

BCNF(巴克斯范式)

定义:关系模式 R∈1NF,若 X→YY⊈X 时,X 必含有码,则关系模式 R∈BCNF

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

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

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

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

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

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

(Pname,Mname)→Pno, Pno→Pname 候选码为(Pname,Mname)(Pno,Mname)

分解为:R1(Pno,Pname)∈BCNF

R2(Pno,Mname)∈BCNF

4NF(第四范式)

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

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

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

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

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

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

书目(ISBN,书名,作者,排名,出版社)

学号 选修课程 兴趣爱好

书目1(ISBN,作者,排名)∈4NF

书目2(ISBN,书名,出版社)∈BCNF

总结

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

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

Armstrong 公理系统

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

  1. $A1$ 自反律:若 $Y⊆X⊆U$,则 $X→Y$ 为 $F$ 所蕴涵。
  2. $A2$ 增广律:若 $X→Y$ 为 $F$ 所蕴涵,且 $Z⊆U$,则 $XZ→YZ$为 $F$ 所蕴涵。
  3. $A3$ 传递律:若 $X→Y,Y→Z$ 为 $F$ 所蕴涵,则 $X→Z$ 为 $F$ 所蕴涵。

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

  1. 合并规则:若 X→Y,X→Z,则 X→YZF 所蕴涵。
  2. 伪传递律:若 X→Y,WY→Z,则 XW→ZF 所蕴涵。
  3. 分解规则:若 X→Y,Z⊆Y,则 X→ZF 所蕴涵。

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

函数依赖的闭包 F^+

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

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

属性的闭包 X_F^+

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

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

候选码的求解方法

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

  • L:仅出现在函数依赖集F左部的属性
  • R:仅出现在函数依赖集F右部的属性
  • LR:在函数依赖集F左右部都出现的属性
  • NLR:在函数依赖集F左右部都未出现的属性

根据候选码的特性,对于给定一个关系模式 R(U,F),可以得出如下结论:
– 结论1:若 X(X⊆U) 是 L 类属性,则 X 必为 R 的任一候选码的成员。若 X_F^ +=U,则 X 必为 R 的唯一候选码。
– 结论2:若 X(X⊆U) 是 R 类属性,则 X 不是 R 的任一候选码的成员。
– 结论3:是 X(X⊆U) 是 NLR 类属性,则 X 必为 R 的任一候选码的成员
– 结论4:若 X(X⊆U) 是 L 类和 NLR 类属性组成的属性集,若 X_F^+=U,则 X 必为 R 的唯一候选码

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

  • L:只在左边出现,一定是
  • R:只在右边出现,一定不是
  • LR:左右都出现,有可能是,也有可能不是
  • NLR:左右都没出现,一定是

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

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

最小函数依赖集

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

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

例:关系模式 R(U,F)R(A,B,C,D,E), F={A→BC,A→E,A→D,D→E,AC→D}

无损连接

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

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

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

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

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

保持函数依赖

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

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

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇