关系数据理论_第1页
关系数据理论_第2页
关系数据理论_第3页
关系数据理论_第4页
关系数据理论_第5页
已阅读5页,还剩78页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

关系数据理论第一页,共八十三页,2022年,8月28日本章概要前面已经讲述了关系数据库、关系模型的基本概念以及关系数据库的标准语言。如何使用关系模型设计关系数据库,也就是面对一个现实问题,如何选择一个比较好的关系模式的集合,每个关系又应该由哪些属性组成。这属于数据库设计的问题,确切地讲是数据库逻辑设计的问题,有关数据库设计的全过程将在第7章详细讨论。本章讲述关系数据库规范化理论,这是数据库逻辑设计的理论依据。要求了解规范化理论的研究动机及其在数据库设计中的作用,掌握函数依赖的有关概念,第一范式、第二范式、第三范式和BC范式的定义,重点掌握并能够灵活运用关系模式规范化的方法和关系模式分解的方法,这也是本章的难点。

第二页,共八十三页,2022年,8月28日6.1规范化问题的提出6.1.1规范化理论的主要内容关系数据库的规范化理论最早是由关系数据库的创始人提出的,后经许多专家学者对关系数据库理论作了深入的研究和发展,形成了一整套有关关系数据库设计的理论。第三页,共八十三页,2022年,8月28日6.1规范化问题的提出如何设计一个适合的关系数据库系统,关键是关系数据库模式的设计,一个好的关系数据库模式应该包括多少关系模式,而每一个关系模式又应该包括哪些属性,又如何将这些相互关联的关系模式组建一个适合的关系模型,这些工作决定了到整个系统运行的效率,也是系统成败的关键所在,所以必须在关系数据库的规范化理论的指导下逐步完成。

关系数据库的规范化理论主要包括三个方面的内容:函数信赖范式(NormalForm)模式设计其中,函数信赖起着核心的作用,是模式分解和模式设计的基础,范式是模式分解的标准。第四页,共八十三页,2022年,8月28日6.1.2关系模式的存储异常问题数据库的逻辑设计为什么要遵循一定的规范化理论?什么是好的关系模式?某些不好的关系模式可能导致哪些问题?下面通过例子进行分析:第五页,共八十三页,2022年,8月28日6.1.2关系模式的存储异常问题例如,要求设计教学管理数据库,其关系模式SCD如下:

SCD(SNO,SNAME,AGE,DEPT,MNAME,CNO,GRADE)

其中,SNO表示学生学号,SNAME表示学生姓名,AGE表示学生年龄,DEPT表示学生所在的系别,MNAME表示系主任姓名,CNO表示课程号,GRADE表示成绩。

根据实际情况,这些数据有如下语义规定:1.一个系有若干个学生,但一个学生只属于一个系;2.一个系只有一名系主任,但一个系主任可以同时兼几个系的系主任;3.一个学生可以选修多门功课,每门课程可有若干学生选修;4.每个学生学习课程有一个成绩。在此关系模式中填入一部分具体的数据,则可得到SCD关系模式的实例,即一个教学管理数据库,如图6.1所示。第六页,共八十三页,2022年,8月28日6.1.2关系模式的存储异常问题图6.1关系SCDSNOSNAMEAGEDEPTMNAMECNOGRADES1赵亦17计算机刘伟C190S1赵亦17计算机刘伟C285S2钱尔18信息王平C557S2钱尔18信息王平C680S2钱尔18信息王平C7

70S2钱尔18信息王平C170S3孙珊20信息王平C10S3孙珊20信息王平C270S3孙珊20信息王平C485S4李思男自动化刘伟C193第七页,共八十三页,2022年,8月28日根据上述的语义规定,并分析以上关系中的数据,我们可以看出:(SNO,CNO)属性的组合能唯一标识一个元组,所以(SNO,CNO)是该关系模式的主关系键。但在进行数据库的操作时,会出现以下几方面的问题。1.数据冗余。每个系名和系主任的名字存储的次数等于该系的学生人数乘以每个学生选修的课程门数,同时学生的姓名、年龄也都要重复存储多次,数据的冗余度很大,浪费了存储空间。2.插入异常。如果某个新系没有招生,尚无学生时,则系名和系主任的信息无法插入到数据库中。因为在这个关系模式中,(SNO,CNO)是主关系键。根据关系的实体完整性约束,主关系键的值不能为空,而这时没有学生,SNO和CNO均无值,因此不能进行插入操作。另外,当某个学生尚未选课,即CNO未知,实体完整性约束还规定,主关系键的值不能部分为空,同样不能进行插入操作。第八页,共八十三页,2022年,8月28日6.1.2关系模式的存储异常问题3.删除异常某系学生全部毕业而没有招生时,删除全部学生的记录则系名、系主任也随之删除,而这个系依然存在,在数据库中却无法找到该系的信息。另外,如果某个学生不再选修C1课程,本应该只删去C1,但C1是主关系键的一部分,为保证实体完整性,必须将整个元组一起删掉,这样,有关该学生的其它信息也随之丢失。4.更新异常如果学生改名,则该学生的所有记录都要逐一修改SNAME;又如某系更换系主任,则属于该系的学生记录都要修改MNAME的内容,稍有不慎,就有可能漏改某些记录,这就会造成数据的不一致性,破坏了数据的完整性。第九页,共八十三页,2022年,8月28日6.1.2关系模式的存储异常问题由于存在以上问题,我们说,SCD是一个不好的关系模式。产生上述问题的原因,直观地说,是因为关系中“包罗万象”,内容太杂了。那么,怎样才能得到一个好的关系模式呢?我们把关系模式SCD分解为下面三个结构简单的关系模式,如图6.2所示。学生关系S(SNO,SNAME,AGE,DEPT)选课关系SC(SNO,CNO,GRADE)系关系D(DEPT,MNAME)第十页,共八十三页,2022年,8月28日SSCSNOSNAMEAGEDEPT

SNOCNOGRADES1赵亦17计算机

S1C190S2钱尔18信息

S1C285S3孙珊20信息

S2C557S4李思21自动化

S2C680

S2C7

70D

S2C170DEPTMNAME

S3C10计算机刘伟

S3C270信息王平

S3C485自动化刘伟

S4C193图6.2分解后的关系模式

第十一页,共八十三页,2022年,8月28日6.1.2关系模式的存储异常问题在以上三个关系模式中,实现了信息的某种程度的分离,S中存储学生基本信息,与所选课程及系主任无关;D中存储系的有关信息,与学生无关;SC中存储学生选课的信息,而与学生的详细信息及系的有关信息无关。与SCD相比,分解为三个关系模式后,数据的冗余度明显降低。当新插入一个系时,只要在关系D中添加一条记录。当某个学生尚未选课,只要在关系S中添加一条学生记录,而与选课关系无关,这就避免了插入异常。当一个系的学生全部毕业时,只需在S中删除该系的全部学生记录,而关系D中有关该系的信息仍然保留,从而不会引起删除异常。同时,由于数据冗余度的降低,数据没有重复存储,也不会引起更新异常。

第十二页,共八十三页,2022年,8月28日6.1.2关系模式的存储异常问题

经过上述分析,我们说分解后的关系模式是一个好的关系数据库模式。从而得出结论,一个好的关系模式应该具备以下四个条件:1.尽可能少的数据冗余。2.没有插入异常。3.没有删除异常。4.没有更新异常。

第十三页,共八十三页,2022年,8月28日6.1.2关系模式的存储异常问题但要注意,一个好的关系模式并不是在任何情况下都是最优的,比如查询某个学生选修课程名及所在系的系主任时,要通过连接,而连接所需要的系统开销非常大,因此要以实际设计的目标出发进行设计如何按照一定的规范设计关系模式,将结构复杂的关系分解成结构简单的关系,从而把不好的关系数据库模式转变为好的关系数据库模式,这就是关系的规范化。规范化又可以根据不同的要求而分成若干级别。我们要设计的关系模式中的各属性是相互依赖、相互制约的,这样才构成了一个结构严谨的整体。因此在设计关模式时,必须从语义上分析这些依赖关系。数据库模式的好坏和关系中各属性间的依赖关系有关,因此,我们先讨论属性间的依赖关系,然后再讨论关系规范化理论。

第十四页,共八十三页,2022年,8月28日6.2函数依赖函数依赖的定义及性质关系模式中的各属性之间相互依赖、相互制约的联系称为数据依赖。数据依赖一般分为函数依赖、多值依赖和连接依赖。其中,函数依赖是最重要的数据依赖。函数依赖(FunctionalDependency)是关系模式中属性之间的一种逻辑依赖关系。例如在上一节介绍的关系模式SCD中,SNO与SNAME、AGE、DEPT之间都有一种依赖关系。由于一个SNO只对应一个学生,而一个学生只能属于一个系,所以当SNO的值确定之后,SNAME,AGE,DEPT的值也随之被唯一的确定了。这类似于变量之间的单值函数关系。设单值函数Y=F(X),自变量X的值可以决定一个唯一的函数值Y。在这里,我们说SNO函数决定(SNAME,AGE,DEPT),或者说(SNAME,AGE,DEPT)函数依赖于SNO。第十五页,共八十三页,2022年,8月28日6.2函数依赖函数依赖的定义定义4.1设关系模式R(U,F),U是属性全集,F是U上的函数依赖集,X和Y是U的子集,如果对于R(U)的任意一个可能的关系r,对于X的每一个具体值,Y都有唯一的具体值与之对应,则称X函数决定Y,或Y函数依赖于X,记作X→Y。我们称X为决定因素,Y为依赖因素。当Y不函数依赖于X时,记作:XY。当X→Y且Y→X时,则记作:XY。对于关系模式SCDU={SNO,SNAME,AGE,DEPT,MNAME,CNO,GRADE}F={SNO→SNAME,SNO→AGE,SNO→DEPT}一个SNO有多个GRADE的值与其对应,因此GRADE不能唯一地确定,即GRADE不能函数依赖于SNO,所以有:SNOGRADE。但是GRADE可以被(SNO,CNO)唯一地确定。所以可表示为:(SNO,CNO)→GRADE。

第十六页,共八十三页,2022年,8月28日6.2函数依赖有关函数依赖的几点说明:1.平凡的函数依赖与非平凡的函数依赖。当属性集Y是属性集X的子集时,则必然存在着函数依赖X→Y,这种类型的函数依赖称为平凡的函数依赖。如果Y不是X的子集,则称X→Y为非平凡的函数依赖。若不特别声明,我们讨论的都是非平凡的函数依赖。2.函数依赖是语义范畴的概念。我们只能根据语义来确定一个函数依赖,而不能按照其形式化定义来证明一个函数依赖是否成立。 例如:对于关系模式S,当学生不存在重名的情况下,可以得到:SNAME→AGE,SNAME→DEPT,这种函数依赖关系,必须是在没有重名的学生条件下才成立的,否则就不存在函数依赖了。所以函数依赖反映了一种语义完整性约束。

第十七页,共八十三页,2022年,8月28日6.2函数依赖3.函数依赖与属性之间的联系类型有关。(1)在一个关系模式中,如果属性X与Y有1:1联系时,则存在函数依赖X→Y,Y→X,即XY。

例如,当学生无重名时,SNOSNAME。(2)如果属性Y与X有1:m的联系时,则只存在函数依赖X→Y。

例如,AGE,DEPT与SNO之间均为1:m联系,所以有SNO→AGE,

SNO→DEPT。(3)如果属性X与Y有m:n的联系时,则X与Y之间不存在任何函数依赖关系。

例如,一个学生可以选修多门课程,一门课程又可以为多个学生选修,所以SNO与CNO之间不存在函数依赖关系。由于函数依赖与属性之间的联系类型有关,所以在确定属性间的函数依赖关系时,可以从分析属性间的联系类型入手,便可确定属性间的函数依赖。

第十八页,共八十三页,2022年,8月28日6.2函数依赖4.函数依赖关系的存在与时间无关。因为函数依赖是指关系中的所有元组应该满足的约束条件,而不是指关系中某个或某些元组所满足的约束条件。当关系中的元组增加、删除或更新后都不能破坏这种函数依赖。因此,必须根据语义来确定属性之间的函数依赖,而不能单凭某一时刻关系中的实际数据值来判断。例如,对于关系模式S,假设没有给出无重名的学生这种语义规定,则即使当前关系中没有重名的记录,也只能存在函数依赖SNO→SNAME,而不能存在函数依赖SNAME→SNO,因为如果新增加一个重名的学生,函数依赖SNAME→SNO必然不成立。所以函数依赖关系的存在与时间无关,而只与数据之间的语义规定有关。

第十九页,共八十三页,2022年,8月28日6.2.1.2函数依赖的基本性质1.投影性。根据平凡的函数依赖的定义可知,一组属性函数决定它的所有子集。例如,在关系SCD中,(SNO,CNO)→SNO和(SNO,CNO)→CNO。2.扩张性。若X→Y且W→Z,则(X,W)→(Y,Z)。例如,SNO→(SNAME,AGE),DEPT→MNAME,则有(SNO,DEPT)→(SNAME,AGE,MNAME)。3.合并性。若X→Y且X→Z则必有X→(Y,Z)。例如,在关系SCD中,SNO→(SNAME,AGE),SNO→(DEPT,MNAME),则有SNO→(SNAME,AGE,DEPT,MNAME)。4.分解性。若X→(Y,Z),则X→Y且X→Z。很显然,分解性为合并性的逆过程。由合并性和分解性,很容易得到以下事实:X→A1,A2,…,An成立的充分必要条件是X→Ai(i=1,2,…,n)成立。

第二十页,共八十三页,2022年,8月28日6.2.2完全函数依赖与部分函数依赖定义6.2

设关系模式R(U),U是属性全集,X和Y是U的子集,如果X→Y,并且对于X的任何一个真子集X′,都有X′Y,则称Y对X完全函数依赖(FullFunctionalDependency),记作XY。如果对X的某个真子集X′,有X′→Y,则称Y对X部分函数依赖(PartialFunctionalDependency),记作XY。例如,在关系模式SCD中,因为SNOGRADE,且CNOGRADE,所以有:(SNO,CNO)GRADE。 而SNO→AGE,所以(SNO,CNO)AGE。由定义6.2可知:只有当决定因素是组合属性时,讨论部分函数依赖才有意。当决定因素是单属性时,只能是完全函数依赖。例如,在关系模式S(SNO,SNAME,AGE,DEPT),决定因素为单属性SNO,有SNO→(SNAME,AGE,DEPT),不存在部分函数依赖。

第二十一页,共八十三页,2022年,8月28日6.2.3传递函数依赖定义6.3

设有关系模式R(U),U是属性全集,X,Y,Z是U的子集,若X→Y,但YX,而Y→Z(YX,ZY),则称Z对X传递函数依赖(TransitiveFunctionalDependency),记作:X

Z。如果Y→X,则XY,这时称Z对X直接函数依赖,而不是传递函数依赖。例如,在关系模式SCD中,SNO→DEPTN,但DEPTNSNO,而DEPTN→MNAME,则有SNOMNAME。当表中有IDNO列的情况下,有SNO→IDNO,IDNO→SNO,SNOIDNO,IDNO→DEPTN,这时DEPTN对SNO是直接函数依赖,而不是传递函数依赖。

综上所述,函数依赖分为完全函数依赖、部分函数依赖和传递函数依赖三类,它们是规范化理论的依据和规范化程度的准则,下面我们将以介绍的这些概念为基础,进行数据库的规范设计。第二十二页,共八十三页,2022年,8月28日6.3范式

规范化的基本思想是消除关系模式中的数据冗余,消除数据依赖中的不合适的部分,解决数据插入、删除时发生异常现象。这就要求关系数据库设计出来的关系模式要满足一定的条件。我们把关系数据库的规范化过程中为不同程度的规范化要求设立的不同标准称为范式(NormalForm)。

由于规范化的程度不同,就产生了不同的范式。满足最基本规范化要求的关系模式叫第一范式,在第一范式中进一步满足一些要求为第二范式,以此类推就产生了第三范式等概念。每种范式都规定了一些限制约束条件。第二十三页,共八十三页,2022年,8月28日6.3范式范式的概念最早由提出。从1971年起,Codd相继提出了关系的三级规范化形式,即第一范式(1NF)、第二范式(2NF)、第三范式(3NF)。1974年,Codd和Boyce共同提出了一个新的范式的概念,即Boyce-Codd范式,简称BC范式。1976年Fagin提出了第四范式,后来又有人定义了第五范式。至此在关系数据库规范中建立了一个范式系列:1NF,2NF,3NF,BCNF,4NF,5NF,一级比一级有更严格的要求。各个范式之间的联系可以表示为:5NF4NFBCNF3NF2NF1NF如图6.3所示。

第二十四页,共八十三页,2022年,8月28日6.3范式图6.3各种范式之间的关系4NF5NFBCNF3NF2NF1NF规范与非规范关系第二十五页,共八十三页,2022年,8月28日6.3.1第一范式第一范式(FirstNormalForm)是最基本的规范形式,即关系中每个属性都是不可再分的简单项。定义6.4

如果关系模式R,其所有的属性均为简单属性,即每个属性都是不可再分的,则称R属于第一范式,简称1NF,记作R1NF。在第2章讨论关系的性质时,我们把满足这个条件的关系称为规范化关系。在关系数据库系统中只讨论规范化的关系,凡是非规范化的关系模式必须化成规范化的关系。每个规范化的关系都属于1NF,这也是它之所以称为“第一”的原因。第二十六页,共八十三页,2022年,8月28日6.3.1第一范式

不可“表中有表”。满足此条件的关系称为规范化关系,否则称为非规范化关系。例如,在下表中,籍贯含有省、市/县两项,出现了“表中有表”的现象,则为非规范化关系,而把籍贯分成省、市/县两列,则为规范化关系。例姓名籍贯

姓名省市/县省市/县

张强吉林长春

张强吉林长春王丽山西大同

王丽山西大同第二十七页,共八十三页,2022年,8月28日然而,一个关系模式仅仅属于第一范式是不适用的。在6.1节中给出的关系模式SCD属于第一范式,但其具有大量的数据冗余,具有插入异常、删除异常、更新异常等弊端。为什么会存在这种问题呢?让我们分析一下SCD中的函数依赖关系,它的关系键是(SNO,CNO)的属性组合,所以有:(SNO,CNO)GRADESNO→SNAME,(SNO,CNO)SNAMESNO→AGE,(SNO,CNO)AGESNO→DEPT,(SNO,CNO)DEPTSNOMNAME,(SNO,CNO)MNAME第二十八页,共八十三页,2022年,8月28日我们可以用函数信赖图表示以上函数依赖关系,如图6.4所示。

由此可见,在SCD中,既存在完全函数依赖,又存在部分函数依赖和传递函数依赖。这种情况往往在数据库中是不允许的,也正是由于关系中存在着复杂的函数依赖,才导致数据操作中出现了种弊端。克服这些弊端的方法是用投影运算将关系分解,去掉过于复杂的函数依赖关系,向更高一级的范式进行转换。SNAMEMNAMEGRADE图6.4SCD中的函数依赖关系SNOCNOPPftf第二十九页,共八十三页,2022年,8月28日关于键的定义关系的键:能唯一标识元组且不包括多余属性的属性集称为该关系的关系键。它具有唯一性(对于关系中任何两个元组其关系的键值是不同的)和最小性(组成关系键的属性集中任意一个属性都不能从属性集中去掉,否则将破坏唯一性。)候选键:当某关系中具有多个满足关系键特性的最小属性集,那么,我们把它们都称为该关系的候选键。主键:当一个关系中有多个候选键时从候选键中选择一个作为主键。一个关系只能有一个主键。主属性:包含在任何一个候选键中的属性叫主属性。非主属性:

不包含在任何一个候选键中的属性叫非主属性。第三十页,共八十三页,2022年,8月28日6.3.2第二范式6.3.2.1第二范式的定义定义6.5

如果关系模式R1NF,且每个非主属性都完全函数依赖于R的每个关系键,则称R属于第二范式(SecondNormalForm),简称2NF,记作R2NF。在关系模式SCD中,SNO,CNO为主属性,AGE,DEPT,SNAME,MNAME,GRADE均为非主属性,经上述分析,存在非主属性对关系键的部分函数依赖,所以SCD不属于2NF。而如图6.2所示的由SCD分解的三个关系模式S,D,SC,其中S的关系键为SNO,D的关系键为DEPT,都是单属性,不可能存在部分函数依赖。而对于SC,(SNO,CNO)GRADE。所以SCD分解后,消除了非主属性对关系键的部分函数依赖,S,D,SC均属于2NF。第三十一页,共八十三页,2022年,8月28日6.3.2第二范式全码的概念:给出的关系模式TCS(T,C,S),一个教师可以讲授多门课程,一门课程可以为多个教师讲授,同样一个学生可以选听多门课程,一门课程可以为多个学生选听,TCS(T,C,S)三个属性的组合是关系键,T,C,S都是主属性,而无非主属性,所以也就不可能存在非主属性对关系键的部分函数依赖,TCS2NF。经以上分析,可以得到两个结论:

1.从1NF关系中消除非主属性对关系键的部分函数依赖,则可得到2NF关系。

2.如果R的关系键为单属性,或R的全体属性均为主属性,则R2NF。第三十二页,共八十三页,2022年,8月28日6.3.2.22NF规范化

2NF规范化是指把1NF关系模式通过投影分解转换成2NF关系模式的集合。分解时遵循的基本原则就是“一事一地”,让一个关系只描述一个实体或者实体间的联系。如果多于一个实体或联系,则进行投影分解。下面以关系模式SCD为例,来说明2NF规范化的过程例6.1将SCD(SNO,SN,AGE,DEPT,MN,CNO,GRADE)规范到2NF。由SNO→SNAME,SNO→AGE,SNO→DEPT,(SNO,CNO)GRADE,可以判断,关系SCD至少描述了两个实体,一个为学生实体,属性有SNO、SNAME、AGE、DEPT、MNAME;另一个是学生与课程的联系(选课),属性有SNO、CNO和GRADE。根据分解的原则,我们可以将SCD分解成如下两个关系,如图6.5所示。第三十三页,共八十三页,2022年,8月28日SD(SNO,SNAME,AGE,DEPT,MNAME),描述学生实体;SC(SNO,CNO,GRADE),描述学生与课程的联系。SD

SNOSNAMEAGEDEPTMNAMES1赵亦17计算机刘伟S2钱尔18信息王平S3孙珊20信息王平S4李思21自动化刘伟SC

SNOCNOGRADES1C190S1C285S2C557S2C680S2C7

S2C170S3C10S3C270S3C485S4C193图6.5关系SD和SC第三十四页,共八十三页,2022年,8月28日6.3.2.22NF规范化对于分解后的两个关系SD和SC,主键分别为SNO和(SNO,CNO),非主属性对主键完全函数依赖。因此,SD2NF,SC2NF,而且前面已经讨论,SCD的这种分解没有丢失任何信息,具有无损连接性。分解后,SD和SC的函数依赖分别如图6.6和6.7所示。SNOSNAMESNOCNOGRADEAGEDEPTMNAME图6.6SD中的函数依赖关系图6.7SC中的函数依赖关系

第三十五页,共八十三页,2022年,8月28日6.3.2.22NF规范化

1NF的关系模式经过投影分解转换成2NF后,消除了一些数据冗余。分析图6.5中SD和SC中的数据,可以看出,它们存储的冗余度比关系模式SCD有了较大辐度的降低。学生的姓名、年龄不需要重复存储多次。这样便可在一定程度上避免数据更新所造成的数据不一致性的问题。由于把学生的基本信息与选课信息分开存储,则学生基本信息因没选课而不能插入的问题得到了解决,插入异常现象得到了部分改善。同样,如果某个学生不再选修C1课程,只在选课关系SC中删去该该学生选修C1的记录即可,而SD中有关该学生的其它信息不会受到任何影响,也解决了部分删除异常问题。因此可以说关系模式SD和SC在性能上比SCD有了显著提高。第三十六页,共八十三页,2022年,8月28日6.3.2.32NF的缺点

2NF的关系模式解决了1NF中存在的一些问题,2NF规范化的程度比1NF前进了一步,但2NF的关系模式在进行数据操作时,仍然存在着一些问题:1.数据冗余。每个系名和系主任的名字存储的次数等于该系的学生人数。2.插入异常。当一个新系没有招生时,有关该系的信息无法插入。3.删除异常。某系学生全部毕业而没有招生时,删除全部学生的记录也随之删除了该系的有关信息。4.更新异常。更换系主任时,仍需改动较多的学生记录。之所以存在这些问题,是由于在SCD中存在着非主属性对主键的传递依赖。分析SCD中的函数依赖关系,SNO→SNAME,SNO→AGE,SNO→DEPT,DEPT→MNAME,SNOMNAME,非主属性MNAME对主键SNO传递依赖。为此,对关系模式SCD还需进一步简化,消除这种传递依赖,得到3NF。第三十七页,共八十三页,2022年,8月28日6.3.3第三范式6.3.3.1第三范式的定义定义6.6

如果关系模式R2NF,且每个非主属性都不传递依赖于R的每个关系键,则称R属于第三范式(ThirdNormalForm),简称3NF,记作R3NF。第三范式具有如下性质:1.如果R3NF,则R也是2NF。2.如果R2NF,则R不一定是3NF。第三十八页,共八十三页,2022年,8月28日6.3.3.23NF规范化

3NF规范化是指把2NF关系模式通过投影分解转换成3NF关系模式的集合。和2NF的规范化时遵循的原则相同,即“一事一地”,让一个关系只描述一个实体或者实体间的联系。下面以2NF关系模式SD为例,来说明3NF规范化的过程。第三十九页,共八十三页,2022年,8月28日6.3.3.23NF规范化例6.2

将SD(SNO,SNAME,AGE,DEPT,MNAME)规范到3NF。分析SD的属性组成,可以判断,关系SD实际上描述了两个实体:

一个为学生实体,属性有SNO,SNAME,AGE,DEPT;

另一个是系的实体,其属性DEPT和MNAME。根据分解的原则,我们可以将SD分解成如下两个关系,如图6.8所示。

S(SNO,SNAME,AGE,DEPT),描述学生实体;

D(DEPT,MNAME),描述系的实体。第四十页,共八十三页,2022年,8月28日6.3.3.23NF规范化SDSNOSNAMEAGEDEPT

DEPTMNAMES1赵亦17计算机

计算机刘伟S2钱尔18信息

信息王平S3孙珊20信息

自动化刘伟S4李思21自动化

对于分解后的两个关系S和D,主键分别为SNO和DEPT,不存在非主属性对主键的传递函数依赖。因此,S3NF,D3NF。图6.8关系S和D

第四十一页,共八十三页,2022年,8月28日6.3.3.23NF规范化分解后,S和D的函数依赖分别如图6.9和6.10所示。SNOSNAMEDEPTAGEDEPTMNAME图6.9S中的函数依赖关系图图6.10D中的函数依赖关系图由以上两图可以看出,关系模式SD由2NF分解为3NF后,函数依赖关系变得更加简单,既没有非主属性对键的部分依赖,也没有非主属性对键的传递依赖,解决了2NF中存在的四个问题。第四十二页,共八十三页,2022年,8月28日6.3.3.23NF规范化1.数据冗余降低。系主任的名字存储的次数与该系的学生人数无关,只在关系D中存储一次。2.不存在插入异常。当一个新系没有学生时,该系的信息可以直接插入到关系D中,而与学生关系S无关。3.不存在删除异常。要删除某系的全部学生而仍然保留该系的有关信息时,可以只删除学生关系S中的相关学生记录,而不影响系关系D中的数据。4.不存在更新异常。更换系主任时,只需修改关系D中一个相应元组的MN属性值,从而不会出现数据的不一致现象。

SCD规范到3NF后,所存在的异常现象已经全部消失。但是,3NF只限制了非主属性对键的依赖关系,而没有限制主属性对键的依赖关系。如果发生了这种依赖,仍有可能存在数据冗余、插入异常、删除异常和修改异常。这时,则需对3NF进一步规范化,消除主属性对键的依赖关系,为了解决这种问题,Boyce与Codd共同提出了一个新范式的定义,这就是Boyce-Codd范式,通常简称BCNF或BC范式。它弥补了3NF的不足。第四十三页,共八十三页,2022年,8月28日6.3.4BC范式6.3.4.1BC范式的定义定义6.7

如果关系模式R1NF,且所有的函数依赖X→Y(YX),决定因素X都包含了R的一个候选键,则称R属于BC范式(Boyce-CoddNormalForm),记作RBCNF。BCNF具有如下性质:1.满足BCNF的关系将消除任何属性(主属性或非主属性)对键的部分函数依赖和传递函数依赖。也就是说,如果RBCNF,则R也是3NF。证明:采用反证法。设R不是3NF。则必然存在如下条件的函数依赖,X→Y(YX),Y→Z,其中X是键属性,Y是任意属性组,Z是非主属性,ZY,这样Y→Z函数依赖的决定因素Y不包含候选键,这与BCNF范式的定义相矛盾,所以如果RBCNF,则R也是3NF。第四十四页,共八十三页,2022年,8月28日6.3.4BC范式2.如果R3NF,则R不一定是BCNF。现举例说明。设关系模式SNC(SNO,IDNO,CN0,GRADE),其中SNO代表学号,IDNO代表学生的身份证号,CNO代表课程号,GRADE代表成绩。可以判定,SNC有两个候选键(SNO,CNO)和(IDNO,CNO),其函数依赖如下:

SNOIDNO

(SNO,CNO)→GRADE

(IDNO,CNO)→GRADE。唯一的非主属性GRADE对键不存在部分函数依赖,也不存在传递函数依赖。所以SNC3NF。但是,因为SNOIDNO,即决定因素SNO或IDNO不包含候选键,从另一个角度说,存在着主属性对键的部分函数依赖:(SNO,CNO)IDNO,(IDNO,CNO)

SNO,所以SNC不是BCNF。正是存在着这种主属性对键的部分函数依赖关系,造成了关系SNC中存在着较大的数据冗余,学生身份证号的存储次数等于该生所选的课程数。从而会引起修改异常。比如,当要更改某个学生的身份证号时,则必须搜索出现该身份证号的每个学生记录,并对其姓名逐一修改,这样容易造成数据的不一致问题。解决这一问题的办法仍然是通过投影分解进一步提高SNC的范式等级,将SNC规范到BCNF。

第四十五页,共八十三页,2022年,8月28日6.3.4.2BCNF规范化BCNF规范化是指把3NF关系模式通过投影分解转换成BCNF关系模式的集合。下面以3NF关系模式SNC为例,来说明BCNF规范化的过程。例6.3

将SNC(SNO,IDNO,CNO,GRADE)规范到BCNF。分析SNC数据冗余的原因,是因为在这一个关系中存在两个实体,一个为学生实体,属性有SNO、IDNO;另一个是选课实体,属性有SNO、CNO和GRADE。根据分解的原则,我们可以将SNC分解成如下两个关系:S1(SNO,IDNO),描述学生实体;S2(SNO,CNO,GRADE),描述学生与课程的联系。对于S1,有两个候选键SNO和IDNO,对于S2,主键为(SNO,CNO)。在这两个关系中,无论主属性还是非主属性都不存在对键的部分依赖和传递依赖,S1BCNF,S2BCNF。

第四十六页,共八十三页,2022年,8月28日6.3.4.2BCNF规范化分解后,S1和S2的函数依赖分别如图6.11和6.12所示。SNOIDNOSNOCNOGRADE图6.11S1中的函数依赖关系图6.12S2中的函数依赖关系

关系SNC转换成BCNF后,数据冗余度明显降低。学生的姓名只在关系S1中存储一次,学生要改名时,只需改动一条学生记录中的相应的SNAME值,从而不会发生修改异常。第四十七页,共八十三页,2022年,8月28日6.4关系模式的规范化

到目前为止,规范化理论已经提出了六类范式(有关4NF和5NF的内容不再详细介绍)。各范式级别是在分析函数依赖条件下对关系模式分离程度的一种测度,范式级别可以逐级升高。一个低一级范式的关系模式,通过模式分解转化为若干个高一级范式的关系模式的集合,这种分解过程叫作关系模式的规范化(Normalization)。6.4.1关系模式规范化的目的和原则一个关系只要其分量都是不可分的数据项,就可称作规范化的关系,但这只是最基本的规范化。这样的关系模式是合法的。但人们发现有些关系模式存在插入、删除、修改异常、数据冗余等弊病。规范化的目的就是使结构合理,消除存储异常,使数据冗余尽量小,便于插入、删除和更新。第四十八页,共八十三页,2022年,8月28日6.4关系模式的规范化

规范化的基本原则就是遵从概念单一化“一事一地”的原则,即一个关系只描述一个实体或者实体间的联系。若多于一个实体,就把它“分离”出来。因此,所谓规范化,实质上是概念的单一化,即一个关系表示一个实体。6.4.2关系模式规范化的步骤规范化就是对原关系进行投影,消除决定属性不是候选键的任何函数依赖。具体可以分为以下几步:1.对1NF关系进行投影,消除原关系中非主属性对键的部分函数依赖,将1NF关系转换成若干个2NF关系。2.对2NF关系进行投影,消除原关系中非主属性对键的传递函数依赖,将2NF关系转换成若干个3NF关系。3.对3NF关系进行投影,消除原关系中主属性对键的部分函数依赖和传递函数依赖,也就是说使决定因素都包含一个候选键。得到一组BCNF关系。

第四十九页,共八十三页,2022年,8月28日关系规范化的基本步骤如图6.13所示。

1NF2NF3NFBCNF消除决定属性不是候选键的非平凡的函数依赖消除非主属性对键的部分函数依赖消除非主属性对键的传递函数依赖消除主属性对键的部分和传递函数依赖图6.13规范化过程

一般情况下,我们说没有异常弊病的数据库设计是好的数据库设计,一个不好的关系模式也总是可以通过分解转换成好的关系模式的集合。但是在分解时要全面衡量,综合考虑,视实际情况而定。对于那些只要求查询而不要求插入、删除等操作的系统,几种异常现象的存在并不影响数据库的操作。这时便不宜过度分解,否则当要对整体查询时,需要更多的多表连接操作,这有可能得不偿失。在实际应用中,最有价值的是3NF和BCNF,在进行关系模式的设计时,通常分解到3NF就足够了。第五十页,共八十三页,2022年,8月28日6.4关系模式的规范化6.4.2关系模式规范化的要求关系模式的规范化过程是通过对关系模式的投影分解来实现的,但是投影分解方法不是唯一的,不同的投影分解会得到不同的结果。在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才是有意义的。第五十一页,共八十三页,2022年,8月28日一些概念和记号平凡的依赖若YX,则XY成立,则称为平凡的依赖{sex,sname}{sname}非平凡的依赖若XY和YX成立,则X和Y一一对应,记为XY{sno}{dormitory,sname}Y完全依赖于X(记作XY),是指Y不依赖于X的任何一个真子集,否则称为部分依赖(记作XY)部分依赖的例子:{sno,sex}{dormitory,sname}fp第五十二页,共八十三页,2022年,8月28日一些概念和记号(c)传递依赖 若XY,YX,YZ,则XZ成立称Z传递函数依赖于X。逻辑蕴涵

F是关系R的一个函数依赖的集合,XY是关系R的一个函数依赖,若R的任何一个关系r,若函数依赖XY都成立,则称为F逻辑蕴涵XY。例:{XY,YZ}逻辑蕴涵X

Z函数依赖集合F的闭包

F+={XY│F逻辑蕴涵

XY}即F所逻辑蕴含的函数依赖的全体叫F的闭包。第五十三页,共八十三页,2022年,8月28日闭包第五十四页,共八十三页,2022年,8月28日F是关系R(U)的一个函数依赖的集合,XU,XF+={Y|XY能由F导出},XF+称为属性集X关于函数依赖集F的闭包。F是关系R(U)的一个函数依赖的集合,X,YU,XY能由F导出的充分必要条件是YXF+

第五十五页,共八十三页,2022年,8月28日Armstrong公理一组用于推导函数依赖的规则若XY,则WXWY若YX,则XY若XY,YZ,则XZ若XY,XZ,则XYZ若XYZ,则XY,XZ若XY,WYZ,则XWZ若XY,ZY,则XZ第五十六页,共八十三页,2022年,8月28日求属性集X关于U上的函数依赖集F的闭包XF+步骤:令X0=X。求B,B={A|(V)(W)(VWFVXiAW)}Xi+1=BXi判断Xi+1=Xi吗?若相等或Xi+1=U,Xi+1则就是XF+

,算法终止。第五十七页,共八十三页,2022年,8月28日例:U={A,B,C.D,E};F={ABC,BD,CE,ECB,ACB}求(AB)F+1.令X0=AB。2.求B,

B={A|(V)(W)(VWFVXiAW)}找左部为A,B或AB的函数依赖,得到两个:ABC,BD。

B=CD3.求X1,根据公式:Xi+1=BXi

X1=BX0

=

CD

AB=ABCD4.求X2,求B,找左部为ABCD的函数依赖,得到两个:CE,ACB。

B=EBX2=BX1=

EBABCD=ABCDE5.判断Xi+1=Xi吗?若相等或Xi+1=U,Xi+1则就是XF+

,算法终止。

(AB)F+=ABCDE第五十八页,共八十三页,2022年,8月28日模式的分解把低一级的关系模式分解为若干个高一级的关系模式的方法并不是唯一的只有能够保证分解后的关系模式与原关系模式等价,分解方法才有意义第五十九页,共八十三页,2022年,8月28日关系模式分解的标准三种模式分解的等价定义⒈分解具有无损连接性⒉分解要保持函数依赖⒊分解既要保持函数依赖,又要具有无损连接性第六十页,共八十三页,2022年,8月28日模式的分解(续)例:SL(Sno,Sdept,Sloc)

F={Sno→Sdept,Sdept→Sloc,Sno→Sloc}SL∈2NF存在插入异常、删除异常、冗余度大和修改复杂等问题分解方法可以有多种第六十一页,共八十三页,2022年,8月28日模式的分解(续)SL──────────────────Sno Sdept Sloc──────────────────95001CSA95002ISB95003MAC95004ISB95005 PHB──────────────────第六十二页,共八十三页,2022年,8月28日模式的分解(续)1.SL分解为下面三个关系模式:

SN(Sno)SD(Sdept)SO(Sloc)第六十三页,共八十三页,2022年,8月28日分解后的关系为:

SN──────SD──────SO──────SnoSdeptSloc

──────────────────95001CSA95002ISB95003MAC95004PH─────95005────────────第六十四页,共八十三页,2022年,8月28日模式的分解(续)分解后的数据库丢失了许多信息例如无法查询95001学生所在系或所在宿舍。如果分解后的关系可以通过自然连接恢复为原来的关系,那么这种分解就没有丢失信息第六十五页,共八十三页,2022年,8月28日模式的分解(续)2.SL分解为下面二个关系模式:

NL(Sno,Sloc)DL(Sdept,Sloc)分解后的关系为:

NL────────────DL────────────SnoSlocSdeptSloc----──────────────────────95001ACSA95002BISB95003CMAC95004BPHB95005B──────────────────────第六十六页,共八十三页,2022年,8月28日模式的分解(续)NLDL

SnoSlocSdept

95001ACS95002BIS95002BPH95003CMA95004BIS95004BPH95005BIS95005BPH第六十七页,共八十三页,2022年,8月28日模式的分解(续)

NL

DL比原来的SL关系多了3个元组

无法知道95002、95004、95005

究竟是哪个系的学生

元组增加了,信息丢失了第六十八页,共八十三页,2022年,8月28日第三种分解方法3.将SL分解为下面二个关系模式:

ND(Sno,Sdept)NL(Sno,Sloc)

分解后的关系为:

第六十九页,共八十三页,2022年,8月28日模式的分解(续)ND────────────NL──────────SnoSdeptSnoSloc

──────────────────────

95001CS95001A95002IS95002B95003MA95003C95004IS95004B95005PH95005B

───────────────────────第七十页,共八十三页,2022年,8月28日模式的分解(续)

NDNL

SnoSdeptSloc

95001CSA95002ISB95003MAC95004CSA95005PHB与SL关系一样,因此没有丢失信息但仍存在插入、删除和更新异常。第七十一页,共八十三页,2022年,8月28日第四种分解方法4.将SL分解为下面二个关系模式:

ND(Sno,Sdept)DL(Sdept,Sloc)

分解后的关系为:

第七十二页,共八十三页,2022年,8月28日模式的分解(续)ND────────────DL──────────SnoSdeptSnoSloc

──────────────────────95001CSCSA95002

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论