数据库第九讲关系模式的规范化设计理论第九讲

关系模式可能存在的异常
 冗余过多
 如:学生的姓名、课程的名称有很多重复值
 插入异常
 如:新增加的学生,如果还没有选课,将无法将信息插入到表中
 更新异常
 如:许红霞老师上的课要转给其他教师上时,在更新时很容易出现错误
 删除异常
 如:有一门课程因为选课人数不够,需要取消,则在删除该门课程的选课信息的同时,这门课程的信息(课程号,课程名)也将一并被删除;同样,如果一位教师退休,要删除该位教师的信息,则这位教师的相关授课信息也将被删除

异常原因分析
 根本原因
 关系的结构。在关系模式的结构中,属性之间存在过多的“数据依赖”。
 数据依赖
 指一个关系中属性值之间的相互联系,它是现实世界属性间相互联系的体现,是数据之间的内在性质,是语义的体现。
 常见的数据依赖有
 函数依赖
 多值依赖

 异常问题的解决
 对关系模式进行分解。先分析和掌握属性间的语义关联,然后再依据这些关联得到相应的设计方案。

9.2 关系模式的函数依赖
 函数依赖的一般概念
 定义1
 设R(U)是属性集U={A1, A2,…,An}上的关系模式,X和Y是U的子集。若对R(U)的任一具体关系r中的任意两个元组t1和t2,只要t1[X]=t2[X]就有t1[Y]=t2[Y],则称“X函数确定Y”或“Y函数依赖于X” (FounctionalDependence),记作X→Y。
 小写字母r表示关系模式R(U)的对应的具体关系 (当前基本表的状态) 注意:R(U)的一切具体关系r都要满足函数依赖的约束条件。

 几个常用的术语和记号
 若X→Y,则称X为这个函数依赖的决定因素,简称X是决定因素。 若X→Y且Y→X,则称X与Y相互函数依赖,记作X  Y。
 若Y不函数依赖于X,则记作 X→Y 。
 若X→Y,但Y  X,则称X→Y是平凡函数依赖。
 若X→Y,但Y  X ,则称X→Y是非平凡函数依赖。

 候选键与主键
 定义5
 对关系模式R(U),包含在任何一个候选键中的属性称为主属性(Primary Attribute),不包含在任何候选键中的属性称为非主属性(NonprimaryAttribute)或非码属性(Non-key Attribtute)。
 定义6
 对关系模式R(U),设X  U。若X不是R(U)的主键,但X是另一个关系模式的主键,则称X是R(U)的外键或外部关键字(Foreign key)。

9.3 关系模式的规范化
 如何构造一个合适于现实世界具体问题的数据库模式?
 E. F. Codd在1977年提出了关系数据库规范化理论,主要研究关系模式中属性之间的相互依赖关系,以及对关系模式性能的影响,一个“好”的关系模式应当具备的性能,以及如何设计一个好的关系模式的设计方法。
 关系模式的规范化理论为我们提供了判断关系模式优劣的理论标准。

 范式(normal form)
 即正规公式,是符合某一种级别的关系模式的集合。
 满足不同程度要求的为不同范式。
 关系模式R满足第i范式要求,就可以写成R∈iNF

范式(normal form) 对于各种范式,有
 一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。
5𝑁𝐹 ⊂ 4𝑁𝐹 ⊂ 𝐵𝐶𝑁𝐹 ⊂ 3𝑁𝐹 ⊂ 2𝑁𝐹 ⊂ 1𝑁𝐹

 第一范式(1NF)
 定义7
 如果一个关系模式R(U)的所有属性都是不可再分的基本数据项,则称
R(U)为第一范式,即R(U)∈1NF
 一般而言,每一个关系模式都必须满足1NF,这是对每一个关系最基本的要求。

 属性是否可以再分,取决于这个属性在实际问题中的重要程度。 但是,第一范式通常存在数据冗余过多、删除异常和插入异常等问题。

第二范式(2NF)
 定义8
 若R(U)∈1NF,且每一个非主属性完全函数依赖于每个候选键,称R(U)为第二范式,即R(U)∈2NF。
 例
 有关系模式R(U)=(Sno,Sdept,Sloc,Cno,Grade),候选键为(Sno,Cno)

非2NF关系模式所引起的问题
 插入异常
 如:要插入一个学生Sno=‘20090101’, Sdept=‘cs’, Sloc=‘181-326’,该元组不能插入。
 删除异常
 如:某学生20090101只选一门C06号课,现在他不选了,则必须删除整个元组,学生的信息也丢失了。
 修改复杂
 如:某学生从计算机系cs转到数学系ma,则必须同时修改该生的住处,且若该生选修了n门课,则需修改多个元组中的值。

非2NF关系模式的转换
 方法:将关系模式进行分解。用投影分解把原关系模式R分解为两个或多个关系模式。
 例如,上例可分解为:
 R1(Sno, Cno, Grade)
 R2(Sno, Sdept, Sloc)

 注意:将一个1NF的关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。
 例:新建的宿舍,还没有学生入住,则宿舍的信息就无法输入;某课程,没有学生选修,也无法输入。

第三范式(3NF) 目的:消除非主属性的传递依赖
 定义9
 设关系模式R(U)∈2NF,且每一个非主属性不传递函数依赖于R(U)的候选键,则称R(U)为第三范式,即R(U)∈3NF。

 非3NF关系模式所引起的问题
 插入异常、删除异常、冗余度大等问题
 非3NF关系模式的转换
 模式分解

BC范式(BCNF)
 由Boyce和Codd提出的,通常认为BCNF是修正的3NF。
 定义10
 若关系模式R(U)∈1NF,对于R(U)的任意一个函数依赖X→Y,若 ,则X必含有候选键,那么称R(U)为BC范式,即R(U)∈BCNF。
 若关系模式R(U)∈1NF,且R(U)的每个属性都不传递依赖于R的候选键,则称R(U)为BC范式,即R(U)∈BCNF。

理解:每一个非平凡函数依赖的决定因素必包含候选键

理解:R(U)的每一个属性都与候选键有直接关联关系

若关系模式R(U)∈BCNF,则以下结论成立。
 R(U)的所有非主属性都完全函数依赖于每一个候选键,因此R(U)∈2NF。 R(U)的所有主属性都完全函数依赖于不包含它的候选键。
 R(U)中没有属性完全函数依赖于任何一组非候选键属性。

定理1
 若R(U)∈BCNF,则R(U) ∈ 3NF。 大多数情况下,3NF都是BCNF 3NF可能违反BCNF的两种情况
 关系中包含两个(或更多)联合候选键
 候选键有重叠,通常至少有一个重叠的属性 例:(学号,课程号),(学号,教师姓名)

定理2
 如果R(U)∈3NF且R(U)有唯一候选键X,则必有R(U)∈BCNF
 BCNF是在函数依赖条件下对模式分解所能达到的最高分离程度。

3NF与BCNF的区别
 对一个函数依赖A→B,3NF允许B是主属性,而A不是候选键。而BCNF则要求在这个依赖中,A必须是候选键。
 当3NF消除了主属性对候选键的部分和传递函数依赖时,则成为BCNF。

多值依赖*
 定义11 
 设R(U)是属性集U上的一个关系模式,X,Y,Z是U的子集,并且Z=U-X-Y。若对于R(U)的任一具体关系r,r在属性(X,Z)上的每一个值,就有属性Y上的一组值与之对应,且这组值仅仅决定于X上的值而与Z上的值无关,则称Y 多值依赖于X,记作X→→Y。 

9.4 函数依赖的推理规则 

函数依赖的逻辑蕴涵
 定义12
对于满足函数依赖集F的关系模式R(U,F)的任意一个具体关系r,若函数依赖XY都成立(即对于r中的任意两个元组t,s,若t[X]=s[X],则有t[Y]=s[Y]),则称F逻辑蕴涵XY,
记为 FXY
 注意:X→Y不一定属于F
9.4 函数依赖的推理规则
 函数依赖的逻辑蕴涵
 定义13
 被函数依赖集F逻辑蕴涵的函数依赖所构成的集合,称为F的闭包(Closure),记作F+。即:
F+={XY | FXY}
 通常,FF+。若F=F+,称F是函数依赖完备集。
9.4 函数依赖的推理规则
 Armstrong公理系统
 设有关系模式R(U, F),F是只涉及到U中属性的函数依赖集。若X,Y,Z,W均是U的子集,则有以下推理规则:
 ⑴ 自反律 (Reflexivity Rule):如果Y  X  U,则X→Y成立,即F 
X→Y。
 ⑵ 增广律(Augmentation Rule):如果X→Y成立, 则XZ→YZ 成立(其中XZ是X∪Z的简单记法,其它类同),即若F  X→Y,则F  XZ→YZ。 ⑶ 传递律(Transitivity rule):如果X→Y,Y→Z成立,则X→Z成立,即若F  X→Y,F  Y→Z,则F  X→Z
9.4 函数依赖的推理规则
 Armstrong公理系统
 定理3
 Armstrong公理系统中的推理规则⑴,⑵,⑶是正确的,即若XY由Armstrong公理导出,则XY属于F+。
9.4 函数依赖的推理规则
 Armstrong公理系统
 定理4 函数依赖的如下三个推理规则是正确的。
 (1)合并律(Union Rule):如果X→Y和X→Z成立,那么X→YZ成立,即若F  X→Y,F  X→Z,则F  X→YZ。
 (2)伪传递律(Pseudotransivity Rule):如果X→Y和WY→Z成立,那么WX→Z成立,即若F  X→Y,F  WY→Z,则F  WX→Z。
 (3)分解律(Decomposition Rule):如果X→Y和Z  Y成立,那么X→Z成立,即若F  X→Y,Z  Y,则F  X→Z。
9.4 函数依赖的推理规则
 Armstrong公理系统
 推论4.1 对关系模式R(U),设XU,{A1, A2 ,…, Am}U,则
X{A1, A2 ,…, Am}成立的充分必要条件是XAi (i=1,2,…,m)成
立。
 属性的闭包
 定义14 设F是属性集合U上的一个函数依赖集,XU,称
𝑿
𝑭 ={A | A∈U,X→A能由F根据Armstrong公理导出}为属性集X关于F的闭包。
9.4 函数依赖的推理规则
 求属性集X(XU)关于U上的函数依赖集F的闭包XF+
9.4 函数依赖的推理规则
 属性的闭包
 例:已知关系模式R<U,F>,U={A, B, C, D, E},F={A→B, D→C, BC→E, 
AC→B},求(AE)+和(AD)+
9.4 函数依赖的推理规则
 属性的闭包
 定理5 设F是属性集U上的函数依赖集,X,Y是U的子集,则XY能由F根据Armstrong公理导出的充分必要条件是Y⊆X
 证明:
 充分性:合并律
 必要性:分解律
9.4 函数依赖的推理规则
 属性的闭包
 例:设有关系模式R<U, F>,U={A, B, C, D, E},F={A→B, B→C, 
CD→E},判断F是否逻辑蕴涵A→E
 提示:要判断F是否逻辑蕴涵A→E,只需判断E是否属于A+即可。
9.4 函数依赖的推理规则
 函数依赖推理规则的完备性
 定理6 Armstrong公理系统,即函数依赖推理规则系统(自反律、增广律和传递律)是完备的。
 F+中的每一个函数依赖X→Y,必定可以由F出发根据Armstrong公理导出。
9.4 函数依赖的推理规则
 函数依赖集的等价和覆盖
 定义15 对关系模式R(U)上的两个函数依赖集F和G,如果满足F+=G+,则称F和G是等价的。
 如果F和G是等价的,则称F覆盖G(同时G也覆盖F) 定理7 F+=G+充分必要条件是FG+, GF+
 证明:
 (1)必要性
 (2)充分性
9.4 函数依赖的推理规则
 最小函数依赖集
 如果函数依赖集合F满足
⑴ F中每一个函数依赖的右部都是单属性,即全是X→A的形式,其中X 
U,A∈U;
⑵ 对F中的任一函数依赖X→A,有F-{X→A}与F不等价;
⑶ 对F中的任一函数依赖X→A,若Z  X,则(F-{X→A})∪{Z→A}与F不等价。
则称F为最小函数依赖集,记为Fmin。
 定理8 每个函数依赖集F都有最小覆盖。

9.5 关系模式的分解特性 

 定义16
 设有关系模式R(U)和R1(U1), R2(U2), …, Rk(Uk),其中U={A1, 
A2, …, An},Ui U(i=1,2,…, k)且U=U1U2…Uk。令
={R1(U1), R2(U2), …, Rk(Uk)},则称为R(U)的一个分解,也称为数据库模式,有时也称为模式集。用代替R(U)的过程称为关系模式的分解。
 数据库模式的一个具体取值记作=(r1, r2, …, rk),称为数据库实例(西格玛)。其中ri是中关系模式Ri(Ui)对应的一个具体关系。

模式分解中存在的问题
 实际上,关系模式的分解,不仅仅是属性集合的分解,它是对关系模式上的函数依赖集,以及关系模式对应的具体关系进行分解的体现。

评判标准
 分解具有无损连接
 分解保持函数依赖
 分解既保持函数依赖,又具有无损连接性(最好的分解)

无损连接的测试
 输入
 关系模式R(U),其中U={A1,A2,…,An}
 R(U)上成立的函数依赖集F
 R(U)的一个分解={R1(U1), R2(U2), …, Rk(Uk)},其中U=U1∪U2∪…∪Uk
 输出
 相对于F具有或不具有无损连接性的判断
 算法
 构造一张k行n列的表格,每列对应一个属性Aj(j=1, 2, …, n),每行对应一个模式Ri(Ui)的属性集合(i=1,2,…, k)。如果Aj在Ui中,那么在表格的第i行第j列处填上符号aj,否则填上符号bij
 反复检查F的每一个函数依赖,并修改表格中的元素,直到表格不能修改为止。
 其方法如下:
 取F中的函数依赖X→Y,如果表格中有两行在X分量上相等,在Y分量上不相等,那么修改Y分量上的值,使这两行在Y分量上也相等,具体修改分两种情况:
①如果Y的分量中有一个是aj,那么另一个也修改成aj,
②如果Y的分量中没有aj,那么用下标i较小的那个bij替换另一个符号。
 若修改结束后的表格中有一行是全a,即a1, a2, …, an,那么相对于F是无损连接的分解,否则, 相对于F不是无损连接的分解。

 定理10 关系模式R(U)的一个分解 ={R1(U1), R2(U2), …, Rk(Uk)}是无损连接分解的充分必要条件是算法4.2终止且最终结果表中有一行的元素为a1, a2, …, an。

定理11 
 如果R(U)的分解为 ={Rl(U1),R2(U2)},其中U=U1∪U2,F为R(U)所满
足的函数依赖集合,则分解 是无损连接的充分必要条件为(U1∩U2)→(U1-U2)或者(U1∩U2)→(U2-U1)成立。

保持函数依赖的分解 无损连接是必要的
 但是,如果关系模式在分解后不能保持原有的函数依赖,就丢失了一部分完整性约束信息,也就可能导致数据库的不一致性。
 定义17
 设F是属性集U上的函数依赖集,Z是U上的一个子集,F在Z上的一个投影用Z(F)表示,定义为:
Z(F)={XY|(XY)F+且XYZ}
9.5 关系模式的分解特性
 保持函数依赖的分解
 定义18 设关系模式R(U)的一个分解={R1(U1), R2(U2), …, Rk(Uk)},F是R(U)满足的函数依赖集,如果,𝐹  ⋃ 𝜋   𝐹 
 
  则称分解
保持函数集F,简称保持函数依赖。
9.5 关系模式的分解特性
 保持函数依赖的分解
 函数依赖测试
 输入
 R(U,F)
 ={R1(U1), R2(U2), …, Rk(Uk)}
 输出
 是否保持F的判断结果。
9.5 关系模式的分解特性
 保持函数依赖的分解
 函数依赖测试
 算法步骤:
(1) 令G= ⋃ 𝜋   𝐹 
 
,F=FG,Result=True
(2) 对于F中的第一个函数依赖XY,计算𝑋
  并令F=F{XY}
(3) 若𝑌 ⊄ 𝑋
  ,则令Result=False,转⑷
否则,若F,转⑵,否则,转⑷
(4) 若Result=True则保持函数依赖F,否则不保持函数依赖F。
9.5 关系模式的分解特性
 例
 设有关系模式R(A,B,C,D),F={AB, BC, CD, DA},模式R的一个分解 ={R1(A,B), R2(B,C), R3(C,D)}。判断是否保持F。
 解
 求G= ⋃ 𝜋   𝐹 
 
 求F=F-G
 取F中的第一个X→Y,计算𝑋
 判断是否𝑌 ⊆ 𝑋
9.5 关系模式的分解特性
 关于关系模式的分解有以下几个重要事实:
 (1) 若要求分解保持函数依赖,那么模式分解总可以达到3NF,但不一定能达到BCNF。
 ⑵ 若要求分解既保持函数依赖,又具有无损连接性,可以达到3NF,但不一定能达到BCNF。
 ⑶ 若要求分解具有无损连接性,那一定可达到4NF。
9.5 关系模式的分解特性
 分解成3NF的模式集(自学)
 算法
 输入
 关系模式R
 属性集合U
 R上成立的函数依赖集F。
 输出
 R的一个分解 ={R1(U1), R2(U2),…, Rk(Uk)},其中每个Ri(Ui)都是3NF的且 保持函
数依赖F。
9.5 关系模式的分解特性
 分解成3NF的模式集(自学)
 算法
 1) 求出函数依赖集F的最小覆盖并仍记为F, 令 =∅。
 2) 若F中有函数依赖X→Y,满足XY=U,则令 =  ∪{R(U)},转6)。
 3) 若U中某些属性U1在F的所有函数依赖的左部和右部都不出现,则把这些属性构成一个关系模式R(U1),并令 =  ∪{R(U1)}。
9.5 关系模式的分解特性
 分解成3NF的模式集(自学)
 算法
 4) 对F中的所有以X为左部的函数依赖X→Y1, X→Y2,…,X→Yk,构成关
系模式R(XY1Y2…Yk),令 = ∪{R(XY1Y2…Yk)},F=F-{X→Y1, X→Y2, …, X→Yk}
 5)若F=∅,转6);否则,转4)。 6) 输出 。
9.5 关系模式的分解特性
 关系模式设计原则
 关系模式R(U,F)分解成数据库模式={R1(U1), R2(U2),…, Rk(Uk)},一般应满足以下四个要求
 中每个关系模式Ri应有某种范式性质(3NF或BCNF); 应具有无损联接连接性;
 仍然保持函数依赖集F;
 最小性:指中的模式个数应最少和模式中属性总数应最少。
 模式分解的关键问题是要“等价”地分解。
 一个好的模式设计方法应符合下列三条原则:
 表达性:数据等价和依赖等价
 分离性:分解以后的各个模式尽可能做到概念单一
 最小冗余性:模式个数最少和模式中属性总数最少,以节省存储空间,提高操作效率,清除不必要冗余

  • 13
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值