关系模式可能存在的异常
冗余过多
如:学生的姓名、课程的名称有很多重复值
插入异常
如:新增加的学生,如果还没有选课,将无法将信息插入到表中
更新异常
如:许红霞老师上的课要转给其他教师上时,在更新时很容易出现错误
删除异常
如:有一门课程因为选课人数不够,需要取消,则在删除该门课程的选课信息的同时,这门课程的信息(课程号,课程名)也将一并被删除;同样,如果一位教师退休,要删除该位教师的信息,则这位教师的相关授课信息也将被删除
异常原因分析
根本原因
关系的结构。在关系模式的结构中,属性之间存在过多的“数据依赖”。
数据依赖
指一个关系中属性值之间的相互联系,它是现实世界属性间相互联系的体现,是数据之间的内在性质,是语义的体现。
常见的数据依赖有
函数依赖
多值依赖
异常问题的解决
对关系模式进行分解。先分析和掌握属性间的语义关联,然后再依据这些关联得到相应的设计方案。
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,若函数依赖XY都成立(即对于r中的任意两个元组t,s,若t[X]=s[X],则有t[Y]=s[Y]),则称F逻辑蕴涵XY,
记为 FXY
注意:X→Y不一定属于F
9.4 函数依赖的推理规则
函数依赖的逻辑蕴涵
定义13
被函数依赖集F逻辑蕴涵的函数依赖所构成的集合,称为F的闭包(Closure),记作F+。即:
F+={XY | FXY}
通常,FF+。若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公理系统中的推理规则⑴,⑵,⑶是正确的,即若XY由Armstrong公理导出,则XY属于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),设XU,{A1, A2 ,…, Am}U,则
X{A1, A2 ,…, Am}成立的充分必要条件是XAi (i=1,2,…,m)成
立。
属性的闭包
定义14 设F是属性集合U上的一个函数依赖集,XU,称
𝑿
𝑭 ={A | A∈U,X→A能由F根据Armstrong公理导出}为属性集X关于F的闭包。
9.4 函数依赖的推理规则
求属性集X(XU)关于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的子集,则XY能由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+充分必要条件是FG+, GF+
证明:
(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=U1U2…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)={XY|(XY)F+且XYZ}
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=FG,Result=True
(2) 对于F中的第一个函数依赖XY,计算𝑋
并令F=F{XY}
(3) 若𝑌 ⊄ 𝑋
,则令Result=False,转⑷
否则,若F,转⑵,否则,转⑷
(4) 若Result=True则保持函数依赖F,否则不保持函数依赖F。
9.5 关系模式的分解特性
例
设有关系模式R(A,B,C,D),F={AB, BC, CD, DA},模式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;
最小性:指中的模式个数应最少和模式中属性总数应最少。
模式分解的关键问题是要“等价”地分解。
一个好的模式设计方法应符合下列三条原则:
表达性:数据等价和依赖等价
分离性:分解以后的各个模式尽可能做到概念单一
最小冗余性:模式个数最少和模式中属性总数最少,以节省存储空间,提高操作效率,清除不必要冗余