第六章、关系数据理论
6.1、问题的提出
1、关系模式的表示
1、是由五部分组成,是一个五元组R(U,D,DOM,F)
2、R是符号化的元组语义
3、U为一组属性
4、D为属性组U中的属性所来自的域
5、DOM为属性
6、F为属性组U上的一组数据依赖
2、说明
1、由于D、DOM与设计模式关系不大,本章节把关系模型看作一个三元组R<U,F>
2、当U上的一个关系(表格)r满足F时,r是关系模式R<U,f>的一个关系
3、作为二维表,关系要符合一个最基本的条件:每个分量必须是不可分开的数据项(就相当于excel表不能合并单元格、拆分单元格),满足该关系模式就属于第一范式(1NF)
2、数据依赖
1、内容
1是一个关系内部属性与属性之间的一种约束关系,是通过属性间值的相等与否体现出来的数据间相互联系
2、主要类型
1、函数依赖:FD(例如y=f(x)))
2、多值依赖:MVD
3、函数依赖的体现
1、例子1

4、数据依赖存在的问题
1、数据冗余
1、浪费大量存储空间,每个系主任反复出现
2、更新异常
1、数据冗余,更新数据时,维护数据完整性代价大,修改了其中一个有关的数据去,就必须更改与学生有关的那个所有元组,否则不一致会异常。
3、插入异常
1、如果一列刚成立,没有与之依赖的数据作为依赖,就会出现异常
4、删除异常
1、如果要删除一个系的所有学生,学生和系是由关联主码的,系和系主任也要删除,不然删除不了
5、说明
1、Student关系模式,不是一个好的模式。好的模式不会发生以上依赖的问题
2、存在以上问题,就是因为存在模式中的某些数据依赖引起的
3、解决方法是用规范化改造关系模式来解决,其中不适合的数据依赖
5、函数依赖的解决方法
1、把单一的模式分成三个关系模式
2、关系如下

3、这三个模式都不会发生插入异常,删除异常的问题,数据冗余也可以得到控制
4、就是从E-R图开始,就不能把所有数据全部弄成一个表。像用户表中的数据和产品表中的数据,就不要全部放在一个表。反正会出现以上问题
6.2、规范化
6.2.1、函数依赖
1、定义
1、定义一
1、设R(U)是属性集U上的关系模式,X、Y是U的子集。对于R(U)的任意一个可能的关系r,r中不可能存在两个元组以上的属性值相对,而在Y上的属性值不等。称为“X函数确定Y"、或者”Y函数依赖于X"。记作X->Y(就是相当于两行中的,一个唯一id只能对应一个名字,不能出现两个名字,这个就是依赖)
2、有主码或关键字关系:肯定有函数依赖
2、定义二
3、在R(U)中,如果X->Y,并且X中的任何一个真子集都推不出Y(必须要全部X的真子集才能推出Y),则称为Y对X完全依赖关系,
记作:

①、如果X->Y,但Y不完全函数依赖于X(就是只要X中有一个或几个和Y有依赖,就不是完全函数依赖),则称为Y对X的部分函数依赖
记作:

3、定义三

1、就是说X能推出Y,Y不能推出X,但是Y可以推出Z。所以Z对X传递函数依赖
2、如果X能推出Y,Y也能推出X,那么Z直接依赖于X,就不是传递函数了
3、例子

2、一些术语和记号
1、X->Y,但是Y不包含X,叫做:非平凡的函数依赖(例如:应该关系R(id,sex),关系T中(grade),id->grade,就是非平凡的函数依赖)
2、X->Y,但是Y包含X,叫做:平凡的函数依赖(例如:应该关系R(id,sex,grade),id->grade,就是平凡的函数依赖)
3、对于任意模式,平凡函数依赖都是必然成立的。(本章没有条件,默认就是非平凡函数依赖)
4、若X->Y,则X称为这个函数依赖的决定属性组,也称为决定因素
5、如果X->Y、并且Y->X,则称为X<->Y(例如X和Y相互都能推出来)
6、若Y不函数依赖于X,则记为X-≯Y(X推不出Y,Y不是X的依赖)
6.2.2、码
1、定义四
1、设K为R<U,F>中的属性,或属性组合(一列或多列)。如果U是K的完全依赖,则称R是一个候选码。
2、只要一个关系中,一个属性能唯一确定一个值或一行,就都叫候选码
3、超码:U部分函数依赖K,那K就是超码(主码属性再加上其他属性)
4、候选码是最小的超码,就是K的任意一个真子集都不是候选码
5、如果关系R中有多个候选码,其中一个来作为主码
2、主属性与非主属性
1、主属性
1、包含在任何一个候选码中的属性
2、非主属性
1、不包含在任何码中的属性
3、全码
1、整个属性组是码,称为全码
2、就是所有码都要确定才能知道唯一的一条记录
2、例子

3、定义五
1、关系模式R中属性或属性组X并非R的码(可能是主属性,也可能是非主属性),但是X是另一个关系模式的码,则称为X是R的外部码,也叫外码
2、例子

3、主码与外部码一起提供了表示关系间联系的手段
6.2.3、范式
1、定义
1、范式是符合某一种级别的关系模式的集合,关系数据库中的关系必须满足一定的要求,满足不同程度要求为不同范式
2、可以理解为规则
2、分类

3、各种范式之间存在联系
1、内容
1、5NF∈4NF∈3NF∈2NF∈1NF
2、图示

3、规范化
①指一个低一级范式的关系模式,通过模仿分解转换为若干个高一级范式的关系模式集合的过程
6.2.4、1NF
1、一个关系中,不可再分隔的独立的单元格数据就是第一范式
6.2.5、2NF
1、定义六
1、若关系模式R∈1NF(R满足第一范式要求)、并且每一个非主属性都完全函数依赖于任何一个候选码(就是一个候选码就能推出非主属性的值),则R∈2NF
2、例子

3、发现有部分不是完全依赖关系(图示:)

4、说明
①虚线表示部分函数依赖
②飞主属性Sdept、Sloc并不完全依赖于码
③关系模式S-L-C不属于2NF
2、不属于第二范式,就会出现问题
1、插入异常
1、插入一个新生,但该新生没有选课,就没有Cno,由于插入元组(行)必须有主码值,所以就插入失败
2、删除异常
1、如果S4,选了C3这门课,现在不需要了,删除C3,就会把元组(整行)删除,其他信息也被删除了
3、修改复杂
1、一个学生选了10门课,会有10条记录,所以会比较麻烦和复杂
3、问题原因
1、两个非主属性,Sdept/Sloc不是完全函数依赖
4、解决方法
1、用投影分解把关系模式S-L-C分解成两个关系模式
2、就将Sdept、Sloc分离出来单独建立关系
3、SC(Sno,Cno,Grade)图

4、S-L(Sno,Sdept,Sloc)图

5、SC的码为(Sno,Cno),SL的吗为Sno,这样就让非主属性对码都是完全函数依赖了
6.2.6、3NF
1、定义七
1、关系模式R<U,F>∈1NF,若R中不存在这样的码X、属性组Y及非主属性Z(Y∉Z),使得X->Y,Y->Z,成立Y不依赖X
2、就是不能有函数的传递,就是第三范式
3、例子

6.2.7、BCNF
1、是由Boyce和Codd提出,比3NF更进一步, 通常认为是第三范式的修正,也叫扩充的第三范式
1、定义八
1、设关系模式R<U,F>∈1NF,若X推出Y,Y不属于X时,X必须有个主码,则表示R<U,F>∈BCNF
2、换句话说,就是在关系模式R<U,F>中,如果每一个决定属性集都包含候选码,则R属于BCNF
2、BCNF的关系模式具有的性质
1、所有非主属性都完全函数依赖于每个候选码
2、所有属性都完全函数依赖(P)于每个不包含它的候选码
3、没有任何属性完全依赖于非码的任何一组属性
4、核心要求就是必须有一个主属性,可以退出非主属性、候选码、和主属性
5、如果一个关系数据库中的所有关系模式都属于BCNF,那么在函数依赖范畴内,已经实现了模式的彻底分解,达到最高规范化程度,消除了插入异常和删除异常
6、例子

7、例子

1、说明
1、对于不是BCNF关系模式,存在不合理的地方。可以将非BCNF模式分解为BCNF
2、3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的测度
3、就是把BCNF当成一个尺子,作为是否实现彻底分离,消除插入、删除的依赖
4、3NF不完全分离,所以需要BCNF来对3NF进行完全分离(主要是X中的主码也分离)
6.2.8、多值依赖
1、内容
1、给出一个值,可以推出多个值
2、图例

2、存在问题
1、数据冗余大:有多少名任课教师,参考书就要存多少次
2、增加操作复杂:当一个课程增加一本书,改课程有多少参照书,就必须插入多少元组
3、删除操作复杂:某一门课要去掉一本参考书,改课程有多少名老师,就必须删除多少个元组
4、修改操作复杂:某一门课要修改一本参考书,改课有多少老师,就必须修改多少个元组
3、定义九
1、设R(U)是属性集U上的一个关系模式,X、Y、Z是U的子集,并且Z=U-X-Y。关系模式R(U)中多值依赖X推出Y成立,当且仅当对R(U)的任一关系r,给定的一对(x,z)值,有一组Y的值,这组值仅仅决定于x值域z值无关
2、就是说假设一个课程有多个老师在,一个课程又有多本参考书,所以老师多值依赖课程,参考书多值依赖课程
1、多值依赖另一个等价依赖定义

1、就是说如【多值依赖图示中】选出两行元素,把他们的Y进行交换,得到的新行数据,依然是表中其中一行的数据就是,多值依赖的另一个等价定义
2、平凡多值依赖
1、若X多值依赖于Y,且Z是空的,那么X->->Y为平凡的多值依赖
4、多值依赖的性质
1、多值依赖具有对称性:X->->Y,则X->->Z,其中Z=U-X-Y
2、多值依赖具有传递性:若Y多值依赖与X,Z多值依赖于Y,则Z-Y就多值依赖于X
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(在Y中不在Z中的值),X多值推出Z-Y(在Z中不在Y中的值)
5、多值依赖和函数依赖的区别
1、多值依赖的有效性和属性集的范围有关
1、

2、

6.2.9、4NF
1、定义十
1、关系模式R<U,F>∈1NF,对于R的每个非平凡依赖值X-->Y(X不属于Y),X都含有码,则R(U,F)∈4NF
1、说明
1、4NF是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。4NF所允许的是非平凡多值依赖实际是函数依赖
2、如果一个关系是4NF,那一定是BCNF
3、

6.2.10、规范化小结
1、内容
1、在关系数据库中,对关系模式的基本要求是满足第一范式
2、规范化程度过低的关系,不一定很好描述现实世界,可能存在插入、删除、异常、修改复杂、数据冗余等问题;要解决只能对其关系进行规范化,转换为高级范式
3、一个低级的范式关系模式,通过模式可以分解转换成若干个高一级的范式,这个就是关系模式的规范化
4、关系数据库的规范化理论是数据库逻辑设计的工具
5、规范化的基本思想
1、逐渐消除数据依赖化总不合适的部分,进行分离
2、采用“一事一地”的模式设计原则
3、规范化实质上是概念的单一化
6、不能说规范化程度越高关系模式就越好;必须根据实际现实世界和用户需求进一步指定合适的范式
2、范式化的过程
1、基本步骤图

6.3、数据依赖的公理系统
1、定义十一
1、内容

2、Armstrong公理系统
1、是一条推理规则,是模式分解算法的理论基础
2、主要用于求给定关系模式的码,从一组函数依赖求得蕴含的函数依赖
1、推理规则
设U属于属性集总体,F是U上的一组函数依赖,于是有关系模式R<U,F>
1、A1自反率
1、若Y∈等于X,X∈等于 U,则X推出Y为F所蕴含
2、注意:自反律所得到的函数依赖均是平凡的函数依赖,自反律的使用并不依赖于F
2、A2增广律
1、若X推出Y为F所蕴含(所蕴含的意思是,F可以推出X-->Y),且Z属于等于U,则XZ可以推出YZ为F所蕴含
3、A3传递律
1、X推出Y,Y推出Z为F所蕴含,则X推出Z为F所蕴含
2、证明以上规则的正确性
1、

3、根据以上规则能推出
1、合并规则:X推出Y,X推出Z,有X推出YZ
2、伪传递规则:X推出Y,WY推出Z,XW推出Z,XW推出Z
3、分解规则:有X推出Y及Z∈等于Y,则X推出Z
4、根据合并规则和分解规则,可得
1、引理:X推出Ak,成立充分必要条件条件是X推出Ai成立(i=1,2,3……k)
3、定义十二
1、内容
1、在关系模式R<U,F>中为F所逻辑蕴含的函数依赖的全体叫作F的闭包,记作F+
2、说明
1、自反律、传递律、增广律成为Armstrong公理系统
2、Armstrong公理系统具有有效性和完备性
3、有效性:是指F触发根据Armstrong公理系统推导出的每一个函数依赖一定在F+中
4、完备性:F+中的每一个函数依赖,必定可以由F触发根据Armstrong公理系统推导出来
4、定义十三
