资源预览内容
第1页 / 共135页
第2页 / 共135页
第3页 / 共135页
第4页 / 共135页
第5页 / 共135页
第6页 / 共135页
第7页 / 共135页
第8页 / 共135页
第9页 / 共135页
第10页 / 共135页
亲,该文档总共135页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
绪论绪论 关系数据库是由一系列关系组成的,因此关系数据库关系数据库是由一系列关系组成的,因此关系数据库的设计归根结底是如何构造关系。要建立一个关系数据库,的设计归根结底是如何构造关系。要建立一个关系数据库,首先要设计关系模式,然后将若干关系模式构成关系数据首先要设计关系模式,然后将若干关系模式构成关系数据库模式。然而,针对一个具体问题,应该如何构造一个适库模式。然而,针对一个具体问题,应该如何构造一个适合它的数据库模式,即应该构造几个关系模式,每个关系合它的数据库模式,即应该构造几个关系模式,每个关系模式由哪些属性组成,这些关系的完整性如何确定等。在模式由哪些属性组成,这些关系的完整性如何确定等。在构造的关系中,有时会出现数据冗余和更新异常等现象,构造的关系中,有时会出现数据冗余和更新异常等现象,这是由关系中各属性之间的相互依赖性和独立性造成的。这是由关系中各属性之间的相互依赖性和独立性造成的。这些就是关系数据库的设计问题,关系数据库的规范化理这些就是关系数据库的设计问题,关系数据库的规范化理论,为我们设计出合理的数据库提供了有利的工具。论,为我们设计出合理的数据库提供了有利的工具。机械工业出版社机械工业出版社0 本章将从一个本章将从一个“不好不好”的数据库模式实例出发,阐明的数据库模式实例出发,阐明关系模式规范化理论研究的实际背景,然后介绍规范化理论关系模式规范化理论研究的实际背景,然后介绍规范化理论的有关概念和方法,包括关系可能存在的插入、删除等异常的有关概念和方法,包括关系可能存在的插入、删除等异常问题和解决方法,函数依赖定义及其推理规则,各种范式及问题和解决方法,函数依赖定义及其推理规则,各种范式及其相互关系,关系模式的分解特性等内容。其相互关系,关系模式的分解特性等内容。机械工业出版社机械工业出版社1目录目录4.1 规范化问题的提出规范化问题的提出14.2 函数依赖函数依赖24.3 范式范式34.4 模式分解模式分解4小结小结5习题习题2机械工业出版社机械工业出版社24.1 规范化问题的提出规范化问题的提出 数据库的逻辑设计为什么要遵循一定的规范化理数据库的逻辑设计为什么要遵循一定的规范化理论?什么是好的关系模式?某些论?什么是好的关系模式?某些“不好不好”的关系模式的关系模式会导致哪些问题?可以通过一个具体的例子加以分析。会导致哪些问题?可以通过一个具体的例子加以分析。 例例4.1 已知一个教学管理数据库,其中用于描述学生的关系模式如下: STUDY(SNO,SNAME,SDEPT,MNAME,CNAME,SCORE) 机械工业出版社机械工业出版社34.1 规范化问题的提出规范化问题的提出 其中,SNO表示学生的学号,SNAME表示学生姓名,SDEPT表示学生所在的系名,MNAME表示系主任的姓名,CNAME表示课程名称,SCORE表示课程成绩。由现实世界的已知事实可知: 一个学号只对应一个学生;一个学生只属于一个系,一个系有若干学生;一个系只有一名系主任;一个学生可以选修多门课程,每门课程可以有若干学生选修;每个学生所选的每门课程只有一个成绩。机械工业出版社机械工业出版社44.1 规范化问题的提出规范化问题的提出 在此关系模式中填入一些具体的数据, 可得到STUDY关系模式的实例,如表4-1所示。 表表4-1 关系关系STUDYSNOSNAMESDEPTMNAMECNAMESCORE20048001张红计算机系王华数据结构9220048001张红计算机系王华离散数学8520048001张红计算机系王华操作系统9020048002吴大伟数学系李超高等数学8820048002吴大伟数学系李超数值分析9320048003刘志华计算机系王华数据结构8620048003刘志华计算机系王华离散数学9120048003刘志华计算机系王华操作系统89机械工业出版社机械工业出版社54.1 规范化问题的提出规范化问题的提出 上述关系虽然看起来简单明了,但在实际使用过程中却会出现数据冗余和操作异常问题。(1) 数据冗余 数据冗余是指如果某个学生选修了多门课程,那么该学生姓名、所在的系名和系主任的姓名就要重复出现,它们重复出现的次数等于该系的学生人数乘以每个学生所选修的课程数,这将造成存储空间的浪费。 机械工业出版社机械工业出版社64.1 规范化问题的提出规范化问题的提出 由于关系模式STUDY存在上述三个异常问题,因此关系模式STUDY是一个“不好”的关系模式。一个“好”的模式应当不会发生插入异常和删除异常,且数据冗余应尽可能少。那么,关系模式STUDY为什么会出现以上异常问题呢?产生上述问题的原因在于该关系模式的结构中,属性之间存在过多的“数据依赖”。一个好的关系模式应当可以通过分解来消除其中不合适的数据依赖。(2) 更新异常 在关系STUDY中,如果某个学生改名,则该学生对应的所有记录都要修改属性SNAME的值,如有不慎漏改某些记录,就会造成数据的不一致,破坏数据的完整性。机械工业出版社机械工业出版社74.1 规范化问题的提出规范化问题的提出(3) 插入异常 假如一个刚刚成立的系,其行政机构已经建立但尚未招收学生,则因为属性SNO的取值为空,导致诸如系名和系主任姓名之类的信息无法存入数据库;同样,没被学生选修的课程信息也无法存入数据库;没有选课的学生信息也无法存入数据库。(4) 删除异常 假如一个系的学生毕业了,要删除这些学生的记录,则系名和系主任的姓名也将被一起删除,而事实上这个系和系主任依然存在,但在数据库中却无法找到该系的信息。机械工业出版社机械工业出版社84.1 规范化问题的提出规范化问题的提出 由于关系模式STUDY存在上述三个异常问题,因此关系模式STUDY是一个“不好”的关系模式。一个“好”的模式应当不会发生插入异常和删除异常,且数据冗余应尽可能少。 那么,关系模式STUDY为什么会出现以上异常问题呢?产生上述问题的原因在于该关系模式的结构中,属性之间存在过多的“数据依赖”。一个好的关系模式应当可以通过分解来消除其中不合适的数据依赖。机械工业出版社机械工业出版社94.1 规范化问题的提出规范化问题的提出例例4.2 将关系模式STUDY分解为如下三个新的关系模式: STUDENT (SNO, SNAME, SDEPT)GRADE (SNO, CNAME, SCORE)DEPARTMENT (SDEPT, MNAME)相应的关系实例如表4-2、表4-3、表4-4所示。 表4-2 关系STUDENTSNOSNAMESDEPT20048001张红张红计算机系计算机系20048001张红张红计算机系计算机系20048001张红张红计算机系计算机系20048002吴大伟吴大伟数学系数学系20048002吴大伟吴大伟数学系数学系20048003刘志华刘志华计算机系计算机系20048003刘志华刘志华计算机系计算机系20048003刘志华刘志华计算机系计算机系机械工业出版社机械工业出版社104.1 规范化问题的提出规范化问题的提出表表4-3 关系关系GRADESNOCNAMESCORE20048001数据结构9220048001离散数学8520048001操作系统9020048002高等数学8820048002数值分析9320048003数据结构8620048003离散数学9120048003操作系统89 机械工业出版社机械工业出版社114.1 规范化问题的提出规范化问题的提出 表表4-4 关系关系DEPARTMENT 分解之后,这三个关系模式都不会发生插入异常和删除异常的问题,数据冗余也得到了控制。模式分解是规范化设计的一条原则:如果关系模式有冗余问题就应该分解它。那么,如何来确定关系的分解是否益?分解后是否仍然存在数据冗余和更新异常等问题?什么样的关系模式才算是一个比较好的关系模式?这些都是后面几节将要介绍的关系模式的函数依赖、关系模式规范化等所涉及的内容。SDEPTMNAME计算机系王华数学系李超机械工业出版社机械工业出版社124.2 函数依赖 我们知道,关系是元组的集合,关系模式是对这个集合中元组的数据组织方式的结构性描述。一个关系模式一般简记为R(U,F),其中,R为关系名,U为一组属性,且U=A1,A2,An,F为关系R在U上满足的一组函数依赖。有时,在所讨论的问题不涉及F时,关系模式简记为R(U)。本节将讨论关系模式的函数依赖、候选码、主码、函数依赖的推理规则等问题。机械工业出版社机械工业出版社134.2 函数依赖函数依赖 关系与关系模式是两个联系十分紧密但又有区别的概念。关系实质上是一张二维表,表的每一行为一个元组,因此,关系是元组的集合,它其实是笛卡尔积的一个子集。从一张二维表的角度来看,关系模式其实是把所有元组删去以后的一张空表,它是对元组的数据组织方式的结构性描述。当把若干元组填入关系模式后,所得到的二维表就是一个关系,且是一个具体的关系,即关系是关系模式的一个取值实例。机械工业出版社机械工业出版社144.2 函数依赖函数依赖 一般来说,关系模式是相对稳定的,比如关系模式STUDENT,而关系却是不断变化的,如表4-2所示的关系STUDENT,它仅仅是关系模式STUDENT的一个取值实例,称为具体关系。在表4-2中不管是增加一个元组或是减少一个元组,就得到一个新的关系虽然其关系名可以不变,但它已是关系模式STUDENT的另一个具体关系了。因此,每一个关系都对应一个关系模式,而一个关系模式可以对应多个关系即在数据库中,关系模式是相对稳定的、静态的而关系却是动态变化的、不稳定的,而关系的每一次变化结果,都是关系模式对应的一个新的具体关系。在以后的一般讨论中,一个关系模式R(U)对应的具体关系(取值实例)通常用小写字母r来表示。机械工业出版社机械工业出版社154.2 函数依赖函数依赖4.2.1 函数依赖定义 4.1 设R(U)是属性集U=A1,A2,An上的关系模式,X和Y是U的子集。若对R(U)的任一具体关系r,如果r中的任意两个元组t1和t2,只要t1X= t2X就有t1 Y= t2 Y,则称“X函数确定Y”或“Y函数依赖X” (Functional Dependency,简称FD),记作XY。 机械工业出版社机械工业出版社164.2 函数依赖函数依赖 在以上定义中,tiX和tiY分别表示元组t在属性X和Y上的取值。“X函数确定Y”的含义是:对关系r中的任一个元组,如果它在属性集X上的值已经确定,则它在属性集Y上的值也随之确定。也就是说,对于r的任意两个元组t1和t2,只要有t1X= t2X,就不会出现t1Y t2Y的情况。因此,定义4.1说明, 在关系模式R(U)的任一个具体关系r中,不可能存在这样的两个元组,它们在X上的属性值相等,而在Y上的属性值不等。机械工业出版社机械工业出版社174.2 函数依赖函数依赖对于函数依赖,需要注意以下几点:(1) 函数依赖不是指关系模式R(U)的某个或某些具体关系满足的约束条件,而是指R(U)的一切具体关系r都要满足的约束条件。(2) 函数依赖和其他数据依赖一样,是一个语义范畴的概念。只能根据属性的语义来确定一个函数依赖。例如上述关系模式STUDY,当学生不存在重名的情况下,可以得SNAMESDEPT,这个函数依赖只有在没有同名学生的条件下才成立。如果允许有重名的学生,则系名就不再函数依赖于姓名了。机械工业出版社机械工业出版社184.2 函数依赖函数依赖 数据库设计者应在定义数据库模式时,指明属性之间的函数依赖,使数据库管理系统根据设计者的意图来维护数据库的完整性。因此,设计者可以对现实世界中的一些数据依赖做强制性规定,例如,为了使SNAMESDEPT这个函数依赖成立,用户可以强制规定关系中不允许同名同姓的人出现。这样当输入某个元组在SNAME上的值与关系中已有元组在SNAME上的值相同,则数据库管理系统就拒绝接受该元组。机械工业出版社机械工业出版社19 4.2 函数依赖函数依赖 (3) 函数依赖存在的时间无关性。由于函数依赖是指关系中的所有元组应该满足的约束条件,而不是指关系中某个或某些元组所满足的约束条件。关系中元组的增加、删除或更新都不能破坏这种函数依赖。因此,必须根据语义来确定属性之间的函数依赖,而不能单凭某一时刻关系中的实际数值来判断。例如,对于上述关系模式STUDY,根据语义只能存在函数依赖SNOSNAME,而不应该存在SNAMESNO,因为如果新增加一个重名的学生,函数依赖SNAMESNO必然不存在。机械工业出版社机械工业出版社204.2 函数依赖函数依赖(4) 若XY,则称X为这个函数依赖的决定(Determinant)因素,简称X是决定因素。(5) 若XY,并且YX,则记作XY。(6) 若Y不函数依赖于X,则记作XY。机械工业出版社机械工业出版社214.2 函数依赖函数依赖 定义 4.2 设R(U)是属性集U=A1,A2,An上的关系模式,X和Y是U的子集。若XY,但YX,则称XY是平凡函数依赖。否则称XY是非平凡函数依赖。 对于任一关系模式,平凡函数依赖都是必然成立的,但它不反映新的语义。因此,在下面的讨论中,若没有特别声明,“XY”都表示非平凡的函数依赖。机械工业出版社机械工业出版社224.1 规范化问题的提出规范化问题的提出例4.3 在例4.1的关系STUDY中存在函数依赖: SNOSNAME SDEPTMNAME 因为任意两行中只要学号SNO相同,学生姓名SNAME必然相同,同理任意两行中只要系名SDEPT相同,系主任姓名MNAME也必然相同。机械工业出版社机械工业出版社234.2 函数依赖函数依赖 SNO和SDEPT是决定因素,SNAME和MNAME是被决定因素。 反过来,在关系STUDY中并不存在以下函数依赖: SNAMESNO MNAMESDEPT 因为有可能出现两位学生姓名相同或两个系主任姓名相同的情况。机械工业出版社机械工业出版社244.2 函数依赖函数依赖 除了前面两个函数依赖之外,在关系STUDY中还有许多其它的函数依赖,如:(SNO,SDEPT)(SNAME)(SNO,SDEPT)(MNAME)(SNO,SDEPT)(SNO)(SNO,SDEPT)(SDEPT)(SNO,SDEPT)(SNO,SNAME)(SNO,SDEPT)(SDEPT,MNAME)(SNO,SDEPT)(SNO,SNAME,SDEPT, MNAME) 上面的函数依赖中(SNO,SDEPT)(SNO)、(SNO,SDEPT)(SDEPT)就是平凡函数依赖。 机械工业出版社机械工业出版社254.2 函数依赖函数依赖4.2.2 4.2.2 函数依赖的基本性质函数依赖的基本性质(1)投影性 由平凡函数依赖的定义可知,一组属性函数决定它的所有子集。例如,在关系STUDY中,(SNO,CNAME)SNO和(SNO,CNAME)CNAME。(2)扩张性 若XY且WZ,则(X,W)(Y,Z)。例如,在关系STUDY中,SNOSNAME和SDEPTMNAME,则有(SNO,SDEPT)(SNAME, MNAME)。机械工业出版社机械工业出版社264.2 函数依赖函数依赖(3)合并性 若XY且XZ,则X(Y, Z)。例如,在关系STUDY中,SNOSNAME和SNOSDEPT,则有SNO(SNAME, SDEPT)。(4)分解性 若X(Y, Z),则XY且XZ,很显然,分解性是合并性的逆过程。机械工业出版社机械工业出版社274.2 函数依赖函数依赖4.2.3 4.2.3 完全函数依赖与部分函数依赖完全函数依赖与部分函数依赖定义 4.3 设R(U)是属性集U=A1,A2,An上的关系模式。X和Y是U的子集。如果XY,且对于X的任何一个真子集X,都有XY,则称Y对X完全函数依赖(Full Functional Dependency)或者X完全决定Y,记作: 。如果XY,但Y不是完全函数依赖于X,则称Y对X部分函数依赖(Partial Functional Dependency),记作: 。 机械工业出版社机械工业出版社284.2 函数依赖函数依赖 例例4. 4 在关系STUDENT (SNO, SNAME, SDEPT)中,SNOSDEPT,SNOSNAME(若无重名)。在关系GRADE (SNO, CNAME, SCORE)中,SNOCNAME,SNOSCORE。在这里单个属性不能作为决定因素,但属性的组合可以作为决定因素,即: ,其中(SNO,CNAME)是决定因素。 机械工业出版社机械工业出版社294.2 函数依赖函数依赖4.2.4 4.2.4 传递函数依赖传递函数依赖 定义 4.4 对于关系模式R(U),设X、Y和Z都是U的子集。如果XY,YZ,且YX,则称Z对X传 递 函 数 依 赖 ( Transitive Functional Dependency),记作:在传递函数依赖的定义中加上条件YX是必要的,因为如果YX,则XY,即说明X与Y之间是一一对应的,这样导致Z对X的函数依赖是直接依赖,而不是传递函数依赖。定义4.4中的条件主要是强调XY是平凡函数依赖,否则同样Z对X是直接函数依赖,而不是传递函数依赖。机械工业出版社机械工业出版社304.2 函数依赖函数依赖例例 4.54.5 对于例4.1中的关系模式: STUDY(SNO,SNAME,SDEPT,MNAME,CNAME,SCORE)有如下的一些函数依赖: SNOSNAME (SNO, CNAME)SCORE SNOSDEPT SDEPTMNAME 由最后两个函数依赖还可以得出MNAME传递函数依赖于SNO,即。如果没有姓名相同的学生,还有SNOSNAME等。但显然有SCORESNAME, 。 其实,对关系模式STUDY还有,因此,SNO是 的决定因素;(SNO,CNAME)是 的决定因素。机械工业出版社机械工业出版社314.2 函数依赖函数依赖4.2.5 码定义 4.5 对关系模式R(U),设K是R中的属性或属性组,KU。如果,则称K为R(U)的候选码或候选关键字(Candidate Key)。若候选码多于一个,则通常在R(U)的所有候选码中选定一个作为主码(Primary Key)。主码也称为主键或主关键字。 候选码是能够唯一确定关系中任何一个元组(实体)的最少属性集合,主码也是候选码,它是候选码中任意选定的一个。最简单的情况,单个属性是候选码。最极端的情况,关系模式的整个属性集全体是候选码,同时也是主码,这时称为全码或全键(All-key)。机械工业出版社机械工业出版社324.2 函数依赖函数依赖下面举一个全码的例子。 例 4.6 设有关系模式TR(TEACHER,CNAME,SNAME),其属性TEACHER、CNAME、SNAME分别表示教师、课程和学生。由于一个教师可以讲授多门课程,某个课程可有多个教师讲授。学生也可以选修不同教师讲授的不同课程,因此,这个关系模式的候选码只有一个,就是关系模式的全部属性(TEACHER,CNAME,SNAME),即全码,它也是该关系模式的主码。 机械工业出版社机械工业出版社334.2 函数依赖函数依赖 为了方便区别候选码中的属性与其他属性,我们可以得到如下定义。 定义 4.6 对关系模式R(U),包含在任何一个候选码中的属性称为主属性(Primary Attribute),不包含在任何候选码中的属性称为非主属(Noprimary Attribute)或非码属性(No-key Attribute)。例4.7 在关系模式STUDY(SNO,SNAME,SDEPT,MNAME,CNAME,SCORE)中, SNO、CNAME 都是主属性,而SNAME、SDEPT、MNAME、SCORE都是非主属性。机械工业出版社机械工业出版社344.2 函数依赖函数依赖 定义 4.7 对关系模式R(U),设X是R中的属性或属性组。若X不是R(U)的主码,但X是另一个关系模式的主码,则称X是R(U)的外码或外部码(Foreign Key)。例4.8 在关系模式GRADE(SNO,CNAME,SCORE)中SNO不是关系模式GRADE的主码,但SNO是关系模式STUDENT(SNO,SNAME,SNAME)中的主码。因此,SNO是关系模式GRADE(SNO,CNAME,SCORE)的外码。机械工业出版社机械工业出版社354.2 函数依赖函数依赖 主码与外码提供了一种表示两个关系中元组(实体)之间联系的手段。在数据库设计中,经常人为地增加外码来表示两个关系中元组之间的联系,当两个关系进行连接操作时就是因为有外码在起作用。比如,我们需要查看每个学生的姓名、选课名称和成绩时,就必然会涉及STUDENT(SNO,SNAME,SDEPT)和 GRADE(SNO,CNAME,SCORE)对应关系的连接操作,这时,只要使用第三章介绍的SELECTL命令即可: SELECT SNAME, CNAME, SCORE FROM STUDENT, GRADE WHERE STUDENT.SNO=GRADE.SNO 机械工业出版社机械工业出版社364.3 范式 在关系数据库模式的设计中,为了避免或减少由函数依赖引起的过多数据冗余和更新异常等问题,必须对关系模式进行合理的分解,分解的标准就是规范化理论中的范式。从1971年E.F.Codd提出关系模式规范化理论开始,人们对数据库模式的规范化问题进行了长期的研究,且已经有了很大进展。机械工业出版社机械工业出版社374.3 范式 根据关系模式的规范化理论,关系数据库中的关系模式一定要满足某种程度的要求。满足不同程度要求的关系模式称之为不同的范式 (Normal Form),因此,范式既可以作为衡量关系模式规范化程度的标准,又可以看作满足某一程度要求的关系模式的集合。目前,主要有六个范式级别,它们分别是第一范式(简称lNF)、第二范式 (2NF)、第三范式 (3NF)、BC范式 (BCNF)、第四范式和第五范式。满足最低要求的关系模式叫第一范式。若第一范式再满足一些要求就称为第二范式,其余以此类推。因此,各范式之间的关系为INF2NF3NFBCNF4NF5NF,如图4-1所示。 机械工业出版社机械工业出版社384.3 范式 图图4-1 各种范式之间的关系各种范式之间的关系机械工业出版社机械工业出版社394.3 范式 将一个低级别范式的关系模式,通过模式分解转换为若干个高一级范式的关系模式的过程,称为规范化 (Normalization)。 从前面的介绍可知,范式是满足某一程度要求的关系模式的集合。因此,若某一个关系模式R是第几范式,则可记为RxNF。比如,R是第3范式就可记为R3NF。 机械工业出版社机械工业出版社404.3 范式4.3.1 4.3.1 第一范式第一范式(1NF)(1NF)定义4.8 如果关系模式R的所有属性都是不可再分的基本数据项,则称R为第一范式,简称1FN,记作RlNF。 在例4.1中给出的关系模式STUDY(SNO,SNAME,SDEPT,MNAME,CNAME,SCORE)就是lNF。 机械工业出版社机械工业出版社414.3 范式 由定义可知,第一范式是一个不含重复组的关系,也不存在嵌套结构。为了与规范化关系相区别,把不满足第一范式的关系称为非规范化的关系。在任何一个关系数据库系统中,第一范式是对关系模式的一个最起码的要求,所有的关系模式必须是第一范式,不满足第一范式的数据库不能称为关系数据库。表4-5所示的课程成绩关系是一个典型的非规范化关系,因为属性“成绩”可以分解,将其转化为第一范式,如表4-6所示。机械工业出版社机械工业出版社424.3 范式表表4-5 4-5 课程成绩关系课程成绩关系 学号姓名 成绩英语高等数学20048001张红859020048002吴大伟919520048003刘志华887220048004王英758020048005李建军9296机械工业出版社机械工业出版社434.3 范式 表表4-6 规范化的课程成绩关系规范化的课程成绩关系学号 姓名 英语成绩高等数学成绩20048001张红859020048002吴大伟919520048003刘志华887220048004王英758020048005李建军9296机械工业出版社机械工业出版社444.3 范式 然而,一个关系模式仅仅满足第一范式是不够的。前面讨论的关系模式STUDY属于第一范式,但它具有大量的数据冗余和插入异常、删除异常、更新异常等弊端。为什么会存在这种问题呢?下面来分析一下STUDY中的函数依赖关系,它的码是(SNO,CNAME)这一属性集,所以有: SNOSNAME SNOSDEPT SNOMNAME 如图4-2所示。 图 4-2 STUDY中的函数依赖机械工业出版社机械工业出版社454.3 范式 由图4-2 可知,在关系STUDY中,既存在完全函数依赖,又存在部分函数依赖。正是由于关系中存在着复杂的函数依赖,才导致数据操作中出现了种种弊端。因而有必要用投影运算将关系分解,去掉过于复杂的函数依赖,向高一级的范式转化。机械工业出版社机械工业出版社464.3 范式4.3.24.3.2第二范式第二范式(2NF)(2NF) 定义定义4.94.9 如果关系模式如果关系模式R R 1NF1NF,且每一个非主属性完全,且每一个非主属性完全函数依赖于函数依赖于R R的码,则称的码,则称R R为第二范式,简称为第二范式,简称2NF2NF,记作,记作R R 2NF2NF。 我们知道,关系模式STUDY(SNO,SNAME,SDEPT,MNAME,CNAME,SCORE)是第一范式。下面将证明,它不是第二范式。 机械工业出版社机械工业出版社474.3 范式 在前面已经分析,这个关系模式的唯一候选码是(SNO,CNAME),也就是主码。所以,属性SNAME,SDEPT,MNAME,SCORE等都是非主属性。根据候选码定义可知,(SNO,CNAME)完全函数决定STUDY(SNO,SNAME,SDEPT,MNAME,CNAME,SCORE),所以有(SNO,CNAME)SNAME,(SNO,CNAME)MNAME。但是,根据这个问题的实际语义可知SNOSNAME、SNOMNAME,故由部分函数依赖的定义可知: 机械工业出版社机械工业出版社484.3 范式 即非主属性SNAME和MNAME是部分函数依赖于候选码(SNO,CNAME)。由2NF的定义可知,关系模式STUDY不是2NF的。关系模式STUDY中的函数依赖可由图4-3表示。 图图4-3关系模式关系模式STUDY的函数依赖的函数依赖机械工业出版社机械工业出版社494.3 范式 由于关系模式STUDY是1NF而不是2NF,因此它存在着数据冗余过多、删除异常和插入异常等问题,而产生这些问题的主要原因之一是这个关系模式中的属性存在部分函数依赖。因此,只要消除关系模式中属性间的部分函数依赖,就有可能解决或减轻数据冗余过多、删除异常和插入异常等问题。解决这个问题的办法就是将关系模式进行分解,使其新的关系模式中属性之间不存在部分函数依赖。 机械工业出版社机械工业出版社504.3 范式 STUDENTS (SNO, SNAME, SDEPT, MNAME) GRADE (SNO, CNAME, SCORE) 其中,关系模式STUDENTS中的候选码SNO和关系模式GRADE中的候选码(SNO,CNAME)都是唯一的。因此,经过这样的分解就使得关系模式STUDENTS和GRADE中的非主属性都完全函数依赖于主码了,即关系模式STUDENTS和GRADE都属于2NF。这样,表4-1所示的关系经过分解所得的两个关系,其数据冗余度已得到改善,但有关的异常问题仍然存在。 机械工业出版社机械工业出版社514.3 范式 关 系 模 式 STUDY经 过 分 解 后 , 在STUDENTS中可以插入尚未选课的学生。如果一个学生所有的选修课记录在GRADE中被删除,仍不会影响该学生在STUDENTS中的记录;由于学生选课情况与学生的基本情况分开存储在两个关系中,因此无论该学生选多少门课程,他的SNAME和SDEPT值都只存储一次,这就大大降低了数据冗余。另外,当某个学生转系时,只需修改STUDENTS关系中的SDEPT和MNAME的值,而这两个值仅被存储一次,因此简化了修改操作。 机械工业出版社机械工业出版社524.3 范式 关系关系STUDENTS中仍然存在着一定的异常。中仍然存在着一定的异常。1.若某个系刚刚成立还没有开始招生时,则SDEPT和MNAME的值无法插入,造成了插入异常。2.若某个系的学生全部毕业了,在删除所有学生记录的同时,该系的信息也被删除了,这样便造成了删除异常。3.数据冗余依然存在,当多个学生处于同一个系时,MNAME的值被存储多次。4.若某个系要更换系主任时,则要逐一修改该系的MNAME值,如有不慎漏改某些记录,就会造成更新异常。5.因此,关系模式STUDENTS仍不是一个好的关系模式。 机械工业出版社机械工业出版社534.3 范式4.3.3第三范式(3NF) 定义4.10 如果关系模式R2NF,且每一个非主属性都不传递函数依赖于R的任何一个的候选码,则称R为第三范式,简称3NF,记作R3NF。 由以上定义可知,若R3NF,则关系模式R的每一个非主属性既不部分函数依赖于候选码,也不传递函数依赖于候选码。 机械工业出版社机械工业出版社544.3 范式 前面已经证明,关系模式STUDY分解后得到关系模式GRADE (SNO,CNAME, SCORE)是第二范式,由于它唯一的一个非主属性SCORE是完全函数依赖于候选码(SNO,CNAME),故每一个非主属性不传递函数依赖于候选码,因而GRADE也是第三范式,其属性间的函数依赖由图4-4所示。 但关系模式STUDENTS(SNO,SNAME,SDEPT,MNAME)虽然是第二范式,但它却不是第三范式。其属性间的函数依赖如图4-5所示,因为SNO是唯一候选码,也是主码,是主属性,所以SDEPT、MNAME均是非主属性,因为SNOSDEPT且SDEPTMNAME,即非主属性MNAME传递函数依赖于候选码SNO,因此。关系模式STUDENTS不是第三范式。 机械工业出版社机械工业出版社554.3 范式 图图4-4 GRADE中的函数依赖中的函数依赖 图图4-5 STUDENTS中的函中的函数依赖数依赖机械工业出版社机械工业出版社564.3 范式 一个关系模式R若不是3NF,就会产生与2NF类似的问题,仍然存在数据冗余过多、删除异常和插入异常等问题,解决的办法仍然是进行模式分解。可以将STUDENTS分解为下面两个关系模式: DEPARTMENT (SDEPT, MNAME) STUDENT (SNO, SNAME, SDEPT) 分解后的两个关系模式DEPARTMENT和STUDENT分别有唯一候选码SDEPT和SNO,已不存在非主属性传递函数依赖于候选键的情况,因此DEPARTMENT和STUDENT都是3NF的关系模式。 机械工业出版社机械工业出版社574.3 范式 至此,例4.1给出的关系模式STUDY已被分解成如下三个模式且都已经是3NF的关系模式,对应的关系STUDY也分解成三个关系,分别如表4-2、表4-3、表4-4所示。 STUDENT (SNO, SNAME, SDEPT) GRADE (SNO, CNAME, SCORE) DEPARTMENT (SDEPT, MNAME) 需要注意的是,属于3NF的关系模式必然属于2NF,因为可以证明部分函数依赖中含有传递函数依赖。 机械工业出版社机械工业出版社584.3 范式定理4.1 如果关系模式R是3NF,那么R也是2NF。 证明:只要证明关系模式R中部分函数依赖的存在蕴含着传递函数依赖即可。设A是关系模式R的一个非主属性,K是R的一个候选码,且KA是部分函数依赖,则R中必然存在某个真子集K,且KK,则A必然函数依赖于真子集K,即KA。由于A是非主属性,因此AK =。因为KK,故KK(平凡函数依赖),但KK。从KK和KA可知KA是传递函数依赖。因此,可把部分函数依赖看作是传递函数依赖的特例。 机械工业出版社机械工业出版社594.3 范式 部分函数依赖和传递函数依赖是关系模式产生冗余和异常的两个重要原因。由于3NF模式中不存在非主属性对候选码的部分函数依赖和传递函数依赖,因此消除了很大一部分存储异常,具有较好的性能。 将一个2NF规范到3NF后,可以在一定程度上减少原2NF关系中的插入异常、删除异常、数据冗余等问题。但是仍不能完全消除这些问题。 机械工业出版社机械工业出版社604.3 范式4.3.4 BC4.3.4 BC范式范式(BCNF)(BCNF) 3NF消除了非主属性对候选码的传递函数依赖和部分函数依赖,而没有限制主属性对码的依赖关系。如果发生了这种依赖,仍有可能存在数据冗余、插入异常、删除异常和更新异常的情况。 为了消除主属性对码的依赖关系,1974年,Boyce和Codd共同提出了一个新范式的定义,这就是Boyce-Codd范式,简称BCNF或BC范式,通常认为是修正的第三范式。 机械工业出版社机械工业出版社614.3 范式 定义4.11 如果关系模式R1NF,且所有的函数依赖XY( YX),决定因素X都包含了R的一个候选码,则称R属于BC范式(Boyce-Codd Normal Form),简称BCNF,记作RBCNF。 以上定义其实等价于:在满足1NF的关系模式R中,若每一个决定因素都包含有候选码,则RBCNF。机械工业出版社机械工业出版社624.3 范式 若关系模式R满足BCNF的定义,则它具有以下3个结论:R的所有非主属性都完全函数依赖于每一个候选码,因此R2NF 。R的所有主属性都完全函数依赖于不包含它的候选码。R中没有任何属性完全函数依赖于任何一组非候选码属性。 由以上结论可知,BCNF既检查非主属性,又检查主属性,显然比3NF限制更加严格。当只检查非主属性而不检查主属性时,就成了3NF。因此,可以说任何满足BCNF的关系都必然是3NF。机械工业出版社机械工业出版社634.3 范式定理4.2 如果关系模式RBCNF ,则R3NF 。 证明:由结论(1)可知,若RBCNF,则R2NF。下面证明:R的任何一个非主属性集都不传递函数依赖于候选码,即R3NF 。 反证法:设RBCNF 但R3NF,即存在一个非主属性集Z传递函数依赖某个候选码X,由传递函数依赖的定义,即存在某个属性集Y(YX,ZY),使XY,YZ且YX,显然属性集Y不包含R的候选码(否则,因为候选码决定任何属性,所以YX也成立,这与传递依赖定义矛盾)。即Y中不包含候选码,但YZ却成立,由 BCNF 的定义知RBCNF ,与已知矛盾,故R3NF 。然而,一般地说,若R3NF ,则R未必属于BCNF,但可以证明如下定理:机械工业出版社机械工业出版社644.3 范式定理定理4.3 4.3 如果关系模式R3NF 且R有唯一候选码X,则必有RBCNF。 证明:设R3NF且R有唯一候选码X,则对于R的任何一个函数依赖XY (YX) ,必有XX 。即对R的任何一个函数依赖XY (YX) ,X都含候选键X,故RBCNF 。 在关系模式GRADE (SNO, CNAME, SCORE)中,只有一个主码(SNO,CNAME),是唯一的候选码,且只有一个函数依赖:(SNO,CNAME)SCORE,为完全函数依赖,符合BCNF的条件,所以满足BCNF。机械工业出版社机械工业出版社654.3 范式 对于关系模式STUDENT (SNO, SNAME, SDEPT),假定SNAME也具有唯一性,那么STUDENT就有两个候选码,这两个候选码都是由单个属性组成,并且互不相交。其他属性不存在对候选码的传递依赖和部分依赖,所以STUDENT3NF。同时STUDENT中除SNO、SNAME外没有其他决定因素,所以STUDENT也属于BCNF。 下面给出两个关系模式,其候选码不唯一,说明属于3NF的关系模式有的属于BCNF,但有的不属于BCNF。机械工业出版社机械工业出版社664.3 范式 例例4.9 4.9 设有关系模式STUDYPLACE (SNO, CNAME, PLACE),其中SNO, CNAME, PLACE 分别表示学号、课程名称和成绩名次。由于每个学生学习每门课程都有一定的名次,每门课程中每一名次只有一个学生(假设没有并列名次),由各个属性及相互联系的语义可知:关系模式STUDYPLACE 没有单个属性构成的候选码,也不是全码。由两个属性构成的候选码只有(SNO, CNAME) 和 (CNAME , PLACE),因此关系模式STUDYPLACE 所有属性都是主属性,也就没有非主属性对候选码的传递函数依赖或部分函数依赖,因此它属于3NF 。此外,由前面分析可知,这个关系模式所有可能的非平凡函数依赖只能是以下3个:机械工业出版社机械工业出版社674.3 范式(1) (SNO, CNAME)PLACE (T)(2) (CNAME, PLACE)SNO (T)(3) (SNO, PLACE)CNAME (F) 而这3个可能的函数依赖中,只有(1)、(2)是成立的,(3)是不成立的,因此,关系模式STUDYPLACE 的所有函数依赖可用图4-6表示。机械工业出版社机械工业出版社684.3 范式图图4-6 关系模式关系模式STUDYPLACE 的所有函数依赖的所有函数依赖注意到函数依赖(1)的左边包含候选码(SNO, CNAME),函数依赖(2)的左边包含候选码(CNAME, PLACE),即对于关系模式STUDYPLACE的任何一个函数依赖XY, (Y X ) 其X 都含有候选码,根据定义4.11,它属于BCNF。机械工业出版社机械工业出版社694.3 范式 例例4.10 4.10 有关系模式STUDYTEACH (SNO,TEACHER,CNAME),其中SNO、TEACHER、CNAME分别表示学号、教师和课程名称。假设每一位教师只教一门课,每门课有若干教师讲授,每位学生可以选修多门课程,某一位学生选修某一门课,就有一个确定的教师。由各个属性及其相互联系的语义可知:(SNO,CNAME)和(SNO,TEACHER)是候选码,属性间的函数依赖如下:(SNO, CNAME)TEACHER(SNO, TEACHER)CNAMETEACHERCNAME这些函数属依赖可用图4-7表示。机械工业出版社机械工业出版社704.3 范式 图图4-7 4-7 关系模式关系模式STUDYTEACH STUDYTEACH 中的函数依赖中的函数依赖显然,关系模式STUDYTEACH的所有属性都是主属性,因此它没有任何非主属性对候选码的传递函数依赖或部分函数依赖,因此关系模式STUDYTEACH是3NF,但它不是BCNF,因为TEACHER是决定因素,而TEACHER不包含候选码。若一个关系模式是3NF而不是BCNF,则仍然存在不合适的地方。如表4-7 所示,从STUDYTEACH的一个关系实例中,可以发现仍存在一些问题。机械工业出版社机械工业出版社714.3 范式表表4-7 4-7 关系关系STUDYTEACHSTUDYTEACHSNOTEACHERCNAME20048001张洪刚张洪刚高等数学高等数学20048002张洪刚张洪刚高等数学高等数学20048003王亮王亮高等数学高等数学20048004王亮王亮高等数学高等数学20048001李青李青英语英语20048001陈伟陈伟数据库原理数据库原理20048001郭永军郭永军微机原理微机原理(1)仍然存在数据冗余问题,虽然每个教师只讲授一门课程,但由于有多个学生选修此门课程,因此每个选修改门课程的学生元组都要存储该教师的信息。机械工业出版社机械工业出版社724.3 范式(2)存在插入异常,每学期初某位教师准备开设某门课程,但学生还未开始选课,这时教师开设课程的信息就无法插入。(4)存在更新异常,当某位教师开设的课程更名后,所有选修该教师课程的学生元组都要进行修改,如有不慎漏改或改错某个数据,则破坏了数据的完整性。(5)存在删除异常,如果选修某课程的学生全部毕业,则在删除相应学生信息的同时也删除了该门课程和任课教师的信息。机械工业出版社机械工业出版社734.3 范式 一个非BCNF的关系模式也可以通过分解成为BCNF。例如,STUDYTEACH可分解为STEACHER(SNO,TEACHER)与TEACHERCNAME(TEACHER,CNAME),它们都是BCNF。 BCNF是在函数依赖的条件下对关系模式分解所能达到的最高分离程度。一个数据库模式中的所有关系模式如果都属于BCNF,那么在函数依赖范畴内,已实现了彻底的分离,并基本消除了插入和删除等异常问题。3NF的“不彻底”性表现在当关系模式中具有多个候选码,且这些候选码具有公共属性时,可能存在决定因素中不包含候选码,比如,关系模式STUDYTEACH就是这样的。机械工业出版社机械工业出版社744.3 范式4.3.5 多值依赖函数依赖是一种比较直观且容易理解的数据依赖联系。但关系模式的属性之间除了函数依赖以外,还存在其他依赖联系,多值依赖(Multivalued Dependency,简称MVD)就是其中之一。虽然这些依赖联系不大直观,比较难理解,但它确实是现实世界中事物联系的客观反映。一个关系模式,即使在函数依赖范畴内已属于BCNF,但若存在多值依赖,仍然会出现数据冗余过多、插入异常和删除异常等问题。下面介绍多值依赖的概念和性质。机械工业出版社机械工业出版社754.3 范式1多值依赖 在介绍多值依赖之前,我们先看一个例子。例例4.11 4.11 设描述某高校每个系有哪些教师和哪些学生,用非规范化的关系来表示(DEPTNAME)、教师(TEACHER)、和学生名(SNAME )三者之间的关系,如表4-8所示。机械工业出版社机械工业出版社764.3 范式 表表4-8 DEPTNAME、TEACHER、和、和SNAME之间的关系之间的关系DEPTNAMETEACHERSNAME数学系朱红亮李宏张海王强刘志杰江波外语系赵建国刘红红方芳邓晓如果将表4-8转化成一张规范化的二维表 ,就成为如下的表4-9。机械工业出版社机械工业出版社774.3 范式表表4-9 规范化的关系规范化的关系DEPTINFODEPTNAMEDEPTNAMETEACHERTEACHERSNAMESNAME数学系数学系朱红亮朱红亮李宏李宏数学系数学系朱红亮朱红亮王强王强数学系数学系朱红亮朱红亮江波江波数学系数学系张海张海李宏李宏数学系数学系张海张海王强王强数学系数学系张海张海江波江波数学系数学系刘志杰刘志杰李宏李宏数学系数学系刘志杰刘志杰王强王强数学系数学系刘志杰刘志杰江波江波外语系外语系赵建国赵建国刘红红刘红红外语系外语系赵建国赵建国邓晓邓晓外语系外语系方芳方芳刘红红刘红红外语系外语系方芳方芳邓晓邓晓机械工业出版社机械工业出版社784.3 范式 关系模式DEPTINFO(DEPTNAME, TEACHER, SNAME)的唯一候选码是(DEPTNAME, TEACHER, SNAME),即全码,且没有非主属性对候选码的部分依赖和传递函数依赖,因此由定义4.11可知,关系模式DEPTINFOBCNF。但它仍然存在如下一些问题。(1)数据冗余过大:每个系的学生是固定的,但每增加一名教师,其学生姓名就要重复存储一次,造成大量数据冗余。(2)增加操作复杂:当某一个系(数学系)增加一名教师(林玮)时,必须插入多个元组(其个数与学生数量有关,这里是三个):(数学系,林玮,李宏);( 数学系,林玮,王强);( 数学系,林玮,江波)。机械工业出版社机械工业出版社794.3 范式(3)删除操作复杂:当某一个系 (数学系)有学生 (李宏)退学时,则必须删除多个元组 (其个数与教师数量有关,这里是三个:(数学系,朱红亮,李宏),(数学系,张海,李宏),(数学系,刘志杰,李宏。(4)更新异常:某个系要更名时,如有不慎漏改某个元组,就会造成更新异常。 由此可见,这个关系模式虽然已是BCNF,但其数据的增加和删除操作仍然不便,数据冗余十分明显。仔细考察这类关系模式可知,一个系有多名教师 (一对多联系),一个系有多名学生(一对多联系),而且教师与学生之间没有直接联系,这种联系被称为多值依赖,正是这种多值依赖引起关系模式DEPTINFO出现以上的数据冗余过大,增加和删除元组的操作复杂等问题。机械工业出版社机械工业出版社804.3 范式 定义定义4.12 4.12 设R是属性集U上的一个关系模式,X、Y、Z是U的子集,并且Z=UXY。若对于R的任一具体关系r,r在属性 (X,Z)上的每一对值(x, z),就有属性Y上的一组值与之对应,且这组值仅仅决定于属性X上的值而与属性Z上的值无关,则称Y多值依赖于X,记作XY。机械工业出版社机械工业出版社814.3 范式 对于例4.11中的关系模式DEPTINFO,从表4-9的具体关系DEPTINFO中可知,对于属性 (DEPTNAME,SNAME)上的一个值 (数学系,李宏),就有TEACHER上的一组值(朱红亮,张海,刘志杰)与之对应,且这组值仅仅决定于属性DEPTNAME上的值,而与SNAME上的值无关,也就是说对于 (DEPTNAME,SNAME)上的另一个值(数学系,王强),尽管这时SNAME的值已经从“李宏”变成了“王强”,它仍然对应于TEACHER上的同一组值 (朱红亮,张海,刘志杰)。因此TEACHER多值依赖于DEPTNAME,即DEPTNAMETEACHER。机械工业出版社机械工业出版社824.3 范式2多值依赖的性质多值依赖的性质对关系模式R,其属性间的多值依赖有如下的性质:(1)对称性:若XY,则XZ,其中Z= UXY。多值依赖的对称性也称为互补性。例如,对关系模式DEPTINFO的具体关系DEPTINFO(表4-9),因为DEPTNAMETEACHER,由互补性可知:DEPTNAMESNAME。 (2) 函数依赖可导出多值依赖,若XY,则XY。即函数依赖可以看作是多值依赖的特殊情况,这是由于当XY时,对X的每一个值x,Y有一个确定的值y与之对应。所以XY。 机械工业出版社机械工业出版社834.3 范式 (3)传递性:若XY且YZ,则XZY。 (4)增广性:若XY,且VWU,则WXVY。 (5)自反性:若YX,则XY。 (6)多值依赖可导出函数依赖:若XY,ZY,且存在WU,YW=,WZ,则XZ。 (7)合并性:若XY,XZ,则XYZ。 (8)分解性:若XY,XZ,则XYZ,XZY。机械工业出版社机械工业出版社844.3 范式 与函数依赖一样,多值依赖也有平凡多值依赖概念。 对于关系模式R,设X、Y是U的子集,若XY,其中Z=UXY=,则称XY为平凡多值依赖,否则称为非平凡多值依赖。机械工业出版社机械工业出版社854.3 范式多值依赖与函数依赖相比,有下面几个方面的区别:(1)多值依赖的有效性与属性集的范围有关。若XY在U上成立,则XY在W (WU)上一定成立。反之则不然,即若XY在W (WU)上成立,而在U上则不一定成立。 一般地,对于关系模式R,若有XY在W (WU)上成立,则称XY为R的嵌入型多值依赖。 而在函数依赖中却与属性集范围无关,即函数依赖XY的有效性仅决定于X、Y这两个属性集的值。只要在R的任何一个关系r中,任一元组在X和Y上的值满足定义4.1,则函数依赖XY在任何属性集W(XYWU)上都成立。机械工业出版社机械工业出版社864.3 范式(2)多值依赖没有与函数依赖一样的分解律。在函数依赖中有这样的分解律:若函数依赖XY在关系模式R上成立,则对于任何YY都有XY成立。 然而,多值依赖则没有这样的分解律。即若关系模式R的属性集X、Y有多值依赖XY在U上成立,我们却不能断言对于任何YY有XY成立。(3) 多值依赖的动态性。函数依赖只考虑关系模式的静态结构,不管具体关系增加或减少元组,其属性之间的函数依赖对应联系不变。而多值依赖则受其具体关系取值的动态变化影响,即当关系中增加或删除一些元组后,多值依赖的对应联系就会发生变化。机械工业出版社机械工业出版社874.3 范式4.3.6 第4范式(4NF) 从例4.11中的关系模式DEPTINFO可以看出,一个存在多值依赖的关系模式仍存在着数据冗余、插入、删除和更新异常现象,为此引入第4范式的概念。 定义定义4.134.13 设关系模式RlNF,如果对于R的每一个非平凡的多值依赖XY(YX),X都含有候选码,则称R为第四范式,记作R4NF。 根据4NF的定义,对于每一个非平凡的多值函数依赖XY,X都含有候选码,于是就有XY,所以4NF所允许的非平凡的多值依赖XY实际上就是函数依赖。因此,4NF就是限制关系模式的属性之间不允许有非平凡且非函数依赖的多值依赖。机械工业出版社机械工业出版社884.3 范式定理定理4.4 4.4 如果关系模式R4NF,则RBCNF。证明:假设R4NF而R不BCNF,则必存在某个函数依赖XY,使YX且X中没有候选码。下面分两种情况讨论:如果XY=U,则由于XY,所以X中必含有候选码,与X中没有候选码的结论矛盾。如果XYU,所以Z=UXY,则由XY可以导出多值依赖XY且这个多值依赖还是非平凡的,由于X不含有候选码,由定义4.13可知,R不是4NF,与已知矛盾。由此可知,一个关系模式若属于4NF,则必然属于BCNF。机械工业出版社机械工业出版社894.3 范式例例4.124.12 在例4.11中的关系模式DEPTINFO (DEPTNAME,TEACHER,SNAME)不属于4NF。 因为这个关系模式的唯一候选码是(DEPTNAME,TEACHER, SNAME),且DEPTINFO中有两个多值依赖,分别是: DEPTNAMETEACHER DEPTNAMESNAME 若令U= (DEPTNAME,TEACHER,SNAME),X= (DEPTNAME),Y=(TEACHER),则Z=(SNAME) ,由此可知DEPTNAMETEACHER是非平凡多值依赖,但X中显然不含候选码。因此关系模式DEPTINFO不属于4NF。机械工业出版社机械工业出版社904.3 范式 在例4.11中已分析说明这个关系模式是BCNF,这里说明它不是4NF,因此,仍然具有插入、删除等异常问题。其解决办法仍采用分解的方法消去非平凡且非函数依赖的多值依赖。例如可以把DEPTINFO分解为 DEPT-TEACHER(DEPTNAME,TEACHER) DEPT-STUDENT(DEPTNAME,SNAME) 如表4-10和表4-11所示。这两个关系模式都不存在非平凡的多值依赖,各有一个平凡的多值依赖DEPTNAMETEACHER和DEPTNAMESNAME。注意到DEPTNAME是唯一候选码,所以关系模式DEPT-TEACHER和DEPT-STU-DENT都是4NF的。机械工业出版社机械工业出版社914.3 范式 把DEPTINFO分解为两个关系DEPT-TEACHER和DEPT-STU-DENT,它们的数据异常现象会得到较好的改善。DEPTNAMETEACHER数学系朱红亮数学系张海数学系刘志杰外语系赵建国外语系方芳表4-10关系DEPT-TEACHER机械工业出版社机械工业出版社924.3 范式表表4-114-11关系关系DEPT-STU-DENTDEPT-STU-DENTDEPTNAMESNAME数学系李宏数学系王强数学系江波外语系刘红红外语系邓晓 函数依赖和多值依赖是两种最重要的数据依赖。如果只考虑函数依赖,则属于BCNF的关系模式规范化程度已经是最高的了。如果考虑多值依赖,则属于4NF的关系模式规范化程度是最高的。事实上,数据依赖中除函数依赖和多值依赖之外,还有其他的数据依赖,如连接依赖。函数依赖是多值依赖的一种特殊情况,而多值依赖又是连接依赖的一种特殊情况。机械工业出版社机械工业出版社934.3 范式 但连接依赖不像多值依赖和函数依赖那样可由语义直接导出,而只是在关系的连接运算时才能反映出来。存在连接依赖的关系模式仍可能遇到数据冗余过多和插入、修改、删除异常等问题。如果消除属于4NF的关系模式中存在的连接依赖,则可以使它们成为5NF的关系模式。由于连接依赖对数据库的性能影响已不太大,因此在数据库的设计中几乎不需要考虑这种依赖的影响。所以这里也不再讨论连接依赖和5NF。机械工业出版社机械工业出版社944.3 范式4.3.7 4.3.7 规范化小结规范化小结 至此,我们已经介绍了五种范式,不难证明这些范式之间存在如下关系: 4NFBCNF3NF2NF1NF 在关系数据库中,对关系模式的基本要求是满足第一范式。这样的关系模式就是合法的、允许的。但是,人们发现有些属于lNF的关系模式存在插入和删除异常、修改复杂、数据冗余等毛病。人们寻求并得到解决这些问题的方法,这就是规范化方法。机械工业出版社机械工业出版社954.3 范式 规范化的过程是逐步消除不合适的数据依赖的过程,通过模式分解,使原先模式中属性之间的数据依赖联系达到某种程度的“分离”,实现“一事一地”的模式设计原则。分解的最后是让一个关系描述一个概念、一个实体或者实体间的一种联系。若多于一个概念就把它“分离”出去。因此所谓规范化实质上是概念的单一化。 人们认识这个原则是经历了一个过程的。从认识非主属性对候选码的部分函数依赖的危害开始,2FN、3NF、BCNF、4NF的提出是这个认识过程逐步深化的标志。机械工业出版社机械工业出版社964.3 范式关系模式的规范化具体可分为以下几个步骤:关系模式的规范化具体可分为以下几个步骤:1.对1NF关系进行投影,消除原关系中非主属性对码的部分函数依赖,将1NF关系转换为若干个2NF关系。2.对2NF关系进行投影,消除原关系中非主属性对码的传递函数依赖,将2NF关系转换为若干个3NF关系。3.对3NF关系进行投影,消除原关系中主属性对码的部分函数依赖和传递函数依赖(即使决定属性都包含一个候选码),得到一组BCNF关系。4.上述三步可以概括为一步:对原关系进行投影,消除决定属性不是候选码的任何函数依赖。5.对BCNF关系进行投影,消除原关系中非平凡且非函数依赖的多值依赖,得到一组4NF关系。机械工业出版社机械工业出版社974.3 范式关系模式的规范化过程如图关系模式的规范化过程如图4-84-8所示。所示。图图4-8 各种范式及规范化过程各种范式及规范化过程机械工业出版社机械工业出版社984.3 范式 一般地说,规范化程度过低的关系可能会存在插入异常、删除异常、修改复杂、数据冗余过多等问题,需要对其进行规范化,转换成较高级别的范式。但这并不意味着规范化程度越高的关系模式就一定越好。因为对分解了的关系进行一些复杂的查询操作时,就必须进行关系的连接运算,这样比没有分解之前显然增加了查询运算的代价,因为在原来的单个关系中,只需要进行单个关系上的选择和投影运算即可。所以,在设计数据库模式结构时,数据库设计人员必须对现实世界的实际情况和用户需求作进一步分析,确定一个合适的、能够反映现实世界的模式,而不能把规范化的规则绝对化。这就是说,数据库设计人员可以根据用户需求和问题的实际情况,可以在规范化步骤中任何一步终止。机械工业出版社机械工业出版社994.4 4.4 模式分解模式分解 在本章4.1节开始就分析了关系模式STUDY存在数据冗余、插入、删除和更新操作异常问题,通过将关系模式STUDY分解为多个关系模式后,使有关异常问题得到较好解决。然而,在关系模式分解处理过程中会涉及到一些新问题,比如关系模式STUDY是否还有其他的分解结果,即对一个给定的关系模式,可能存在多种分解方法,虽然分解后的模式都是某个级别的模式,但哪种分解结果更好,这就是研究关系模式分解的无损连接性和保持函数依赖的目的。模式分解涉及属性的划分和函数依赖集的划分。机械工业出版社机械工业出版社1004.4 4.4 模式分解模式分解4.4.1 模式分解的准则定义4-14 设F是关系模式R(U,F)的一个函数依赖集,X、Y是属性集U=A1,A2,An的子集,XY是一个函数依赖,如果对于R的每个满足F的关系r,函数依赖XY都成立,则称F逻辑蕴含XY,记为F|=XY。F所蕴含的函数依赖的全体称为F的闭包,记为F+。即F+=XY|F|= XY 。定义4.15 设F是的函数依赖集,Fi=XYXYF+X,YUi,称Fi是F在Ui上的投影,记作F(Ui)。由上述定义可知,F投影的函数依赖的左部和右部都在U1中,这些函数依赖可在F中出现,也可不在F中出现,但一定可以由F推出。 机械工业出版社机械工业出版社1014.4 4.4 模式分解模式分解 例4.13 已知关系模式R,U1=(A,D)U,F=AB,BC,CD,BCA,求F在U1上的投影。 解:在F中没有左部和右部都在U1中的函数依赖,但由AB,BC,CD可以得出ADF+,所以F(U1)=( AD)。机械工业出版社机械工业出版社1024.4 4.4 模式分解模式分解 定义4.16 关系模式R的一个模式分解是指:=R1,R2,,Rn,其中,U=U1U2Un。并且设有Ui Uj,1in,1jn,Fi是F在Ui上的投影,其中Fi=XYXYF+X,YUi。 有时也称为数据库模式。数据库模式的一个具体取值记作=(r1,r2,,rn),称为数据库实例,其中ri是中关系模式Ri(Ui)的一个具体关系。 实际上,关系模式的分解,不仅仅是属性集合的分解,它是对关系模式上的函数依赖集,以及关系模式对应的具体关系进行分解的具体表现。机械工业出版社机械工业出版社1034.4 4.4 模式分解模式分解对于模式分解有以下说明:1.分解是完备的,U中的属性全部分散在分解中。2.在分解中,由于Ui属性构成不同,可能使某些函数依赖消失,即不能保证分解对函数依赖集F是完备的,但应尽量保留F所蕴含的函数依赖,所以对每一个子模式Ri均取F在Ui上的投影。3.分解是不相同的,不允许在中出现一个子模式Ui被另一个子模式Uj包含的情况。4.当需要对若干个关系模式进行分解时,可分别对每个关系模式进行分解。机械工业出版社机械工业出版社1044.4 4.4 模式分解模式分解例例4.14 4.14 设关系模式R(A, B, C),F=AB,BC,r是R(U)满足的一个具体关系,如表4-12所示,可以做出几个不同的分解,看看会出现什么样的问题。(1)将R分解1=R1(A),R2(B),R3(C),则相应关系r被分解为三个关系,如表4-13所示。虽然从范式的角度看,关系r1、r2、r3都是4NF,但这样的分解显然是不可取的。因为它不仅不能保持F,即从分解后的1无法得出AB或BC这种函数依赖,也不能使r得到“恢复”,是指无法通过对关系r1、r2、r3的连接运算操作得到与r一致的元组,甚至无法回答最简单的查询要求。机械工业出版社机械工业出版社1054.4 4.4 模式分解模式分解表表4-12 关系模式关系模式R的一个关系的一个关系rABCa1b1c1a2b1c1a3b2c2a4b3c1表4-13关系分解为三个关系Aa1a2a3a4Bb1b1b2b3Cc1c1c2c1 关系r1 关系r2 关系r3机械工业出版社机械工业出版社1064.4 4.4 模式分解模式分解(2)将R分解为2=R4(A,B),R5(A,C),对应关系r分解为r4和r5。这样分解后问题虽然少了一些,但由于不保持BC,仍然存在插入和删除异常等问题。由表4-14可知,r通过r4、r5得到恢复,即r=r4 r5。这样的分解称为无损连接分解。 表4-14关系分解为两个关系ABa1b1a2b1a3b2a4b3ACa1c1a2c1a3c2a4c1关系关系r4 关系关系r5机械工业出版社机械工业出版社1074.4 4.4 模式分解模式分解(3)将R分解为3=R5(A,C),R6(B,C),对应关系r分解为r5、r6。由表4-15可知则函数依赖AB不被保持,而且rr5 r6。此外,仍然存在插入和删除异常等问题。表4-15关系分解为两个关系ACa1c1a2c1a3c2a4c1BCb1c1b1c1b2c2b3c1 关系r6 关系r5机械工业出版社机械工业出版社1084.4 4.4 模式分解模式分解 (4)将R分解为4=R4(A,B),R6(B,C),对应关系r分解为r4、r6。这是最好的一种分解,既保持了函数依赖F=AB,BC(这样的分解称为保持函数依赖的分解),又可得到r=r4 r6。且不存在插入和删除异常等问题。机械工业出版社机械工业出版社1094.4 4.4 模式分解模式分解 从上述实例分析中可以看到,对于一个给定的关系模式,使得分解后的模式是否与原模式等价,可以有三种不同的评定准则:1.分解具有无损连接性,这种分解仍然存在插入和删除异常等问题;2.分解保持函数依赖,这种分解也存在插入和删除异常等问题;3.分解既保持函数依赖,又具有无损连接性,这是最好的分解。 按照不同的分解准则,模式所能达到的分离程度有所不同,各种范式就是对不同分离程度的测度。机械工业出版社机械工业出版社1104.4 4.4 模式分解模式分解4.4.2 4.4.2 分解的函数依赖保持性和无损连接性分解的函数依赖保持性和无损连接性定义定义4.17 4.17 设= R1(U1),R2(U2),.,Rn(Un)是关系模式R(U)上的一个分解,若,则称分解具有函数依赖保持性。例例4.15 4.15 已知关系模式R,其中U=(SNO,SNAME,SDEPT,CNAME,SCORE),F=SNOSNAME, SNOSDEPT, SNOSCORE 。R的一个分解:U1=(SNO, CNAME,SCORE),F1= (SNO, CNAME )SCORE U2=(SNAME,SDEPT),F2=机械工业出版社机械工业出版社1114.4 4.4 模式分解模式分解 可以看到,上述分解中一个学生只属于一个系的语义消失了。这一语义在R中是通过SNOSDEPT的函数依赖表现出来的。因此,保持函数依赖不会因分解而丢失语义,这是分解的一个重要标准。 如果对R的保持函数依赖的分解为:U1=(SNO, CNAME,SCORE),F1= (SNO, CNAME )SCORE U2=( SNO, SNAME,SDEPT),F2=SNOSDEPT, SNOSNAME 在分解中,保留了R(U)中的所有语义即所有函数。函数依赖的保持性反映了模式分解的依赖等价原则。依赖等价保证了分解后的模式与原有模式数据语义上的一致性。 在模式分解时,除了希望保持函数依赖外,还希望分解后的关系在连接时能恢复到分解前的状态,这就是所谓的无损连接分解。机械工业出版社机械工业出版社1124.4 4.4 模式分解模式分解定义定义4.18 4.18 设对于关系模式R,F是R(U)满足的一个函数依赖集,将R(U)分解成关系模式= R1(U1),R2(U2),.,Rn(Un),若任何属于R的关系r,令r1=R1(r),r2=R2(r),, rn=Rn(r),有r=r1 r2 rn成立,则称分解具有无损连接性分解,简称为无损分解。 这里Ri(r)(i=1,2,3n)是r在Ui上的投影的另一种记法。r的投影连接表达式r1 r2 rn用m(r)表示,称为关系r的投影连接变换式,即:m(r)= r1 r2 rn。 在一般情况下,r和m (r)不一定相等。对于关系模式R(U)关于F的无损连接条件是:任何满足F的关系r,有r=m (r) 。机械工业出版社机械工业出版社1134.4 4.4 模式分解模式分解例例4.16 4.16 设关系模式R中U=(A,B,C,D),F=AB,CD。分析下列分解的函数依赖保持性和无损连接性。U1=(A, B),F1= ABU2=(C, D),F2=CD 因为F1F2 =F,所以具有函数依赖保持性。但不具有无损连接性,例如,可以对R的任一关系r进行分析,如表4-16所示。机械工业出版社机械工业出版社1144.4 4.4 模式分解模式分解表表4-16 关系关系r及其投影及其投影关系关系rABCDa1b1c1d1a2b2c2d2关系r1 关系r2ABa1b1a2b2CDc1d1c2d2机械工业出版社机械工业出版社1154.4 4.4 模式分解模式分解r1 r2很显然r r1 r2,因此不是无损连接。如果一个关系模式的分解不是无损连接分解,那么分解后的关系通过自然连接运算无法恢复到分解前的关系。如何保证关系模式分解具有无损连接性呢?这就要求在对关系模式进行分解时必须利用该模式属性间函数依赖的性质,并通过适当的方法判别其分解是否为无损连接。根据定义4.18来判断一个分解的无损连接性是相当困难的,算法4.1给出了一个判别的方法。ABCDa1b1c1d1a1b1c2d2a2b2c1d1a2b2c2d2机械工业出版社机械工业出版社1164.4 4.4 模式分解模式分解算法4.1无损连接性的测试输入:关系模式R(U,F),其中U=A1,A2,An,F=FD1,FD2,FDp,记函数依赖FDi为XiA1j。设 R(U)的一个分解=R1(U1),R2(U2),.,Rk(Uk),其中U=U1U2.Uk。输出:相对于F具有或不具有无损连接性的判断。算法步骤:(1)构造一张k行n列的表格,每列对应一个属性Aj(j=1,2,.,n),每行对应分解中的一个关系模式Ri(Ui)的属性集合(i=1,2,.,k)。如果AjUi,那么在表格的第i行第j列处填上符号aj,否则填上符号bij。机械工业出版社机械工业出版社1174.4 4.4 模式分解模式分解 (2)反复检查F的每一个函数依赖,并修改表格中的元素,直到表格不能修改为止。其方法如下:取F中函数依赖XY,如果表格中有两行在X分量上相等,在Y分量上不相等,那么修改Y分量上的值,使这两行在Y分量上也相等,具体修改分两种情况:1.如果Y的分量中有一个是aj,那么另一个也修改成aj;2.如果Y的分量中没有aj,那么用下标i较小的那个bij替换另一个符号;(3)若修改结束后的表格中有一行是a1,a2,.,an,则算法终止, 相对于F是无损连接分解,否则,相对于F不是无损连接分解。机械工业出版社机械工业出版社1184.4 4.4 模式分解模式分解 定理定理4.5 4.5 关系模式R(U)的一个分解=R1(U1),R2(U2),.,Rk(Uk)是无损连接分解的充分必要条件是算法4.1终止时,最终结果表中有一行的元素为a1,a2,.,an。 例例4.17 4.17 设关系模式R,U=(A,B,C,D,E),函数依赖集是F=BC, DB,分解为=R1(A,D),R2(B,C),R3(B,D),试判断R的分解是否为无损连接分解。解:(1)构造初始表,如表4-16所示。机械工业出版社机械工业出版社1194.4 4.4 模式分解模式分解表4-16 初始表ABCD(A,D)a1b12b13a4(B,C)b21a2a3b24(B,D)b31a2b33a4(2)根据BC,对表4-16进行处理,由于属性列B上第二行、第三行具有相同的值a2,所以将属性列C上的a3和 b33改为同一符号a3。如表4-17所示。表表4-17 4-17 第一次处理结果第一次处理结果ABCD(A,D)a1b12b13a4(B,C)b21a2a3b24(B,D)b31a2a3a4机械工业出版社机械工业出版社1204.4 4.4 模式分解模式分解 (3)根据DB,对表表4-17进行处理,由于属性列D上第一行、第三行具有相同的值a4,所以将属性列B上的b12和a2改为同一符号a2。如表4-18所示。表4-18 第二次处理结果ABCD(A,D)a1b12b13a4(B,C)b21a2a3b24(B,D)b31a2a3a4机械工业出版社机械工业出版社1214.4 4.4 模式分解模式分解 (4)再根据BC,对表表4-18进行处理,由于属性列B上第一行、第二行、第三行具有相同的值a2,所以将属性列C上的b13改为a3。如表4-19所示。表4-19 第三次处理结果ABCD(A,D)a1b12a3a4(B,C)b21a2a3b24(B,D)b31a2a3a4通过上述修改,使第一行成为a1,a2, a3,a4,则算法终止,具有无损连接性。机械工业出版社机械工业出版社1224.4 4.4 模式分解模式分解 定理定理4.64.6 如果R(U)的分解为=R1(U1),R2(U2),其中U=UlU2,F为R(U)所满足的函数依赖集合,则分解是无损连接的充分必要条件为:(U1U2) (U1U2)或者(U1U2) (U2U1)成立。 此定理表明,当关系模式R分解成两个关系模式R1(U1)和R2(U2)时,如果其公共属性能函数决定U1或U2中的其他属性,这样的分解就是无损连接的。机械工业出版社机械工业出版社1234.4 4.4 模式分解模式分解例例4.184.18 设关系模式R(A,B,C),F=AB,则1=Rl(A,B),R2(A,C)是无损连接,而2=R1(A,B),R3(B,C)不是无损连接。解:(1)对于分解1,这里U=(A,B,C),U1=(A,B),U2=(A,C)。根据上述定理可证明1是无损连接的。 因为U1U2=(A);U1U2=(B),因为AB属于F,所以(U1U2) (U1U2)在F中成立,因此由定理4. 6可知,关系模式R(U)的分解1=R1(A,B),R2(A,C)具有无损连接性。机械工业出版社机械工业出版社1244.4 4.4 模式分解模式分解(2) 用同样的办法可证明2不是无损连接的。这里U=(A,B,C),U1=(A,B),U3=(B,C)。 因为U1U3=(B);UlU3=(A);U3U1=(C),所以(U1U3)(U1U3)和(U1U3)(U3U1)都不能由F导出,故由定理4.6可知,关系模式R(U)的分解2=R1(A,B),R3(B,C)不具有无损连接性。机械工业出版社机械工业出版社1254.4 4.4 模式分解模式分解 定义定义4.19 4.19 设关系模式R(U)的一个分解=R1(U1),R2(U2),.,Rk(Uk),F是R(U)满足的函数依赖集,若,则R(U)的分解=R1(U1),R2(U2),Rk(Uk)保持函数依赖。机械工业出版社机械工业出版社1264.4 4.4 模式分解模式分解4.4.3 4.4.3 模式分解的算法模式分解的算法 针对上述模式分解的准则,规范化理论提出了一套完整的模式分解的算法。关于关系模式的分解有以下几个重要事实:1.若要求分解保持函数依赖,那么模式分解一定能够达到3NF,但不一定能达到BCNF, 2.若要求分解既保持函数依赖,又具有无损连接性,那么模式分解一定能够达到3NF,但不一定能达到BCNF。3.若要求分解具有无损连接性,那一定可达到4NF。 它们分别由算法4.2、算法4.3和算法4.4来完成。机械工业出版社机械工业出版社1274.4 4.4 模式分解模式分解算法算法4.24.2 将一个关系模式转换为3NF的保持函数依赖的分解。输入:给定关系模式R,属性集合U和R上成立的函数依赖集F。输出:R的一个分解= R1(U1),R2(U2),.,Rn(Un),其中的每个Ri(Ui)都是3NF的,且保持函数依赖。机械工业出版社机械工业出版社1284.4 4.4 模式分解模式分解算法步骤:算法步骤:1.求出函数依赖集F的最小覆盖Fmin,并记为F=Fmin,令=。2.如果R中存在某些属性U1在F中的所有函数依赖的左部和右部都不出现,那么将这些属性构成一个关系模式R(U1),然后把这些属性从U中去掉,剩余的属性仍记作U,令= R1(U1) 。3.如果F中有函数依赖XY,满足XY=U,则= R(U) ,R不用分解,转至步骤(4)。否则,对F中所有以X为左部的函数依赖XY1,XY2,XY3,XYk,则构成关系模式R(X Y1 Y2Y3. Yk),其函数依赖集为XY1,XY2,XY3,XYk,令= R(X Y1 Y2Y3. Yk) 。4.输出。机械工业出版社机械工业出版社1294.4 4.4 模式分解模式分解 例4.19 设关系模式R(A,B,C,D,E,G),它满足的函数依赖集F=AB,AEG,CDA,CED,BCD已是最小函数依赖集,则由算法4.2可得R(A,B,C,D,E,G)的一个分解: =Rl(A,B),R2(A,E,G),R3(C,D,A),R4(C,E,D),R5(B,C,D) 这个分解显然将原有的函数依赖F保持下来,且每个分解模式都是3NF,这个分解具有无损连接和保持函数依赖两个特性机械工业出版社机械工业出版社1304.4 4.4 模式分解模式分解算法4.3 将一个关系模式转换为3NF的保持函数依赖和无损连接的分解。(1)设X是R的码。R已由算法4.2分解为= R1,R2,.,Rk,令=R*。(2)若有某个Ui,XUi,将R*从中去掉。(3)就是所求的解。 R*显然属于3NF,而显然保持函数依赖,只要判断的无损连接性就行了。 由于中必定有某关系模式R(T)的属性组TX。由于X是R的码,任取UT中的属性B,必然存在某个i,使得BT(i)。对i采用归纳法可以证明由算法4.1,表中关系模式R(T)所在的行一定可成为a1,a2,.,an。的无损连接性得证。机械工业出版社机械工业出版社1314.4 4.4 模式分解模式分解算法算法4.44.4 将一个关系模式转换为BCNF的无损连接分解。 令=R 检查中各关系模式是否均属于BCNF。若是,则算法终止。设中Ri不属于BCNF,那么必有XAF+i(AX),且X非Ri的码。因此,XA是Ui的真子集。对Ri进行分解:=S1,S2,US1=XA,US2= UiA,以代替Ri返回第(2)步。 由于U中属性有限,因而有限次循环后算法4.4一定会终止。机械工业出版社机械工业出版社132小结小结 本章主要讨论了关系数据库中的模式设计问题,介绍了函数依赖的概念,其中包括完全函数依赖、部分函数依赖和传递函数依赖等,这些概念是规范化理论的依据和规范化程度的准则。 一个关系只要其分量不可再分,则满足1NF;消除1NF关系中非主属性对码的部分函数依赖,得到2NF;消除2NF关系中非主属性对码的传递函数依赖,得到3NF;消除3NF关系中主属性对码的部分函数依赖和传递函数依赖,可得到BCNF。这四种范式讨论的都是函数依赖范畴内的关系模式的范式问题。机械工业出版社机械工业出版社133小结小结 对BCNF关系进行投影,消除原关系中非平凡且非函数依赖的多值依赖,得到4NF。函数依赖和多值依赖是数据依赖的重要组成部分。 关系模式在分解时应保持等价,有数据等价和语义等价两种,分别用无损连接分解和保持函数依赖两个特征来衡量。判定模式分解前后是否等价的准则有三种:保持函数依赖、具有无损连接性、既有无损连接性又保持函数依赖。机械工业出版社机械工业出版社134
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号