第六章 关系数据理论
6.1 问题的提出
1、关系数据库逻辑设计
(1)针对具体问题,如何构造一个适合于它的数据模式
(2)数据库逻辑设计的工具──关系数据库的规范化理论
2、关系模式由五部分组成,是一个五元组:R(U, D, DOM, F)
(1)关系名R是符号化的元组语义
(2)U为一组属性
(3)D为属性组U中的属性所来自的域
(4)DOM为属性到域的映射
(5)F为属性组U上的一组数据依赖
(6)由于D、DOM与模式设计关系不大,因此在本章中把关系模式看作一个三元组:R
(7)当且仅当U上的一个关系r满足F时,r称为关系模式R的一个关系
(8)作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项。满足了这个条件的关系模式就属于第一范式(1NF)
属性间的联系
1、一对一联系
设X,Y为关系中的属性或属性组,它们的所有可能取值组成两个集合。如果对于X中的任一具体值Y中至多有一个值与之对应,称X,Y这两个属性之间是一对一联系。
2、一对多联系
如果属性值集合X中的任一个具体值,至多与Y中的一个值相对应,而Y中的任一个具体值却可以和X中的多个值相对应,则称两个属性间从X到Y为m:1的联系或从Y到X是1:m的联系。
注意:这里指的是属性值个数的多少,而不是具有相同属性值的有多少个元组,二者正好相反。
3、多对多联系
在X,Y两个属性值集中,如果任一个值都可以至多和另一个属性值集中多个值对应,反之亦然,则称属性X和Y是m:n关系。
4、数据依赖
(1)是一个关系内部属性与属性之间的一种约束关系
※通过属性间值的相等与否体现出来的数据间相互联系
(2)是现实世界属性间相互联系的抽象
(3)是数据内在的性质
(4)是语义的体现
5、数据依赖的主要类型
函数依赖(Functional Dependency,简记为FD)
多值依赖(Multi-Valued Dependency,简记为MVD)
6、关系模式Student中存在的问题:
(1)数据冗余
浪费大量的存储空间
(2)更新异常(Update Anomalies)
数据冗余 ,更新数据时,维护数据完整性代价大。
(3)插入异常(Insertion Anomalies)
(4)删除异常(Deletion Anomalies)
7、结论
(1)Student关系模式不是一个好的模式。
(2)一个“好”的模式应当不会发生插入异常、删除异常和更新异常,数据冗余应尽可能少。
8、原因
由存在于模式中的某些数据依赖引起的。
9、解决方法
用规范化理论改造关系模式来消除其中不合适的数据依赖
6.2 规范化
规范化理论正是用来改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。
6.2.1 函数依赖
1. 函数依赖
(1)定义6.1
设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r 中不可能存在两个元组在X上的属性值相等, 而在Y上的属性值不等, 则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。
(2)函数依赖与属性间的联系类型有关
※一对一联系:X←→Y
※多对一联系:X→Y
※ 多对多联系:不存在依赖关系
※ 可从属性间的联系类型来分析属性间的函数依赖
(3)说明:
※函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。
※函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。
※数据库设计者可以对现实世界作强制的规定。
2. 平凡函数依赖与非平凡函数依赖
(1)X→Y,但Y⊈X则称X→Y是非平凡的函数依赖。
(2)X→Y,但Y⊆X 则称X→Y是平凡的函数依赖。
//对于任一关系模式,平凡函数依赖都是必然成立的,它不反映新的语义。
若不特别声明, 我们总是讨论非平凡函数依赖。
(3)若X→Y,则X称为这个函数依赖的决定因素(Determinant)。
(4)若X→Y,Y→X,则记作X←→Y。
(5)若Y不函数依赖于X,则记作X↛Y。
3. 完全函数依赖与部分函数依赖
(1)定义6.2
在R(U)中,如果X→Y,并且对于X的任何一个真子集X’, 都有 X’ ↛ Y, 则称Y对X完全函数依赖,记作X → Y。
(2)若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作X → Y
4. 传递函数依赖
(1)定义6.3
在R(U)中,如果X→Y(Y⊈X),Y↛X,Y→Z,Z⊈Y, 则称Z对X传递函数依赖(transitive functional dependency)。记为:X → Z。
(2)注: 如果Y→X, 即X←→Y,则Z直接依赖于X,而不是传递函数依赖。
6.2.2 码
(1)定义6.4
设K为R中的属性或属性组合。若K → U,则K称为R的一个候选码(Candidate Key)。
※ 如果U部分函数依赖于K,即K → U,则K称为超码 (Surpkey)。候选码是最小的超码,即K的任意一个真子集都不是候选码。
(2)若关系模式R有多个候选码,则选定其中的一个做为主码(Primary key)。
(3)主属性与非主属性
※包含在任何一个候选码中的属性 ,称为主属性 (Prime attribute)
※不包含在任何码中的属性称为非主属性(Nonprime attribute)或非码属性(Non-key attribute)
(4)全码:整个属性组是码,称为全码(All-key)
(5)定义6.5
关系模式 R中属性或属性组X 并非 R的码,但 X 是另一个关系模式的码,则称 X 是R 的外部码(Foreign key)也称外码。
(6)主码与外部码一起提供了表示关系间联系的手段
6.2.3 范式
(1)范式是符合某一种级别的关系模式的集合。
(2)关系数据库中的关系必须满足一定的要求。满足 不同程度要求的为不同范式。
(3)范式的种类:
第一范式(1NF)
第二范式(2NF)
第三范式(3NF)
BC范式(BCNF)
第四范式(4NF)
第五范式(5NF)
(4)某一关系模式R为第n范式,可简记为R∈nNF。
(5)一个低一级范式的关系模式,通过模式分解(schema decomposition)可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化(normalization)。
6.2.4 2NF
(1)定义6.6
若关系模式R∈1NF,并且每一个非主属性都完全函数依赖于任何一个候选码,则R∈2NF
(2)一个关系模式不属于2NF,会产生以下问题:
插入异常
如果插入一个新学生,但该生未选课,即该生无Cno,由于插入元组时,必须给定码值,因此插入失败。
删除异常
如果S4只选了一门课C3,现在他不再选这门课,则删除C3后,整个元组的其他信息也被删除了。
修改复杂
如果一个学生选了多门课,则Sdept,Sloc被存储了多次。如果该生转系,则需要修改所有相关的Sdept和Sloc,造成修改的复杂化。
6.2.5 3NF
(1)定义6.7
设关系模式R∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Z ⊇ Y), 使得X→Y,Y→Z成立,Y ↛ X不成立,则称R ∈ 3NF。
(2)不良特性
插入异常:
如果系中没有学生,则有关系的信息就无法插入。
删除异常:
如果学生全部毕业了,则在删除学生信息的同时有关系的信息也随之删除了。
更新异常:
如果学生转系,不但要修改SDept,还要修改Sloc,如果换Sloc,则该系每个学生元组都要做相应修改。
数据冗余:
每个学生都存储了所在系的Sloc的信息。
(3)说明
※每个非主属性既不部分依赖,也不传递依赖于R的任何码。
※从1NF→2NF:消除非主属性对码的部分函数依赖
※从2NF→3NF:消除非主属性对码的传递函数依赖
※ 从一个表中删去不依赖于主码的数据列。
6.2.6 BCNF
(1)BCNF(Boyce Codd Normal Form)由Boyce和Codd提出,比3NF更进了一步。通常认为BCNF是修正的第三范式,有时也称为扩充的第三范式。
(2)定义6.8 设关系模式R∈1NF,若X →Y且Y ⊆ X时X必含有码,则R∈BCNF。
(3)换言之,在关系模式R中,如果每一个决定属性集都包含候选码,则R∈BCNF。
(4)不良特性
插入异常:如果没有学生选修某位老师的任课,则该老师担任课程的信息就无法插入。
删除异常:删除学生选课信息,会删除掉老师的任课信息。
更新异常:如果老师所教授的课程有所改动,则所有选修该老师课程的学生元组都要做改动。
数据冗余:每位学生都存储了有关老师所教授的课程的信息。
(5)症由:
主属性对码的不良依赖。
(6)3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度。
※一个模式中的关系模式如果都属于BCNF,那么在函数依赖范畴内,它已实现了彻底的分离,已消除了插入和删除的异常。
※3NF的“不彻底”性表现在可能存在主属性对码的部分依赖和传递依赖。
(7)BCNF的关系模式所具有的性质
※所有非主属性都完全函数依赖于每个候选码
※ 所有主属性都完全函数依赖于每个不包含它的候选码
※ 没有任何属性完全函数依赖于非码的任何一组属性
6.2.7 多值依赖
(1)存在的问题
数据冗余度大:有多少名任课教师,参考书就要存储多少次。
增加操作复杂:当某一课程增加一名任课教师时,该课程有多少本参照书,就必须插入多少个元组。
删除操作复杂:某一门课要去掉一本参考书,该课程有多少名教师,就必须删除多少个元组。
修改操作复杂:某一门课要修改一本参考书,该课程有多少名教师,就必须修改多少个元组。
(2)产生原因: 存在多值依赖
(3)定义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值无关。
(4)多值依赖的另一个等价的定义
在R(U)的任一关系r中,如果存在元组t,s使得t[X]=s[X],那么就必然存在元组w,v∈r,(w,v可以与s,t相同), 使w[X]=v[X]=t[X],而w[Y]=t[Y],w[Z]=s[Z],v[Y]=s[Y],v[Z]=t[Z](即交换s,t元组的Y值所得的两个新元组必在r中则Y多值依赖于X,记为X→→Y。这里X,Y是U的子集,Z=U-X-Y。
(5)平凡多值依赖和非平凡的多值依赖
※若X→→Y,而Z=Ф,即Z为空,则称X→→Y为平凡的多值依赖。
※否则称X→→Y为非平凡的多值依赖。
(6)按照语义对于W的每一个值Wi,S有一个完整的集合与之对应而不问C取何值。所以W→→S。
(7)多值依赖的性质
※多值依赖具有对称性。
即若X→→Y,则X→→Z,其中Z=U-X-Y
多值依赖的对称性可以用完全二分图直观地表示出来。
※多值依赖具有传递性。
即若X→→Y,Y→→Z, 则 X→→Z -Y。(3)函数依赖是多值依赖的特殊情况。
即若X→Y,则 X→→Y。
※若X→→Y,X→→Z,则X→→YZ。
※若X→→Y,X→→Z,则X→→Y∩Z。
※若X→→Y,X→→Z,则X→→Y-Z,X→→Z -Y。
6.2.8 4NF
(1)定义6.10
关系模式R∈1NF,如果对于R的每个非平凡多值依赖X→→Y(Y ⊈ X),X都含有码,则R∈4NF。
(2)不允许有非平凡且非函数依赖的多值依赖。
(3)允许的非平凡多值依赖实际上是函数依赖。
6.2.9 规范化小结
(1)在关系数据库中,对关系模式的基本要求是满足第一范式。
(2)规范化程度过低的关系不一定能够很好地描述现实世界
※可能存在插入异常、删除异常、修改复杂、数据冗余等问题
※解决方法就是对其进行规范化,转换成高级范式。
(3)一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式集合,这种过程就叫关系模式的规范化。
(4)关系数据库的规范化理论是数据库逻辑设计的工具。
规范化小结
(1)不能说规范化程度越高的关系模式就越好。
※ 必须对现实世界的实际情况和用户应用需求作进一步分析,确定一个合适的、能够反映现实世界的模式。
※上面的规范化步骤可以在其中任何一步终止。
6.3 数据依赖的公理系统
(1)定义6.11
对于满足一组函数依赖F的关系模式 R ,其任何一个关系r,若函数依赖X→Y都成立(即r中任意两元组t、s,若t[X]=s[X],则 t[Y]=s[Y]),则称F逻辑蕴涵X →Y。
(2)Armstrong公理系统
※一套推理规则,是模式分解算法的理论基础
※用途
求给定关系模式的码
从一组函数依赖求得蕴涵的函数依赖
(3)定义6.12 在关系模式R中为F所逻辑蕴涵的函数依赖的全体叫作F的闭包,记为F +。
(4)定义6.13 设F为属性集U上的一组函数依赖,X、Y ÍU, XF+={ A|X→A能由F根据Armstrong公理导出},XF+称为属性集X关于函数依赖集F的闭包。
(5)有效性与完备性的含义
有效性:由F 出发根据Armstrong公理推导出来的每一个函数依赖一定在F +中
完备性:F +中的每一个函数依赖,必定可以由F出发根据Armstrong公理推导出来
(6)定义6.14
如果G+=F+,就说函数依赖集F覆盖G(F是G的覆盖,或G是F的覆盖),或F与G等价。
//两个函数依赖集等价是指它们的闭包等价
(7)定义6.15
如果函数依赖集F满足下列条件,则称F为一个极小函数依赖集,亦称为最小依赖集或最小覆盖。
单属性化: F中任一函数依赖的右部仅含有一个属性。
无冗余化: F中不存在这样的函数依赖X→A, 使得F与F-{X→A}等价。
既约化: F中不存在这样的函数依赖X→A, X有真子集Z使得F-{X→A}∪{Z→A}与F等价。
(8)定理6.3
每一个函数依赖集F均等价于一个极小函数依赖集Fm。此Fm称为F的最小依赖集。
6.4 模式的分解
1、把低一级的关系模式分解为若干个高一级的关系模式的方法不是唯一的
2、只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义
3、三种模式分解等价的定义:
分解具有无损连接性
分解要保持函数依赖
分解既要保持函数依赖,又要具有无损连接性
(1)具有无损连接性的模式分解
※关系模式R的一个分解 ρ={ R1
若R与R1、R2、…、Rn自然连接的结果相等,则称关系模式R的这个分解ρ具有无损连接性(Lossless join)
※具有无损连接性的分解保证不丢失信息
※无损连接性不一定能解决插入异常、删除异常、修改复杂、数据冗余等问题
(2)保持函数依赖的模式分解
※设关系模式R被分解为若干个关系模式
R1
(其中U=U1∪U2∪…∪Un,且不存在Ui Í Uj,Fi为F在Ui上的投影),若F所逻辑蕴含的函数依赖一定也由分解得到的某个关系模式中的函数依赖Fi所逻辑蕴含,则称关系模式R的这个分解是保持函数依赖的(Preserve dependency)
※如果一个分解具有无损连接性,则它能够保证不丢失信息
※如果一个分解保持了函数依赖,则它可以减轻或解决各种异常情况
※分解具有无损连接性和分解保持函数依赖是两个互相独立的标准。具有无损连接性的分解不一定能够保持函数依赖;同样,保持函数依赖的分解也不一定具有无损连接性。
分解算法
算法6.2 判别一个分解的无损连接性
算法6.3(合成法)转换为3NF的保持函数依赖的分解。
算法6.4 转换为3NF既有无损连接性又保持函数依赖的分解
算法6.5 (分解法)转换为BCNF的无损连接分解
算法6.6 达到4NF的具有无损连接性的分解
※若要求分解具有无损连接性,那么模式分解一定能够达到4NF。
※若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF。
※若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF。
结论:若要求分解保持函数依赖,那么分解后的模式总可以达到3NF,但不一定能达到BCNF。
6.5小结
1、若要求分解具有无损连接性,那么模式分解一定能够达到4NF
2、若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能够达到BCNF
3、若要求分解既具有无损连接性,又保持函数依赖,则模式分解一定能够达到3NF,但不一定能够达到BCNF
4、规范化理论为数据库设计提供了理论的指南和工具
※也仅仅是指南和工具
5、并不是规范化程度越高,模式就越好
※ 必须结合应用环境和现实世界的具体情况合理地选择数据库模式