一、关系模式设计中存在的问题
关系模式看作一个三元组:R<U,F>
每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
数据依赖
是一个关系内部属性与属性之间的一种约束关系
通过属性间值的相等与否体现出来的数据间相互联系
是现实世界属性间相互联系的抽象
是数据内在的性质
是语义的体现
数据依赖的类型
函数依赖(Functional Dependency,简记为FD)
举例说明
关系模式Student<U, F>
U ={Sno, Sdept, Mname, Cname, Grade}
F ={ Sno → Sdept, Sdept → Mname, (Sno, Cname) → Grade }
问题:增删改冗余
1)数据冗余太大 浪费大量的存储空间 例:每一个系主任的姓名重复出现
2)更新异常(Update Anomalies) 数据有冗余,更新数据时,维护数据完整性代价大。 例:某系更换系主任后,系统必须修改与该系学生有关的每一个元组
3)插入异常(Insertion Anomalies) 该插的数据插不进去 例,如果一个系刚成立,尚无学生,我们就无法把这个系及其系主任的信息存入数据库。
4)删除异常(Deletion Anomalies) 不该删除的数据不得不删 例,如果某个系的学生全部毕业了, 我们在删除该系学生信息的同时,把这个系及其系主任的信息也丢掉了。
多值依赖(Multivalued Dependency,简记为MVD)
( 1.数据冗余 2.增加操作复杂 3.删除操作复杂4.修改操作复杂)
定义6.9 设R(U)是一个属性集U上的一个关系模式, X、 Y和Z是U的子集,并且Z=U-X-Y,关系模式R(U)中多值依赖 X→→Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值而与z值无关。
例 Teaching(C, T, B) 对于C的每一个值,T有一组值与之对应,而不论B取何值。因此T多值依赖于C,即C→→T。 (一门课C1,对应教师T1,T2,……,和用什么参考书无关)
对调还存在
平凡多值依赖和非平凡的多值依赖
若X→→Y,而Z=φ,即Z为空,则称X→→Y为平凡的多值依赖【两列有效?
否则称X→→Y为非平凡的多值依赖
性质:
(1)多值依赖具有对称性。
(2)多值依赖具有传递性。即若X→→Y,Y→→Z, 则 X→→Z-Y。
(3)函数依赖是多值依赖的特殊情况。即若X→Y,则 X→→Y。
(4)若X→→Y,X→→Z,则X→→YZ。
(5)若X→→Y,X→→Z,则X→→Y∩Z。
(6)若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。
其他
二、函数依赖
规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
1.函数依赖概念
(1)函数依赖
“X函数确定Y” 或“Y函数依赖于X”,记作X→Y:任意x确定唯一的y
(2)平凡函数依赖与非平凡函数依赖
我们总是讨论非平凡函数依赖。
(3)完全函数依赖与部分函数依赖
(4)传递函数依赖
定义6.3 在R(U)中,如果X→Y,(Y X),Y→X, Y→Z, 则称Z对X传递函数依赖。记为:X → Z
2.码
定义6.4 设K为R<U,F>中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。 如果U部分函数依赖于K,即K → U,则K称为超码(Surpkey)。候选码是最小的超码,即候选码的任意一个真子集都不是候选码。 若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
定义6.5 关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreign key)也称外码
三、关系模式的范式
第一范式(1NF) :
一个关系模式R的所有属性都是不可分的基本数据项
第二范式(2NF)
定义6.6 若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
用投影分解把关系模式S-L-C分解成两个关系模式
第三范式(3NF)=无非主属性对码的传递依赖+无部分依赖
S-L中Sno →Sdept( Sdept ↛ Sno), Sdept→Sloc,可得Sno→Sloc。 解决的办法是将S-L分解成 S-D(Sno,Sdept)∈ 3NF D-L(Sdept,Sloc)∈ 3NF
BC范式(BCNF) =不存在非主做决定性因素
定义6.8 设关系模式R<U,F>∈1NF,若X →Y且Y ⊆ X时X必含有码,则R<U,F>∈BCNF。
换言之,在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R∈BCNF。
[例] 关系模式S(Sno,Sname,Sdept,Sage), 假定Sname也具有唯一性,那么S就有两个码,这两个码都由单个属性组成,彼此不相交。 其他属性不存在对码的传递依赖与部分依赖,所以S∈3NF。 同时S中除Sno,Sname外没有其他决定因素,所以S也属于BCNF。
3NF——只消除非主属性对候选码的传递依赖;
BCNF——消除所有属性对候选码的传递依赖。
第四范式(4NF)
定义6.10 关系模式R<U,F>∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y 不属于 X),X都含有码,则R∈4NF。 4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的非平凡多值依赖实际上是函数依赖。
第五范式(5NF)
小结
第一范式:属性不可再分
第二范式:没有非主属性对候选码的部分函数依赖
第三范式:没有非主属性对候选码的部分函数依赖、传递依赖
BC范式:没有非主以及主属性对候选码的部分函数依赖、传递依赖(判断函数依赖的箭头左边都是含有码的)
第四范式:依据多值依赖判断
四、关系模式的分解
数据依赖的公理系统
Armstrong公理系统(有效性、完备性)
求给定关系模式的码
从一组函数依赖求得蕴含的函数依赖
Al.自反律(Reflexivity): 若Y 属于 X 属于 U,则X →Y 为F 所蕴含。
A2.增广律(Augmentation): 若X→Y 为F所蕴含,且Z 属于U,则XZ→YZ 为F 所蕴含。
A3.传递律(Transitivity): 若X→Y及Y→Z 为F 所蕴含,则X→Z 为F 所蕴含。
推论:
合并规则:由X→Y,X→Z,有X→YZ。 (A2, A3)
伪传递规则:由X→Y,WY→Z,有XW→Z。 (A2, A3)
分解规则:由X→Y 及 ZY,有X→Z。 (A1, A3)
引理 6.l X→A1 A2…Ak 成立的充分必要条件是 X→Ai成立(i=l,2,…,k)。
X决定了每一个Ai 《————》 X决定所有Ai的组合。
定义6.12 在关系模式R<U,F>中为F 所逻辑蕴含的函数依赖的全体叫作 F 的闭包,记为F +。
定义6.13 设 F 为属性集U上的一组函数依赖,X 属于U, XF+ ={ A|X→A能由F 根据Armstrong公理导出},XF+称为属性集X 关于函数依赖集F 的闭包。
通俗说:从X出发,所有能够根据函数依赖而推出的那些属性的集合。
引理6.2 设F 为属性集U上的一组函数依赖,X,Y 属于 U,X→Y 能由F根据Armstrong公理导出的充分必要条件是Y 包含于XF+
用途 将判定X→Y是否能由F 根据Armstrong公理导出的问题,转化为求出XF+ ,判定Y是否为XF+的子集的问题。y包含于x的闭包中等价于x->y
求闭包的算法
引理6.3 F+ = G+ 的充分必要条件是F 包含于 G+ ,和G 包含于 F+
定义6.15 如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集。亦称为最小依赖集或最小覆盖。
定理6.3 每一个函数依赖集F均等价于一个极小函数依赖集Fm. 此Fm称为F的最小依赖集。
极小化过程
F 的最小依赖集Fm不唯一 它与对各函数依赖FDi 及X→A中X 各属性的处置顺序有关
模式的分解
(1)分解具有无损连接性
如果一个分解具有无损连接性,则它能够保证不丢失信息
若R与R1、R2、…、Rn自然连接的结果相等,则称关系模式R的这个分解ρ具有无损连接性(Lossless join)
无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题
【相当于分解完函数依赖关系不变】
(2)分解要保持函数依赖
如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况
(3)分解既要保持函数依赖,又要具有无损连接性
分解算法
算法6.2 判别一个分解的无损连接性
算法6.3(合成法)转换为3NF的保持函数依赖的分解。
通俗讲:函数依赖左边相同的分一组,分组后,若涉及属性集有被包含的关系,则删除子集。
例如,R〈U,F〉:U={A,B,C},F={ABC,CB},码为{A,B}
算法6.4 转换为3NF既有无损连接性又保持函数依赖的分解
所以,若要求分解保持函数依赖,那么模式分离总可以达到3NF,但不一定能BCNF。
通俗的讲:由码、以及与码相关的所有函数依赖关系所构成的这个模式,属性集已经包含码本身。 或者说:码已经存在于每一个与他相关的模式中。【看加不加码,使得3nf具有无损连接性】
算法6.5 (分解法)转换为BCNF的无损连接分解
算法6.6 达到4NF的具有无损连接性的分解
定理6.6 关系模式R〈U,D〉中,D为R中函数依赖FD和多值依赖MVD的集合。则X->->Y成立的充要条件是R的分解ρ={ R1〈X,Y〉,R2〈X,Z〉}具有无损连接性,其中Z=U―X―Y。
算法6.6 达到4NF的具有无损连接性的分解 ① 由算法6.5,可得BCNF的分解 ② 在①的基础上,分析每一个Ri,若某一个Ri〈Ui,Di〉不属于4NF,则可按上述定理6.6 对 Ri进行分解,直到每一个关系模式均属于4NF为止。
小结
五、小结
若要求分解具有无损连接性,那么模式分解一定能够达到4NF
若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF
若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF