2018-10-26 转载请注明出处
问题的提出
数据依赖是一个关系内部属性与属性之间的一种约束关系。这种约束关系是通过属性间值的相等与否体现出来的数据间相互联系。它是现实世界属性间相互联系的抽象,是数据内在的性质,是语义的体现。
数据依赖最重要的是函数依赖(Functional Dependency)和多值依赖(Multi-Valued Dependency,MVD)。
函数依赖普遍存在,例如一个学生学号确定了那么姓名所在系也就确定了。
例子:建立学生的数据库,包括学号、系、系主任、课程号、成绩。
如果仅用一个单一的关系模式,就会有很多的问题,而一个好的关系模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽可能地减少。
如果把这个单一的模式改造一下,分成三个关系模式就不会发生插入异常、删除异常的问题,数据的冗余也得到了控制。
规范化
规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
一、函数依赖
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
表示方式:
一对一联系:X←→Y
多对一联系:X→Y
多对多联系:不存在依赖关系
可从属性间的联系类型来分析属性间的函数依赖
1平凡函数依赖与非平凡函数依赖
X→Y,但Y⊈X 则称X→Y是非平凡的函数依赖。
X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
若X→Y,则X称为这个函数依赖的决定因素(Determinant)。
Example:
在关系SC(Sno, Cno, Grade)中,
非平凡函数依赖: (Sno, Cno) → Grade
平凡函数依赖: (Sno, Cno) → Sno
(Sno, Cno) → Cno
2完全函数依赖和部分函数依赖
R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X →(F) Y。
若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X →(P) Y。
Example:
(Sno, Cno) →(F) Grade 完全函数依赖
(Sno,Cno) →(P) Sdept 部分函数依赖
3传递函数依赖
在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖(transitive functional dependency)。记为:X →(传递) Z。
二、码
设K为R中的属性或属性组合。若K →(F) U ,K整体决定U,则K称为R的一个候选码(Candidate Key)。
如果U部分函数依赖于K,即K →(P) U,则K称为超码(Surpkey)。候选码是最小的超码,即K的任意一个真子集都不是候选码。
主属性与非主属性
包含在任何一个候选码中的属性 ,称为主属性(Prime attribute)
不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
外码
关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreign key)也称外码。
三、范式
关系数据库中的关系满足不同程度的要求即为不同的范式。范式种类有:第一范式、第二范式、第三范式、BC范式、第四范式、第五范式。
各范式之间的联系:从第五范式向上范围依次扩大。
一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。
第一范式(1NF):需满足的条件即关系最基本的条件,每一个分量必须是不可分的数据项。
第二范式(2NF):若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF。
第三范式(3NF):设关系模式R∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z不包含Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R ∈ 3NF。
例如SC没有传递依赖,因此SC是3NF。
说明:
(1) 每个非主属性既不部分依赖,也不传递依赖于R的任何码。
(2) 从1NF→2NF:消除非主属性对码的部分函数依赖。
(3) 从2NF→3NF:消除非主属性对码的传递函数依赖。
(4) 从一个表中删去不依赖于主码的数据列。
BCNF:设关系模式R∈1NF,若X →Y且Y不属于X时 X必含有码,则R∈BCNF。
换言之,在关系模式R中,如果每一个决定属性集都包含候选码,则R∈BCNF。
性质:
多值依赖:
设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。
平凡多值依赖和非平凡多值依赖:
若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。
否则称X→→Y为非平凡的多值依赖。
多值依赖的性质:
第四范式(4NF):关系模式R∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y 不属于X),X都含有码,则R∈4NF。
例子:Teaching(C,T,B)不是第四范式,C->->T,而C不是码。
注意:
不允许有非平凡且非函数依赖的多值依赖。
允许的非平凡多值依赖实际上是函数依赖。
说明:
3NF->BCNF:消除主属性对码的部分和传递函数依赖
BCNF->4NF:消除非平凡且非函数依赖的多值依赖
Armstrong公理系统:一套推理规则,是模式分解算法的理论基础。
用途:
求给定关系模式的码
从一组函数依赖求得蕴涵的函数依赖
推理规则:
定义:在关系模式R中为F所逻辑蕴涵的函数依赖的全体叫作F的闭包,记为F+。
有效性:由F 出发根据Armstrong公理推导出来的每一个函数依赖一定在F +中
完备性:F +中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来
模式的分解:
1 分解具有无损连接性
关系模式R的一个分解 ρ={ R1
具有无损连接性的分解保证不丢失信息
无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题
2 分解要保持函数依赖
3 分解既要保持函数依赖,又要具有无损连接性
分解算法:
算法6.2 判别一个分解的无损连接性
算法6.3(合成法)转换为3NF的保持函数依赖的分解。
算法6.4 转换为3NF既有无损连接性又保持函数依赖的分解
算法6.5 (分解法)转换为BCNF的无损连接分解
算法6.6 达到4NF的具有无损连接性的分解
小结:
若要求分解具有无损连接性,那么模式分解一定能够达到4NF
若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF
若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF