1、第第 二二 章章 关系数据库规范化理论关系数据库规范化理论 建立在关系模型基础上实现的建立在关系模型基础上实现的 数据库系统称为关系数据库,相数据库系统称为关系数据库,相应的应的DBMS称为关系数据库管理系统(称为关系数据库管理系统(RDBMS)。)。如何设计一个适合的关系数据库系统,关键是如何设计一个适合的关系数据库系统,关键是关系数据库模式关系数据库模式的设计的设计,一个好的关系数据库模式应该包括多少,一个好的关系数据库模式应该包括多少关系模式关系模式,而,而每一个关系模式又应该包括哪些每一个关系模式又应该包括哪些属性,属性,又如何将这些相互关联又如何将这些相互关联的关系模式组建一个适合的
2、的关系模式组建一个适合的关系模型关系模型,这些工作决定了到整个,这些工作决定了到整个系统运行的效率,也是系统成败的关键所在。系统运行的效率,也是系统成败的关键所在。要设计一个好的关系数据库,必须需要一定理论指导。关系数要设计一个好的关系数据库,必须需要一定理论指导。关系数据库的据库的规范化理论就是数据库设计的一个理论指导规范化理论就是数据库设计的一个理论指导。本章主要讨论本章主要讨论关系数据库规范化理论关系数据库规范化理论,讨论一个好的关系模式,讨论一个好的关系模式的标准,以及如何将不好的关系模式转换成好的关系模式的标准,以及如何将不好的关系模式转换成好的关系模式第第 二二 章章 关系数据库规
3、范化理论关系数据库规范化理论 2.1 2.1 规范化问题的提出规范化问题的提出2.2 2.2 函数依赖函数依赖2.3 2.3 关系规范化关系规范化 2.4 2.4 关系模式的分解准则关系模式的分解准则2.5 2.5 小结小结2.1 2.1 规范化问题的提出规范化问题的提出关系数据库的规范化理论最早是由关系数据库的规范化理论最早是由关系数据库的创始关系数据库的创始人人E.F.CoddE.F.Codd提出的,提出的,后经许多专家学者对关系数据库理论作了深入的研究后经许多专家学者对关系数据库理论作了深入的研究和发展,形成了一整套和发展,形成了一整套有关关系数据库设计的理论有关关系数据库设计的理论。关
4、系数据库的规范化理论主要包括三个方面的内容:关系数据库的规范化理论主要包括三个方面的内容:u函数信赖函数信赖u范式(范式(Normal FormNormal Form)u模式设计和模式分解模式设计和模式分解其中,其中,函数信赖函数信赖起着核心的作用,是模式分解和模式起着核心的作用,是模式分解和模式设计的基础,设计的基础,范式范式是模式分解的标准。是模式分解的标准。2.1 规范化问题的提出规范化问题的提出数据库的设计为什么要遵循一定的规范化理论?数据库的设计为什么要遵循一定的规范化理论?什么是好的关系模式?什么是好的关系模式?某些不好的关系模式可能导致哪些问题?某些不好的关系模式可能导致哪些问题
5、?下面通过例子进行分析下面通过例子进行分析:例如,例如,设有描述学生修课及住宿情况的关系模式:设有描述学生修课及住宿情况的关系模式:S-L-CS-L-C(SnoSno,Sdept,Sloc,Sdept,Sloc,CnoCno,Grade,Grade)SnoSno表示学生学号,表示学生学号,SdeptSdept表示学生所在的表示学生所在的 系,系,SlocSloc表示学生表示学生所住宿舍楼,所住宿舍楼,Cno表示课程号,表示课程号,GradeGrade表示成绩。表示成绩。2.1 规范化问题的提出规范化问题的提出Sno Sno Sdept Sdept SLOC SLOC Cno Cno Grade
6、 Grade 9812101 9812101 计算机计算机 2 2公寓公寓 DB DB 80809812101 9812101 计算机计算机 2 2公寓公寓 OS OS 85859821101 9821101 信息信息 1 1公寓公寓 C C 90909821101 9821101 信息信息 1 1公寓公寓 DS DS 84849821102 9821102 信息信息 1 1公寓公寓 OS OS 7878S-L-C关系模式实例关系模式实例l 分析以上关系中的数据,我们可以看出:分析以上关系中的数据,我们可以看出:(SNO,CNO)属性的组合属性的组合能唯一标识一个元组,所以能唯一标识一个元组,
7、所以(SNO,CNO)是该关系模式的是该关系模式的主码主码。3.3.删除异常删除异常 如果某个学生不再选修如果某个学生不再选修C C课程,本应该只删去课程,本应该只删去C C,但但C C是主是主关系键的一部分,为保证实体完整性,必须将整个元组一起删关系键的一部分,为保证实体完整性,必须将整个元组一起删掉,这样有关该学生的其它信息也随之丢失。掉,这样有关该学生的其它信息也随之丢失。2.1 规范化问题的提出规范化问题的提出但在进行数据库的操作时,会出现以下几方面的问题:但在进行数据库的操作时,会出现以下几方面的问题:1.数据冗余数据冗余 学生所在的系名和这个系所对应的宿舍楼名字存储的次数等学生所在
8、的系名和这个系所对应的宿舍楼名字存储的次数等于该系的学生人数乘以每个学生选修的课程门数,数据的冗于该系的学生人数乘以每个学生选修的课程门数,数据的冗余度很大,浪费了存储空间。余度很大,浪费了存储空间。2.插入异常插入异常 如果某个学生尚未选课如果某个学生尚未选课,则学生所在的系名和这个系所对应的宿则学生所在的系名和这个系所对应的宿舍楼无法插入到数据库中。舍楼无法插入到数据库中。因为在这个关系模式中,因为在这个关系模式中,(SNO,CNO)是主关系键。根据关系是主关系键。根据关系的实体完整性约束,主关系键的值不能为空,当某个学生尚未选课,的实体完整性约束,主关系键的值不能为空,当某个学生尚未选课
9、,即即Cno为空为空,因此不能进行插入操作。因此不能进行插入操作。2.1 规范化问题的提出规范化问题的提出4.更新异常更新异常 如果某一学生从计算机系转到信息系,那么不但要修改此学如果某一学生从计算机系转到信息系,那么不但要修改此学生的生的Sdept列的值列的值,而且还要修改其而且还要修改其Sloc的值的值,稍有不慎,就有稍有不慎,就有可能漏改某些记录,这就会造成数据的不一致性,破坏了数可能漏改某些记录,这就会造成数据的不一致性,破坏了数据的完整性。据的完整性。由于存在以上问题,我们说,由于存在以上问题,我们说,S-L-CS-L-C是一个不好的关系模式。那么,怎是一个不好的关系模式。那么,怎样
10、才能得到一个好的关系模式呢?样才能得到一个好的关系模式呢?我们把关系模式我们把关系模式S-L-CS-L-C分解为下面三个结构简单的关系模式,如图所示。分解为下面三个结构简单的关系模式,如图所示。Sno Sno Sdept Sdept SLOC SLOC Cno Cno Grade Grade 9812101 9812101 计算机计算机 2 2公寓公寓 DB DB 80809812101 9812101 计算机计算机 2 2公寓公寓 OS OS 85859821101 9821101 信息信息 1 1公寓公寓 C C 90909821101 9821101 信息信息 1 1公寓公寓 DS DS
11、 84849821102 9821102 信息信息 1 1公寓公寓 OS OS 7878Sno Sno Cno Cno Grade Grade 9812101 9812101 DB DB 80809812101 9812101 OS OS 85859821101 9821101 C C 90909821101 9821101 DS DS 84849821102 9821102 OS OS 7878Sdept Sdept Sloc Sloc 计算机计算机 2 2公寓公寓 信息信息 1 1公寓公寓 Sno Sno Sdept Sdept 9812101 9812101 计算机计算机 9821102
12、 9821102 信息信息 2.1 规范化问题的提出规范化问题的提出S-LS-DS-C学生关系学生关系S-D(Sno,Sdept)S-D(Sno,Sdept)选课关系选课关系S-C(Sno,Cno,Grade)S-C(Sno,Cno,Grade)系关系系关系S-L(Sdept,Sloc)S-L(Sdept,Sloc)2.1 规范化问题的提出规范化问题的提出在以上三个关系模式中,实现了信息的某种程度的分离,在以上三个关系模式中,实现了信息的某种程度的分离,S-D中存储学生基本信息,与所选课程及宿舍无关;中存储学生基本信息,与所选课程及宿舍无关;S-L中存储系的有关信息,与学生无关;中存储系的有关
13、信息,与学生无关;S-C中存储学生选课的信息,而与学生及系的有关信息无关。中存储学生选课的信息,而与学生及系的有关信息无关。与与S-L-C相比,分解为三个关系模式后,相比,分解为三个关系模式后,数据的冗余度数据的冗余度明显降低。明显降低。当新插入一个系时,只要在关系当新插入一个系时,只要在关系S-L中添加一条记录。中添加一条记录。当某个学生尚未选课,只要在关系当某个学生尚未选课,只要在关系S-D中添加一条学生记录,而与选中添加一条学生记录,而与选课关系无关,这就避免了插入异常。课关系无关,这就避免了插入异常。当某个学生选课后又退选,只需在当某个学生选课后又退选,只需在S-C中删除该学生记录,而
14、关系中删除该学生记录,而关系S-D中有关该学生的信息仍然保留,从而不会引起删除异常。中有关该学生的信息仍然保留,从而不会引起删除异常。同时,由于数据冗余度的降低,数据没有重复存储,也不会引起更新同时,由于数据冗余度的降低,数据没有重复存储,也不会引起更新异常。异常。2.1 规范化问题的提出规范化问题的提出经过上述分析,我们说分解后的关系模式是一个好的关系数据库模式。经过上述分析,我们说分解后的关系模式是一个好的关系数据库模式。一个好的关系模式应该具备以下四个条件:一个好的关系模式应该具备以下四个条件:l尽可能少的数据冗余尽可能少的数据冗余l没有插入异常没有插入异常l没有删除异常没有删除异常l没
15、有更新异常没有更新异常如何按照一定的规范设计关系模式,将结构复杂的关系分解成如何按照一定的规范设计关系模式,将结构复杂的关系分解成结构简单的关系,从而把不好的关系数据库模式转变为好的关结构简单的关系,从而把不好的关系数据库模式转变为好的关系数据库模式,这就是系数据库模式,这就是关系的规范化关系的规范化。我们要设计的关系模式中的各属性是相互依赖、相互制约的,我们要设计的关系模式中的各属性是相互依赖、相互制约的,这样才构成了一个结构严谨的整体。这样才构成了一个结构严谨的整体。因此在设计关模式时,必须从语义上分析这些因此在设计关模式时,必须从语义上分析这些依赖关系依赖关系。2.2 2.2 函数依赖函
16、数依赖1.1.函数依赖的定义函数依赖的定义 函数对我们来说已经是非常熟悉的概念,对公式:函数对我们来说已经是非常熟悉的概念,对公式:Y Y=f f(X X)给定一个给定一个X X值,都会有一个值,都会有一个Y Y值和它对应,也可以说值和它对应,也可以说X X函数决定函数决定Y Y,或或Y Y函数依赖于函数依赖于X X。在关系数据库中讨论函数或函数依赖注重的在关系数据库中讨论函数或函数依赖注重的是语义上的关系,是语义上的关系,比如:比如:省省=f f(城市城市)如果如果“城市城市”是自变量是自变量X X,“省省”是因变量或函数值是因变量或函数值Y Y。并且把并且把X X决定决定Y Y,或或Y Y
17、函数依赖于函数依赖于X X表示为:表示为:X XY Y2.2 2.2 函数依赖函数依赖函数依赖定义函数依赖定义:如果有一个:如果有一个关系模式关系模式R R(A1A1,A2A2,AnAn),X X和和Y Y为为 A1A1,A2A2,AnAn 的子集的子集,那么对于关系那么对于关系R R中的任意一个中的任意一个X X值,都只有一个值,都只有一个Y Y值与之对应,则称值与之对应,则称X X函数决定函数决定Y Y,或或Y Y函函数依赖于数依赖于X X。例如:对学生关系模式:例如:对学生关系模式:StudentStudent(Sno,SName,Sdept,Sno,SName,Sdept,SageSa
18、ge)有:有:SnoSName,SnoSdept,SnoSageSnoSName,SnoSdept,SnoSage 对学生修课关系模式:对学生修课关系模式:SCSC(Sno,Cno,GradeSno,Cno,Grade)有:有:(Sno,CnoSno,Cno)GradeGrade2.2 2.2 函数依赖函数依赖2函数依赖与属性之间的联系类型有关函数依赖与属性之间的联系类型有关(1)在一个关系模式中,如果属性)在一个关系模式中,如果属性X与与Y有有1:1联系时,则存在联系时,则存在函数依赖函数依赖XY,YX,即即 X Y(2)如果属性如果属性X与与Y有有1:m的联系时,则只存在函数依赖的联系时,
19、则只存在函数依赖Y X。例如,例如,Sage,Sdept与与Sno之间均为之间均为1:m联系,所以有联系,所以有 SNOSage,SnoSdept。(3)如果属性如果属性X与与Y有有m:n的联系时,则的联系时,则X与与Y之间不存在任何函数之间不存在任何函数依赖关系。依赖关系。例如,一个学生可以选修多门课程,一门课程又可以为多个学生例如,一个学生可以选修多门课程,一门课程又可以为多个学生选修,所以选修,所以SNO与与CNO之间不存在函数依赖关系。之间不存在函数依赖关系。由于函数依赖与属性之间的联系类型有关,所以在确定属性间的函由于函数依赖与属性之间的联系类型有关,所以在确定属性间的函数依赖关系时
20、,可以从数依赖关系时,可以从分析属性间的联系类型入手,便可确定属性间分析属性间的联系类型入手,便可确定属性间的函数依赖。的函数依赖。例如,当学生无重名时,例如,当学生无重名时,SNO SN2.2 2.2 函数依赖函数依赖3一些术语和符号一些术语和符号 设有关系模式设有关系模式R R(A1A1,A2A2,AnAn),X X和和Y Y均为均为 A1A1,A2A2,AnAn 的子集的子集 如果如果X XY Y,但但Y Y不包含于不包含于X X,则称则称X XY Y是非平凡的函数依赖。是非平凡的函数依赖。如果如果X XY Y,则称则称X X为决定因子。为决定因子。fX XY YX XY Yp 如果如果
21、Y Y函数不依赖于函数不依赖于X X,则记作则记作X Y X Y。如果对如果对X X的某个真子集的某个真子集XX,有有XYXY,则称则称Y Y部分函数部分函数依赖于依赖于X X,(或称或称Y Y对对X X部分函数依赖部分函数依赖)记作记作 。如果如果X XY Y,并且并且Y YX X,则记作则记作X X Y Y。如果如果X XY Y,并且对于并且对于X X的一个任意真子集的一个任意真子集X X/都有都有X X/Y Y,则称则称Y Y完全函数依赖于完全函数依赖于X X(Y(Y对对X X 完全函数依赖完全函数依赖),记作记作2.2 2.2 函数依赖函数依赖 例例1 1:有关系模式:有关系模式:SC
22、SC(Sno,Sname,Cno,Credit,GradeSno,Sname,Cno,Credit,Grade)各属性分别为:学号、姓名、课程号、学分、成绩,主码为(各属性分别为:学号、姓名、课程号、学分、成绩,主码为(Sno,CnoSno,Cno)fp函数依赖关系有:函数依赖关系有:SnoSnameSnoSname 姓名函数依赖于学号姓名函数依赖于学号因为因为Sno GradeSno Grade,Cno Grade,(Sno,Cno)Grade,Cno Grade,(Sno,Cno)Grade,所以有所以有(Sno,CnoSno,Cno)Grade Grade 成绩完全函数依赖于学号和课程号
23、成绩完全函数依赖于学号和课程号(Sno,CnoSno,Cno)Sname Sname 姓名部分函数依赖于学号和课程号姓名部分函数依赖于学号和课程号2.2 2.2 函数依赖函数依赖 如果如果XYXY(非平凡函数依赖,并且非平凡函数依赖,并且Y Y X X)、)、YZYZ,则称则称Z Z传递函数传递函数依赖于依赖于X(X(或称或称Z Z对对X X传递函数依赖传递函数依赖)。例如例如:在关系模式:在关系模式:S S(Sno,Sname,Dept,Dept_masterSno,Sname,Dept,Dept_master)中中,各属性分别为:学号、姓名、所在系和系主任(假设一个系只有一各属性分别为:学
24、号、姓名、所在系和系主任(假设一个系只有一 个主任),主码为个主任),主码为SnoSno。传递传递函数依赖关系有:函数依赖关系有:Sno SnameSno Sname 由于:由于:Sno Dept,Dept Dept_masterSno Dept,Dept Dept_master所以有:所以有:Sno Sno Dept_masterDept_master(系主任传递函数依赖于学号系主任传递函数依赖于学号)一一.关系模式中的码关系模式中的码 1 1候选码候选码 设设K K为为R(U,F)R(U,F)中的属性或属性组,若中的属性或属性组,若K UK U,则则K K为为R R候选码。候选码。(U-U
25、-表示关系表示关系R R的属性全集的属性全集,F-F-表示关系表示关系R R上的依赖函数集上的依赖函数集)主码:主码:关系关系R R(U U,F F)中可能有多个候选码,则选其中一个作为中可能有多个候选码,则选其中一个作为 主码主码 全码全码:候选码为整个属性组。:候选码为整个属性组。主属性与非主属性:主属性与非主属性:在在R R(U U,F F)中,中,包含在任一候选码中的属包含在任一候选码中的属性称为主属性,不包含在任一候选码中的属性称为非主属性。性称为主属性,不包含在任一候选码中的属性称为非主属性。例例1 1:SCSC(SnoSno,CnoCno,GradeGrade)其候选码为其候选码
26、为:(:(SnoSno,CnoCno),),也为主码也为主码则主属性为则主属性为:SnoSno,Cno Cno,Grade Grade为非主属性。为非主属性。2.3 关系规范化关系规范化f 2.3 关系规范化关系规范化一一.关系模式中的码关系模式中的码 例例2 2:R R(P P,W W,A A)其中各属性含义分别为:其中各属性含义分别为:演奏者,作品和听众。其语义为:一个演奏者演奏者,作品和听众。其语义为:一个演奏者可演奏多个作品,某一作品可被多个演奏者演奏;听众也可欣赏不同演可演奏多个作品,某一作品可被多个演奏者演奏;听众也可欣赏不同演奏者个不同作品。奏者个不同作品。其其候选码为:(候选码
27、为:(P P,W W,A A),因为只有这三者才能确定一场音乐会。我们因为只有这三者才能确定一场音乐会。我们称全部属性均为主码的表为称全部属性均为主码的表为全码表全码表。2 2外码外码 定义:定义:若若R R(U U,F F)的属性(组)的属性(组)X X(X X属于属于U U)是另一个关系是另一个关系S S的主的主码,则称码,则称X X为为R R的外码。的外码。例例3:3:学生关系学生关系SD(Sno,Sdept)SD(Sno,Sdept)和选课关系选课关系SC(Sno,Cno,Grade),SCSC(Sno,Cno,Grade),SC中的中的SnoSno是是SDSD中的中的主码主码,则则S
28、noSno是是SCSC的的外码外码 2.3 关系规范化关系规范化二二.范式范式规范化的规范化的基本思想基本思想是消除关系模式中的数据冗余,消除数据依赖中是消除关系模式中的数据冗余,消除数据依赖中的不合适的部分,解决数据插入、更新、删除时发生异常现象。的不合适的部分,解决数据插入、更新、删除时发生异常现象。这就要求关系数据库设计出来的关系模式要满足一定的条件。这就要求关系数据库设计出来的关系模式要满足一定的条件。我们把关系数据库的规范化过程中为不同程度的规范化要求设立的我们把关系数据库的规范化过程中为不同程度的规范化要求设立的不同标准称为不同标准称为范式范式(Normal FormNormal
29、Form)。)。由于规范化的程度不同,就产生了由于规范化的程度不同,就产生了不同的范式不同的范式。满足最基本规范化要求的关系模式叫满足最基本规范化要求的关系模式叫第一范式第一范式(1(1NF)NF)在第一范式中进一步满足一些要求为在第一范式中进一步满足一些要求为第二范式第二范式(2(2NF)NF)以此类推就产生了以此类推就产生了第三范式第三范式(3(3NF)NF)等概念。等概念。每种范式都规定了一些限制约束条件。每种范式都规定了一些限制约束条件。2.3 关系规范化关系规范化二二.范式范式范式的概念最早由范式的概念最早由E.F.CoddE.F.Codd提出。提出。从从19711971年起,年起,
30、CoddCodd相继提出了关系的三级规范化形式,即第一范相继提出了关系的三级规范化形式,即第一范式(式(1 1NFNF)、)、第二范式(第二范式(2 2NFNF)、)、第三范式(第三范式(3 3NFNF)。)。19741974年,年,CoddCodd和和BoyceBoyce以共同提出了一个新的范式的概念,即以共同提出了一个新的范式的概念,即Boyce-CoddBoyce-Codd范式,简称范式,简称BCBC范式范式。19761976年年FaginFagin提出了第四范式,提出了第四范式,后来又有人定义了第五范式。后来又有人定义了第五范式。至 此 在 关 系 数 据 库 规 范 中 建 立 了
31、一 个 范 式 系 列:至 此 在 关 系 数 据 库 规 范 中 建 立 了 一 个 范 式 系 列:1 1NF,2NF,3NF,BCNF,4NF,5NF,NF,2NF,3NF,BCNF,4NF,5NF,一级比一级有更严格的要求。一级比一级有更严格的要求。2.3 关系规范化关系规范化 各个范式之间的联系可以表示为:各个范式之间的联系可以表示为:5 5NFNF 4NF 4NF BCNF BCNF 3NF 3NF 2NF 2NF 1NF 1NF2.3 关系规范化关系规范化1第一范式第一范式 第一范式第一范式(First Normal Form)是最基本的规范形式,即关系是最基本的规范形式,即关系
32、中每个属性都是不可再分的简单项。中每个属性都是不可再分的简单项。定义定义:如果关系模式如果关系模式R R,其所有的属性均为简单属性,即每个属性其所有的属性均为简单属性,即每个属性都是不可再分的,则称都是不可再分的,则称R R属于第一范式,简称属于第一范式,简称1 1NFNF,记作记作R R 1NF1NF。系名称系名称 高级职称人数高级职称人数教授教授 副教授副教授 计算机系计算机系 6 61010信息管理系信息管理系 3 35 5电子与通讯系电子与通讯系 4 48 8系名称系名称教授教授 副教授副教授 计算机系计算机系 6 61010信息管理系信息管理系 3 35 5电子与通讯系电子与通讯系
33、4 48 82.3 关系规范化关系规范化2第二范式第二范式 定义:定义:如果关系模式如果关系模式R R1NF1NF,并且并且R R中的每个非主属性都完全函数中的每个非主属性都完全函数 依赖于主码,则依赖于主码,则R R2NF2NF。例:例:S-L-CS-L-C(Sno,Sdept,Sloc,Cno,GradeSno,Sdept,Sloc,Cno,Grade)就不是就不是2 2NFNF的。的。因为(因为(Sno,CnoSno,Cno)是主码,而又有:是主码,而又有:SnoSdept,SnoSdept,因此有:因此有:(SnoSno,CnoCno)Sdept Sdept p即即存在非主属性对主码的
34、部分函数依赖,所以存在非主属性对主码的部分函数依赖,所以S-L-CS-L-C不是不是2 2NFNF。2.3 关系规范化关系规范化2第二范式第二范式 分解过程为:分解过程为:n 首先,对于组成主码的属性集合的每一个子集,用它作为主码首先,对于组成主码的属性集合的每一个子集,用它作为主码构成一个表。构成一个表。S-C(Sno,Cno),S(Sno),C(Cno)S-C(Sno,Cno),S(Sno),C(Cno)fffn 对于每个表,将依赖于此主码的属性放置到此表中。对于每个表,将依赖于此主码的属性放置到此表中。S-L-CS-L-C关系模式分解后的形式为:关系模式分解后的形式为:S-LS-L(Sn
35、oSno,Sdept,Sloc,Sdept,Sloc)和和S-CS-C(Sno,Cno,GradeSno,Cno,Grade)S-L有:有:Sno Sdept,Sno SLOC:是是2NF S-C有有:(Sno,Cno)Grade:是是2NF2.3 关系规范化关系规范化2第二范式第二范式 2 2NFNF的缺点的缺点2 2NFNF的关系模式在进行数据操作时,仍然存在着一些问题:的关系模式在进行数据操作时,仍然存在着一些问题:数据冗余数据冗余 每个系名和所在的宿舍楼名字存储的次数等于该系的学每个系名和所在的宿舍楼名字存储的次数等于该系的学生人数。生人数。插入异常插入异常 当一个新系没有招生时,有关
36、该系的信息无法插入。当一个新系没有招生时,有关该系的信息无法插入。删除异常删除异常 某系学生全部毕业而没有招生时,删除全部学生的记录某系学生全部毕业而没有招生时,删除全部学生的记录也随之删除了该系的有关信也随之删除了该系的有关信更新异常更新异常 更换系所在宿舍楼名字时,仍需改动较多的学生记录。更换系所在宿舍楼名字时,仍需改动较多的学生记录。之所以存在这些问题,是由于在之所以存在这些问题,是由于在S-LS-L表中存在着表中存在着非主属性对主码的传非主属性对主码的传递依赖递依赖。分析分析S-LS-L表中函数依赖关系,表中函数依赖关系,SnoSdeptSnoSdept,SdeptSlocSdeptS
37、loc,SnoSlocSnoSloc,非主属性非主属性SlocSloc对主码对主码SnoSno传递依赖。传递依赖。为此,对关系模式还需进一步简化,消除这种传递依赖,得到为此,对关系模式还需进一步简化,消除这种传递依赖,得到3 3NFNF。S-LS-L分解后的关系模式为:分解后的关系模式为:S-DS-D(SnoSno,Sdept,Sdept)和和D-LD-L(SdeptSdept,Sloc,Sloc)对对S-DS-D,有:有:Sno SdeptSno Sdept,因此因此S-DS-D是是3 3NFNF的的 对对D-LD-L,有:有:Sdept SlocSdept Sloc,因此因此D-LD-L也
38、是也是3 3NFNF的的2.3 关系规范化关系规范化3第三范式第三范式 定义:定义:如果如果R R(U U,F F)2NF)2NF,并且所有非主属性都不传递依赖于主码,则并且所有非主属性都不传递依赖于主码,则 R R(U U,F F)3NF)3NF。ff关系模式关系模式S-LS-L(SnoSno,Sdept,Sloc,Sdept,Sloc)不是不是3 3NFNF。分解过程为分解过程为:(1 1)对于不是候选码的每个决定因子,从表中删去依赖于它的所有属性;)对于不是候选码的每个决定因子,从表中删去依赖于它的所有属性;得到得到S-DS-D(SnoSno,Sdept,Sdept)(2 2)新建一个表
39、,新表中包含在原表中所有依赖于该决定因子的属性;)新建一个表,新表中包含在原表中所有依赖于该决定因子的属性;(3 3)将决定因子作为新表的主码。新建的表)将决定因子作为新表的主码。新建的表:D-LD-L(Sdept,SlocSdept,Sloc)2.3 关系规范化关系规范化3第三范式第三范式 关系模式关系模式S-LS-L由由2 2NFNF分解为分解为3 3NFNF后,函数依赖关系变得更加简单,既没有非主后,函数依赖关系变得更加简单,既没有非主属性对主码的部分依赖,也没有非主属性对主码的传递依赖,解决了属性对主码的部分依赖,也没有非主属性对主码的传递依赖,解决了2 2NFNF中中存在的四个问题。
40、存在的四个问题。数据冗余降低数据冗余降低。系所在的宿舍楼名字存储次数与该系的学生人数无关,只在。系所在的宿舍楼名字存储次数与该系的学生人数无关,只在关系关系D-LD-L中存储一次中存储一次不存在插入异常。不存在插入异常。当一个新系没有学生时,该系的信息可以直接插入到关系当一个新系没有学生时,该系的信息可以直接插入到关系D-LD-L中,而与学生关系中,而与学生关系S-DS-D无关无关不存在删除异常不存在删除异常。要删除某系的全部学生而仍然保留该系的有关信息时,可。要删除某系的全部学生而仍然保留该系的有关信息时,可以只删除学生关系以只删除学生关系S-DS-D中的相关学生记录,而不影响系关系中的相关
41、学生记录,而不影响系关系D-LD-L中的数据。中的数据。不存在更新异常不存在更新异常。更换所在的宿舍楼时,只需修改关系。更换所在的宿舍楼时,只需修改关系D-LD-L中一个相应元组中一个相应元组的的SlocSloc属性值,从而不会出现数据的不一致现象。属性值,从而不会出现数据的不一致现象。S-L-C S-L-C规范到规范到3 3NFNF后,所存在的异常现象已经全部消失。后,所存在的异常现象已经全部消失。通常在数据库设计通常在数据库设计中,中,一般要求要达到一般要求要达到3 3NFNF。3第三范式第三范式 但是但是3 3NFNF只限制了非主属性对码的依赖关系,而没有限制主属性对码的只限制了非主属性
42、对码的依赖关系,而没有限制主属性对码的 依赖关系。依赖关系。例如:例如:设关系模式设关系模式SNCSNC(SNOSNO,SNSN,CN0CN0,SCORESCORE),),其中其中SNOSNO代表学号,代表学号,SNSN代代表学生姓名并假设没有重名,表学生姓名并假设没有重名,CNOCNO代表课程号,代表课程号,SCORESCORE代表成绩。可以判定,代表成绩。可以判定,SNCSNC有两个候选码(有两个候选码(SNOSNO,CNOCNO)和(和(SNSN,CNOCNO),),其函数依赖如下:其函数依赖如下:SNO SNO SN SN (SNOSNO,CNOCNO)SCORESCORE (SNSN
43、,CNOCNO)SCORESCORE 如某个同学需要改名,则需要将该学生的所有记录都要进行修改,如某个同学需要改名,则需要将该学生的所有记录都要进行修改,稍有不慎,稍有不慎,就有可能漏改某些记录,这就会造成数据的不一致性。就有可能漏改某些记录,这就会造成数据的不一致性。产生操作异常的原因产生操作异常的原因:(SNO,CNO)SN,即存在主属性对码的部分函数依赖即存在主属性对码的部分函数依赖为了解决这种问题,为了解决这种问题,BoyceBoyce与与CoddCodd共同提出了一个新范式的定义,这就是共同提出了一个新范式的定义,这就是Boyce-CoddBoyce-Codd范式,通常简称范式,通常
44、简称BCNFBCNF或或BCBC范式。它弥补了范式。它弥补了3 3NFNF的不足。的不足。2.3 关系规范化关系规范化p 但是,因为但是,因为SNO SNO SN SN,即决定因素即决定因素SNOSNO或或SNSN不包含候选码,不包含候选码,从另一个角度说,存在着主属性对码的部分函数依赖:从另一个角度说,存在着主属性对码的部分函数依赖:(SNOSNO,CNOCNO)SN SN,(SNSN,CNOCNO)SNO SNO,所以所以SNCSNC不是不是BCNFBCNF。2.3 关系规范化关系规范化4BC范式范式 (BCNF)定义:定义:若关系模式若关系模式R1NFR1NF,对于关系对于关系R R的每
45、个函数依赖的每个函数依赖XYXY且且Y Y X X,X X必含有候选码,则必含有候选码,则RBCNFRBCNF。即即每个决定属性集都包含候选码。每个决定属性集都包含候选码。上面例子中唯一的非主属性上面例子中唯一的非主属性SCORESCORE对码不存在部分函数依对码不存在部分函数依赖,也不存在传递函数依赖。所以赖,也不存在传递函数依赖。所以SNCSNC 3NF3NF。pp2.3 关系规范化关系规范化4BC范式范式 (BCNF)解决这一问题的办法仍然是通过解决这一问题的办法仍然是通过投影分解投影分解进一步提高进一步提高SNCSNC的范式等级,将的范式等级,将SNCSNC规范到规范到BCNFBCNF
46、。可以将可以将SNCSNC分解成如下两个关系:分解成如下两个关系:S1(SNO,SN),S2(SNO,CNO,SCORE)S1(SNO,SN),S2(SNO,CNO,SCORE)对于对于S1S1,有两个候选码有两个候选码SNOSNO和和SNSN,对于对于S2S2,主码为(主码为(SNOSNO,CNOCNO)。)。在这两个关系中,每个决定属性集都包含候选码在这两个关系中,每个决定属性集都包含候选码(即无论主属性还是非主即无论主属性还是非主属性都不存在对码的部分依赖和传递依赖属性都不存在对码的部分依赖和传递依赖),S1S1 BCNFBCNF,S2S2 BCNFBCNF。关系关系SNCSNC转换成转
47、换成BCNFBCNF后,数据冗余度明显降低。学生的姓名只在关系后,数据冗余度明显降低。学生的姓名只在关系S1S1中中存储一次,学生要改名时,只需改动一条学生记录中的相应的存储一次,学生要改名时,只需改动一条学生记录中的相应的SNSN值,从而值,从而不会发生修改异常。不会发生修改异常。SNOSNS1S1中的函数依赖关系中的函数依赖关系SNOCNOSCORES2S2中的函数依赖关系中的函数依赖关系2.4 关系模式的分解准则关系模式的分解准则 关系规范化的目的:关系规范化的目的:解决关系模式中存在的插入、删除、更新操作异解决关系模式中存在的插入、删除、更新操作异常,数据冗余问题常,数据冗余问题.关系
48、规范化的方法:关系规范化的方法:围绕围绕函数依赖函数依赖的主线,对一个关系模式进行分解的主线,对一个关系模式进行分解,使关系从较低级范式变换到较高级范式。,使关系从较低级范式变换到较高级范式。(模式分解模式分解)分解关系模分解关系模式,逐步消式,逐步消除不合适的除不合适的函数依赖函数依赖1NF2NF 3NF BCNF 消除非主属性对码的部分函数依赖消除非主属性对码的部分函数依赖消除非主属性对码的传递函数依赖消除非主属性对码的传递函数依赖消除主属性对码的部分和传消除主属性对码的部分和传递函数依赖递函数依赖2.4 关系模式的分解准则关系模式的分解准则 模式分解的准则:模式分解的准则:模式分解具有无
49、损连接性模式分解具有无损连接性:分解后的关系通过自然连接分解后的关系通过自然连接可以恢复成原来的关系,即通过自然连接得到的关系与可以恢复成原来的关系,即通过自然连接得到的关系与原来的关系相比,既不多出信息、又不丢失信息。原来的关系相比,既不多出信息、又不丢失信息。模式分解能够保持函数依赖模式分解能够保持函数依赖:在模式的分解过程中,在模式的分解过程中,函数依赖不能丢失的特性,即模式分解不能破坏原来的函数依赖不能丢失的特性,即模式分解不能破坏原来的语义。语义。2.4 关系模式的分解准则关系模式的分解准则例:例:S-D-LS-D-L(SnoSno,DeptDept,LocLoc)有函数依赖:有函数
50、依赖:Sno DeptSno Dept,Dept Loc Dept Loc 不是第三范式的。至少可以有三种分解方案,分别为:不是第三范式的。至少可以有三种分解方案,分别为:n方案方案1 1:S-LS-L(SnoSno,LocLoc),),D-LD-L(DeptDept,LocLoc)n方案方案2 2:S-DS-D(SnoSno,DeptDept),),S-LS-L(SnoSno,LocLoc)n方案方案3 3:S-DS-D(SnoSno,DeptDept),),D-LD-L(DeptDept,LocLoc)这三种分解方案得到的关系模式都是第三范式的,那么这三种分解方案得到的关系模式都是第三范式