1、绪论绪论 关系数据库是由一系列关系组成的,因此关系数据库关系数据库是由一系列关系组成的,因此关系数据库的设计归根结底是如何构造关系。要建立一个关系数据库,的设计归根结底是如何构造关系。要建立一个关系数据库,首先要设计关系模式,然后将若干关系模式构成关系数据首先要设计关系模式,然后将若干关系模式构成关系数据库模式。然而,针对一个具体问题,应该如何构造一个适库模式。然而,针对一个具体问题,应该如何构造一个适合它的数据库模式,即应该构造几个关系模式,每个关系合它的数据库模式,即应该构造几个关系模式,每个关系模式由哪些属性组成,这些关系的完整性如何确定等。在模式由哪些属性组成,这些关系的完整性如何确定
2、等。在构造的关系中,有时会出现数据冗余和更新异常等现象,构造的关系中,有时会出现数据冗余和更新异常等现象,这是由关系中各属性之间的相互依赖性和独立性造成的。这是由关系中各属性之间的相互依赖性和独立性造成的。这些就是关系数据库的设计问题,关系数据库的规范化理这些就是关系数据库的设计问题,关系数据库的规范化理论,为我们设计出合理的数据库提供了有利的工具。论,为我们设计出合理的数据库提供了有利的工具。机械工业出版社机械工业出版社0 本章将从一个本章将从一个“不好不好”的数据库模式实例出发,阐明的数据库模式实例出发,阐明关系模式规范化理论研究的实际背景,然后介绍规范化理关系模式规范化理论研究的实际背景
3、,然后介绍规范化理论的有关概念和方法,包括关系可能存在的插入、删除等论的有关概念和方法,包括关系可能存在的插入、删除等异常问题和解决方法,函数依赖定义及其推理规则,各种异常问题和解决方法,函数依赖定义及其推理规则,各种范式及其相互关系,关系模式的分解特性等内容。范式及其相互关系,关系模式的分解特性等内容。机械工业出版社机械工业出版社1目录目录4.1 规范化问题的提出规范化问题的提出14.2 函数依赖函数依赖24.3 范式范式34.4 模式分解模式分解4小结小结5习题习题2机械工业出版社机械工业出版社24.1 规范化问题的提出规范化问题的提出 数据库的逻辑设计为什么要遵循一定的规范化理数据库的逻
4、辑设计为什么要遵循一定的规范化理论?什么是好的关系模式?某些论?什么是好的关系模式?某些“不好不好”的关系模式的关系模式会导致哪些问题?可以通过一个具体的例子加以分析。会导致哪些问题?可以通过一个具体的例子加以分析。例例4.1 已知一个教学管理数据库,其中用于描述学生的关系模式如下:STUDY(SNO,SNAME,SDEPT,MNAME,CNAME,SCORE)机械工业出版社机械工业出版社34.1 规范化问题的提出规范化问题的提出 其中,SNO表示学生的学号,SNAME表示学生姓名,SDEPT表示学生所在的系名,MNAME表示系主任的姓名,CNAME表示课程名称,SCORE表示课程成绩。由现实
5、世界的已知事实可知:一个学号只对应一个学生;一个学生只属于一个系,一个系有若干学生;一个系只有一名系主任;一个学生可以选修多门课程,每门课程可以有若干学生选修;每个学生所选的每门课程只有一个成绩。机械工业出版社机械工业出版社44.1 规范化问题的提出规范化问题的提出 在此关系模式中填入一些具体的数据,可得到STUDY关系模式的实例,如表4-1所示。表表4-1 关系关系STUDYSNOSNAMESDEPTMNAMECNAMESCORE20048001张红计算机系王华数据结构9220048001张红计算机系王华离散数学8520048001张红计算机系王华操作系统9020048002吴大伟数学系李超
6、高等数学8820048002吴大伟数学系李超数值分析9320048003刘志华计算机系王华数据结构8620048003刘志华计算机系王华离散数学9120048003刘志华计算机系王华操作系统89机械工业出版社机械工业出版社54.1 规范化问题的提出规范化问题的提出 上述关系虽然看起来简单明了,但在实际使用过程中却会出现数据冗余和操作异常问题。(1)数据冗余 数据冗余是指如果某个学生选修了多门课程,那么该学生姓名、所在的系名和系主任的姓名就要重复出现,它们重复出现的次数等于该系的学生人数乘以每个学生所选修的课程数,这将造成存储空间的浪费。机械工业出版社机械工业出版社64.1 规范化问题的提出规范
7、化问题的提出 由于关系模式STUDY存在上述三个异常问题,因此关系模式STUDY是一个“不好”的关系模式。一个“好”的模式应当不会发生插入异常和删除异常,且数据冗余应尽可能少。那么,关系模式STUDY为什么会出现以上异常问题呢?产生上述问题的原因在于该关系模式的结构中,属性之间存在过多的“数据依赖”。一个好的关系模式应当可以通过分解来消除其中不合适的数据依赖。(2)更新异常 在关系STUDY中,如果某个学生改名,则该学生对应的所有记录都要修改属性SNAME的值,如有不慎漏改某些记录,就会造成数据的不一致,破坏数据的完整性。机械工业出版社机械工业出版社74.1 规范化问题的提出规范化问题的提出(
8、3)插入异常 假如一个刚刚成立的系,其行政机构已经建立但尚未招收学生,则因为属性SNO的取值为空,导致诸如系名和系主任姓名之类的信息无法存入数据库;同样,没被学生选修的课程信息也无法存入数据库;没有选课的学生信息也无法存入数据库。(4)删除异常 假如一个系的学生毕业了,要删除这些学生的记录,则系名和系主任的姓名也将被一起删除,而事实上这个系和系主任依然存在,但在数据库中却无法找到该系的信息。机械工业出版社机械工业出版社84.1 规范化问题的提出规范化问题的提出 由于关系模式STUDY存在上述三个异常问题,因此关系模式STUDY是一个“不好”的关系模式。一个“好”的模式应当不会发生插入异常和删除
9、异常,且数据冗余应尽可能少。那么,关系模式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 关系STUDENTSNOSNAMESDEPT2004800
10、1张红张红计算机系计算机系20048001张红张红计算机系计算机系20048001张红张红计算机系计算机系20048002吴大伟吴大伟数学系数学系20048002吴大伟吴大伟数学系数学系20048003刘志华刘志华计算机系计算机系20048003刘志华刘志华计算机系计算机系20048003刘志华刘志华计算机系计算机系机械工业出版社机械工业出版社104.1 规范化问题的提出规范化问题的提出表表4-3 关系关系GRADESNOCNAMESCORE20048001数据结构9220048001离散数学8520048001操作系统9020048002高等数学8820048002数值分析932004800
11、3数据结构8620048003离散数学9120048003操作系统89 机械工业出版社机械工业出版社114.1 规范化问题的提出规范化问题的提出 表表4-4 关系关系DEPARTMENT 分解之后,这三个关系模式都不会发生插入异常和删除异常的问题,数据冗余也得到了控制。模式分解是规范化设计的一条原则:如果关系模式有冗余问题就应该分解它。那么,如何来确定关系的分解是否益?分解后是否仍然存在数据冗余和更新异常等问题?什么样的关系模式才算是一个比较好的关系模式?这些都是后面几节将要介绍的关系模式的函数依赖、关系模式规范化等所涉及的内容。SDEPTMNAME计算机系王华数学系李超机械工业出版社机械工业
12、出版社124.2 函数依赖 我们知道,关系是元组的集合,关系模式是对这个集合中元组的数据组织方式的结构性描述。一个关系模式一般简记为R(U,F),其中,R为关系名,U为一组属性,且U=A1,A2,An,F为关系R在U上满足的一组函数依赖。有时,在所讨论的问题不涉及F时,关系模式简记为R(U)。本节将讨论关系模式的函数依赖、候选码、主码、函数依赖的推理规则等问题。机械工业出版社机械工业出版社134.2 函数依赖函数依赖 关系与关系模式是两个联系十分紧密但又有区别的概念。关系实质上是一张二维表,表的每一行为一个元组,因此,关系是元组的集合,它其实是笛卡尔积的一个子集。从一张二维表的角度来看,关系模
13、式其实是把所有元组删去以后的一张空表,它是对元组的数据组织方式的结构性描述。当把若干元组填入关系模式后,所得到的二维表就是一个关系,且是一个具体的关系,即关系是关系模式的一个取值实例。机械工业出版社机械工业出版社144.2 函数依赖函数依赖 一般来说,关系模式是相对稳定的,比如关系模式STUDENT,而关系却是不断变化的,如表4-2所示的关系STUDENT,它仅仅是关系模式STUDENT的一个取值实例,称为具体关系。在表4-2中不管是增加一个元组或是减少一个元组,就得到一个新的关系虽然其关系名可以不变,但它已是关系模式STUDENT的另一个具体关系了。因此,每一个关系都对应一个关系模式,而一个
14、关系模式可以对应多个关系即在数据库中,关系模式是相对稳定的、静态的而关系却是动态变化的、不稳定的,而关系的每一次变化结果,都是关系模式对应的一个新的具体关系。在以后的一般讨论中,一个关系模式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,简
15、称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)函数依赖不是指关系模
16、式R(U)的某个或某些具体关系满足的约束条件,而是指R(U)的一切具体关系r都要满足的约束条件。(2)函数依赖和其他数据依赖一样,是一个语义范畴的概念。只能根据属性的语义来确定一个函数依赖。例如上述关系模式STUDY,当学生不存在重名的情况下,可以得SNAMESDEPT,这个函数依赖只有在没有同名学生的条件下才成立。如果允许有重名的学生,则系名就不再函数依赖于姓名了。机械工业出版社机械工业出版社184.2 函数依赖函数依赖 数据库设计者应在定义数据库模式时,指明属性之间的函数依赖,使数据库管理系统根据设计者的意图来维护数据库的完整性。因此,设计者可以对现实世界中的一些数据依赖做强制性规定,例如
17、,为了使SNAMESDEPT这个函数依赖成立,用户可以强制规定关系中不允许同名同姓的人出现。这样当输入某个元组在SNAME上的值与关系中已有元组在SNAME上的值相同,则数据库管理系统就拒绝接受该元组。机械工业出版社机械工业出版社19 4.2 函数依赖函数依赖 (3)函数依赖存在的时间无关性。由于函数依赖是指关系中的所有元组应该满足的约束条件,而不是指关系中某个或某些元组所满足的约束条件。关系中元组的增加、删除或更新都不能破坏这种函数依赖。因此,必须根据语义来确定属性之间的函数依赖,而不能单凭某一时刻关系中的实际数值来判断。例如,对于上述关系模式STUDY,根据语义只能存在函数依赖SNOSNA
18、ME,而不应该存在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是非平凡函数依赖。对于任一关系模式,平凡函数依赖都是必然成立的,但它不反映新的语义。因
19、此,在下面的讨论中,若没有特别声明,“XY”都表示非平凡的函数依赖。机械工业出版社机械工业出版社224.1 规范化问题的提出规范化问题的提出例4.3 在例4.1的关系STUDY中存在函数依赖:SNOSNAME SDEPTMNAME 因为任意两行中只要学号SNO相同,学生姓名SNAME必然相同,同理任意两行中只要系名SDEPT相同,系主任姓名MNAME也必然相同。机械工业出版社机械工业出版社234.2 函数依赖函数依赖 SNO和SDEPT是决定因素,SNAME和MNAME是被决定因素。反过来,在关系STUDY中并不存在以下函数依赖:SNAMESNO MNAMESDEPT 因为有可能出现两位学生姓
20、名相同或两个系主任姓名相同的情况。机械工业出版社机械工业出版社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)就是平凡函数依赖。机械工业出版社机械工业出版社25
21、4.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
22、,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),记作:。PXY P
23、XY FXY 机械工业出版社机械工业出版社284.2 函数依赖函数依赖 例例4.4 在关系STUDENT(SNO,SNAME,SDEPT)中,SNOSDEPT,SNOSNAME(若无重名)。在关系GRADE(SNO,CNAME,SCORE)中,SNOCNAME,SNOSCORE。在这里单个属性不能作为决定因素,但属性的组合可以作为决定因素,即:,其中(SNO,CNAME)是决定因素。F(SNO,CNAME)SCORE 机械工业出版社机械工业出版社294.2 函数依赖函数依赖4.2.4 4.2.4 传递函数依赖传递函数依赖 定义 4.4 对于关系模式R(U),设X、Y和Z都是U的子集。如果XY,
24、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,CNA
25、ME)SCORE SNOSDEPT SDEPTMNAME 由最后两个函数依赖还可以得出MNAME传递函数依赖于SNO,即。如果没有姓名相同的学生,还有SNOSNAME等。但显然有SCORESNAME,。其实,对关系模式STUDY还有,因此,SNO是 的决定因素;(SNO,CNAME)是 的决定因素。SCORECNAME)(SNO,F SNAMESNOFSCORECNAME)(SNO,F机械工业出版社机械工业出版社314.2 函数依赖函数依赖4.2.5 码定义 4.5 对关系模式R(U),设K是R中的属性或属性组,KU。如果,则称K为R(U)的候选码或候选关键字(Candidate Key)。若
26、候选码多于一个,则通常在R(U)的所有候选码中选定一个作为主码(Primary Key)。主码也称为主键或主关键字。候选码是能够唯一确定关系中任何一个元组(实体)的最少属性集合,主码也是候选码,它是候选码中任意选定的一个。最简单的情况,单个属性是候选码。最极端的情况,关系模式的整个属性集全体是候选码,同时也是主码,这时称为全码或全键(All-key)。PXY PXY PXY PXY 机械工业出版社机械工业出版社324.2 函数依赖函数依赖下面举一个全码的例子。例 4.6 设有关系模式TR(TEACHER,CNAME,SNAME),其属性TEACHER、CNAME、SNAME分别表示教师、课程和
27、学生。由于一个教师可以讲授多门课程,某个课程可有多个教师讲授。学生也可以选修不同教师讲授的不同课程,因此,这个关系模式的候选码只有一个,就是关系模式的全部属性(TEACHER,CNAME,SNAME),即全码,它也是该关系模式的主码。机械工业出版社机械工业出版社334.2 函数依赖函数依赖 为了方便区别候选码中的属性与其他属性,我们可以得到如下定义。定义 4.6 对关系模式R(U),包含在任何一个候选码中的属性称为主属性(Primary Attribute),不包含在任何候选码中的属性称为非主属(Noprimary Attribute)或非码属性(No-key Attribute)。例4.7
28、在关系模式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)中的主码。因此,
29、SNO是关系模式GRADE(SNO,CNAME,SCORE)的外码。机械工业出版社机械工业出版社354.2 函数依赖函数依赖 主码与外码提供了一种表示两个关系中元组(实体)之间联系的手段。在数据库设计中,经常人为地增加外码来表示两个关系中元组之间的联系,当两个关系进行连接操作时就是因为有外码在起作用。比如,我们需要查看每个学生的姓名、选课名称和成绩时,就必然会涉及STUDENT(SNO,SNAME,SDEPT)和 GRADE(SNO,CNAME,SCORE)对应关系的连接操作,这时,只要使用第三章介绍的SELECTL命令即可:SELECT SNAME,CNAME,SCORE FROM STUD
30、ENT,GRADE WHERE STUDENT.SNO=GRADE.SNO 机械工业出版社机械工业出版社364.3 范式 在关系数据库模式的设计中,为了避免或减少由函数依赖引起的过多数据冗余和更新异常等问题,必须对关系模式进行合理的分解,分解的标准就是规范化理论中的范式。从1971年E.F.Codd提出关系模式规范化理论开始,人们对数据库模式的规范化问题进行了长期的研究,且已经有了很大进展。机械工业出版社机械工业出版社374.3 范式 根据关系模式的规范化理论,关系数据库中的关系模式一定要满足某种程度的要求。满足不同程度要求的关系模式称之为不同的范式(Normal Form),因此,范式既可以
31、作为衡量关系模式规范化程度的标准,又可以看作满足某一程度要求的关系模式的集合。目前,主要有六个范式级别,它们分别是第一范式(简称lNF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式和第五范式。满足最低要求的关系模式叫第一范式。若第一范式再满足一些要求就称为第二范式,其余以此类推。因此,各范式之间的关系为INF2NF3NFBCNF4NF5NF,如图4-1所示。机械工业出版社机械工业出版社384.3 范式 图图4-1 各种范式之间的关系各种范式之间的关系机械工业出版社机械工业出版社394.3 范式 将一个低级别范式的关系模式,通过模式分解转换为若干个高一级范式的关系模式
32、的过程,称为规范化(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 范式 由定义可知,第一范式是一个不
33、含重复组的关系,也不存在嵌套结构。为了与规范化关系相区别,把不满足第一范式的关系称为非规范化的关系。在任何一个关系数据库系统中,第一范式是对关系模式的一个最起码的要求,所有的关系模式必须是第一范式,不满足第一范式的数据库不能称为关系数据库。表4-5所示的课程成绩关系是一个典型的非规范化关系,因为属性“成绩”可以分解,将其转化为第一范式,如表4-6所示。机械工业出版社机械工业出版社424.3 范式表表4-5 4-5 课程成绩关系课程成绩关系 学号姓名 成绩英语高等数学20048001张红859020048002吴大伟919520048003刘志华887220048004王英75802004800
34、5李建军9296机械工业出版社机械工业出版社434.3 范式 表表4-6 规范化的课程成绩关系规范化的课程成绩关系学号 姓名 英语成绩高等数学成绩20048001张红859020048002吴大伟919520048003刘志华887220048004王英758020048005李建军9296机械工业出版社机械工业出版社444.3 范式 然而,一个关系模式仅仅满足第一范式是不够的。前面讨论的关系模式STUDY属于第一范式,但它具有大量的数据冗余和插入异常、删除异常、更新异常等弊端。为什么会存在这种问题呢?下面来分析一下STUDY中的函数依赖关系,它的码是(SNO,CNAME)这一属性集,所以有:
35、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,且每一个非主属性完全,且每一个非主属性完全函数依赖于函数依赖
36、于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,C
37、NAME)SNAME,(SNO,CNAME)MNAME。但是,根据这个问题的实际语义可知SNOSNAME、SNOMNAME,故由部分函数依赖的定义可知:机械工业出版社机械工业出版社484.3 范式 即非主属性SNAME和MNAME是部分函数依赖于候选码(SNO,CNAME)。由2NF的定义可知,关系模式STUDY不是2NF的。关系模式STUDY中的函数依赖可由图4-3表示。SNAME)CNAME,SNO(PMNAME)CNAME,SNO(P 图图4-3关系模式关系模式STUDY的函数依赖的函数依赖机械工业出版社机械工业出版社494.3 范式 由于关系模式STUDY是1NF而不是2NF,因此它存
38、在着数据冗余过多、删除异常和插入异常等问题,而产生这些问题的主要原因之一是这个关系模式中的属性存在部分函数依赖。因此,只要消除关系模式中属性间的部分函数依赖,就有可能解决或减轻数据冗余过多、删除异常和插入异常等问题。解决这个问题的办法就是将关系模式进行分解,使其新的关系模式中属性之间不存在部分函数依赖。机械工业出版社机械工业出版社504.3 范式 STUDENTS(SNO,SNAME,SDEPT,MNAME)GRADE(SNO,CNAME,SCORE)其中,关系模式STUDENTS中的候选码SNO和关系模式GRADE中的候选码(SNO,CNAME)都是唯一的。因此,经过这样的分解就使得关系模式
39、STUDENTS和GRADE中的非主属性都完全函数依赖于主码了,即关系模式STUDENTS和GRADE都属于2NF。这样,表4-1所示的关系经过分解所得的两个关系,其数据冗余度已得到改善,但有关的异常问题仍然存在。机械工业出版社机械工业出版社514.3 范式 关 系 模 式 S T U D Y 经 过 分 解 后,在STUDENTS中可以插入尚未选课的学生。如果一个学生所有的选修课记录在GRADE中被删除,仍不会影响该学生在STUDENTS中的记录;由于学生选课情况与学生的基本情况分开存储在两个关系中,因此无论该学生选多少门课程,他的SNAME和SDEPT值都只存储一次,这就大大降低了数据冗余
40、。另外,当某个学生转系时,只需修改STUDENTS关系中的SDEPT和MNAME的值,而这两个值仅被存储一次,因此简化了修改操作。机械工业出版社机械工业出版社524.3 范式 关系关系STUDENTS中仍然存在着一定的异常。中仍然存在着一定的异常。1.若某个系刚刚成立还没有开始招生时,则SDEPT和MNAME的值无法插入,造成了插入异常。2.若某个系的学生全部毕业了,在删除所有学生记录的同时,该系的信息也被删除了,这样便造成了删除异常。3.数据冗余依然存在,当多个学生处于同一个系时,MNAME的值被存储多次。4.若某个系要更换系主任时,则要逐一修改该系的MNAME值,如有不慎漏改某些记录,就会
41、造成更新异常。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是完全函数依赖于候选码(S
42、NO,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 STUDE
43、NTS中的函数依赖中的函数依赖机械工业出版社机械工业出版社564.3 范式 一个关系模式R若不是3NF,就会产生与2NF类似的问题,仍然存在数据冗余过多、删除异常和插入异常等问题,解决的办法仍然是进行模式分解。可以将STUDENTS分解为下面两个关系模式:DEPARTMENT(SDEPT,MNAME)STUDENT(SNO,SNAME,SDEPT)分解后的两个关系模式DEPARTMENT和STUDENT分别有唯一候选码SDEPT和SNO,已不存在非主属性传递函数依赖于候选键的情况,因此DEPARTMENT和STUDENT都是3NF的关系模式。机械工业出版社机械工业出版社574.3 范式 至此,
44、例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的一
45、个候选码,且KA是部分函数依赖,则R中必然存在某个真子集K,且KK,则A必然函数依赖于真子集K,即KA。由于A是非主属性,因此AK=。因为KK,故KK(平凡函数依赖),但KK。从KK和KA可知KA是传递函数依赖。因此,可把部分函数依赖看作是传递函数依赖的特例。机械工业出版社机械工业出版社594.3 范式 部分函数依赖和传递函数依赖是关系模式产生冗余和异常的两个重要原因。由于3NF模式中不存在非主属性对候选码的部分函数依赖和传递函数依赖,因此消除了很大一部分存储异常,具有较好的性能。将一个2NF规范到3NF后,可以在一定程度上减少原2NF关系中的插入异常、删除异常、数据冗余等问题。但是仍不能完全
46、消除这些问题。机械工业出版社机械工业出版社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的一个
47、候选码,则称R属于BC范式(Boyce-Codd Normal Form),简称BCNF,记作RBCNF。以上定义其实等价于:在满足1NF的关系模式R中,若每一个决定因素都包含有候选码,则RBCNF。机械工业出版社机械工业出版社624.3 范式 若关系模式R满足BCNF的定义,则它具有以下3个结论:R的所有非主属性都完全函数依赖于每一个候选码,因此R2NF。R的所有主属性都完全函数依赖于不包含它的候选码。R中没有任何属性完全函数依赖于任何一组非候选码属性。由以上结论可知,BCNF既检查非主属性,又检查主属性,显然比3NF限制更加严格。当只检查非主属性而不检查主属性时,就成了3NF。因此,可以说
48、任何满足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。
49、然而,一般地说,若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。机械工业出版社机械工业出版社6
50、54.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,
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。