第6章关系数据库的设计理论6.1问题提出6.2函数依赖6.3关系模式的规范化本章内容1.理解函数依赖的内涵3.掌握关系模式规范化的方法学习要求2.理解各种范式的内涵6.1问题提出前面已经讲了关于数据库设计的一般概念,那么针对一个具体问题,如何构造一个适合于它的数据库模式(关系模式的集合),即某一个具体问题,应该构造几个关系模式,每个关系模式都有哪些属性构成?这是数据库设计的问题。在讨论如何构建好的数据库模式之前,先看看不好的数据库模式可能带来的问题。6.1问题提出例:建立一个描述学校教务的数据库。属性包括:学生的学号(Sno)、所在系(Sdept)、系主任姓名(Mname)、课程号(Cno)、成绩(Grade)。用一个单一的关系模式表示:StudentU、FU={Sno,Sdept,Mname,Cno,Grade}属性组中,码是(Sno,Cno)。各个属性间存在函数依赖关系,记作FF={Sno→Sdept,Sdept→Mname,(Sno,Cno)→Grade,Sno→Mname,(Sno,Cno)→Sdept,(Sno,Cno)→Mname}6.1问题提出关系模式StudentU、F中存在的问题:6.1问题提出6.1问题提出6.1问题提出6.1问题提出结论Student关系模式不是一个好的模式。“好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少。原因是:存在于模式中的某些属性间有数据依赖关系。解决方法:将关系模式的规范化。即通过分解关系模式来消除其中不合适的数据依赖。6.2函数依赖数据依赖:是一个关系内部属性与属性之间的一种约束关系。例:在student表中,sno确定了,则sdept就确定。有两种最重要的数据依赖:函数依赖和多值依赖。函数依赖:属性间这种依赖关系类似于数学函数中的y=f(x),自变量x确定之后,相应的函数值y也就确定;例:sdept=f(sno),即sno-sdept;sname=f(sno),即sno-sname;函数依赖的数学定义:设R(U)是一个属性集U上关系模式,X和Y是U子集;若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。6.2函数依赖函数依赖的一般定义说明:1.函数依赖和其他数据依赖一样,是一个语义范畴的概念;只能根据语义来确定一个函数依赖;如:2.函数依赖是指关系模式R(U)的所有关系都要满足的约束的条件;所有关系实例均要满足,并不是R的某些关系实例满足的约束条件;(如:CS系学生,IS系学生)6.2函数依赖函数依赖相关类型:1.完全函数依赖与部分函数依赖定义:在R(U)中,如果X→Y,并且对于X的任何一个真子集X’,都有X’Y,则称Y对X完全函数依赖(Fully)。记作:若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖(Partially)。记作:6.2函数依赖例:在上例中,(Sno,Cno)→Grade是完全函数依赖;(Sno,Cno)→Sdept是部分函数依赖;因为Sno→Sdept成立,且Sno是(Sno,Cno)的真子集;2.传递函数依赖定义:在R(U)中,如果X→Y,(YX),Y→X,Y→Z,则称Z对X传递函数依赖。记为:X→Z注:如果Y→X,即X←→Y,则Z直接函数依赖于X。例:在上例中,有:Sno→Sdept,Sdept→Mname,Sdept→SnoMname传递函数依赖于Sno6.2函数依赖利用函数依赖来定义码:设K为RU,F中的属性或属性组合。若,则K称为R的侯选码(CandidateKey)。若候选码多于一个,则选定其中的一个做为主码。包含在任何一个候选码中的属性,称为主属性(Primeattribute);不包含在任何候选码中的属性称为非主属性(Nonprimeattribute)或非码属性(Non-keyattribute)。例:关系模式S(Sno,Sdept,Sage)中,Sno-(Sno,Sdept,Sage),则属性Sno是码;SC(Sno,Cno,Grade)中,(Sno,Cno)-(Sno,Cno,Grade),则(Sno,Cno)是码。FF6.3关系模式的规范化设计关系模式时,应满足的基本要求:(1)元组的每个分量必须是不可再分的数据项。(2)数据库中的数据冗余应尽可能少。(3)关系数据库不能因为数据更新操作而引起数据的不一致问题。(4)当执行数据插入操作时,数据库中的数据不能产生插入异常现象。(5)数据库中数据不能产生删除操作异常问题。(6)数据库设计应考察查询要求,数据组织应合理。6.3关系模式的规范化为了使数据库设计的方法走向完备,人们研究了规范化理论,对关系模式进行规范化。满足不同规范化程度要求的,称为不同范式。范式是对关系模式规范化程度的描述。范式的种类:第一范式(1NF)第二范式(2NF)第三范式(3NF)BC范式(BCNF)第四范式(4NF)第五范式(5NF)满足最低要求的叫第一范式,在第一范式基础上进一步满足一些要求的为第二范式,其余依此类推。1NF2NF3NFBCNF4NF5NF6.3关系模式的规范化1.第一范式(1NF)定义:如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF;如:Student关系模式就满足第一范式。注:1.第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库;2.但是满足第一范式的关系模式并不一定是一个好的关系模式;6.3关系模式的规范化例:关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade)其中,Sloc为学生住处,假设每一个系的学生住在同一地方。其中主码为(Sno,Cno),Sdept,Sloc,Grade为非主属性。6.3关系模式的规范化例:关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade)其中,Sloc为学生住处,假设每一个系的学生住在同一地方。其中主码为(Sno,Cno),Sdept,Sloc,Grade为非主属性。1.S-L-C满足第一范式(每一个属性都不可分)。2.非主属性Sdept和Sloc部分函数依赖于码(Sno,Cno)而,S-L-C不是一个好的关系模式。6.3关系模式的规范化S-L-C不是一个好的关系模式6.3关系模式的规范化6.3关系模式的规范化•原因:非主属性Sdept、Sloc部分函数依赖于码。•解决方法:将S-L-CSno,Sdept,Sloc,Cno,Grade)分解为两个关系模式,以消除这些部分函数依赖S-C(Sno,Cno,Grade)S-L(Sno,Sdept,Sloc)S-L-C不是一个好的关系模式6.3关系模式的规范化6.3关系模式的规范化关系模式S-C的码为(Sno,Cno);关系模式S-L的码为Sno;这样非主属性对码都是完全函数依赖;6.3关系模式的规范化2.第二范式(2NF)定义:若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。例:S-L-C(Sno,Sdept,Sloc,Cno,Grade)∈1NFS-L-C(Sno,Sdept,Sloc,Cno,Grade)∈2NF分解后:S-C(Sno,Cno,Grade)∈2NFS-L(Sno,Sdept,Sloc)∈2NF如何将低一级的模式1NF规范化(转化为)为2NF?方法:采用投影分解法将一个1NF的关系分解为多个2NF的关系,可以在一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。6.3关系模式的规范化2.第二范式(2NF)但是,将一个1NF关系分解为多个2NF的关系,并不能完全消除关系模式中的各种异常情况和数据冗余。如:上例中,S-L(Sno,Sdept,Sloc)关系中仍然存在插入异常、删除异常、数据冗余度大和修改复杂的问题。插入异常:如某个系刚成立,目前还没有在校学生,就无法把这个系的信息存入数据库。删除异常:如某系学生全部毕业后在删除学生信息的同时系的信息也被删除。数据冗余大:如关于系的住处的信息重复出现多次。原因是:Sloc传递函数依赖于Sno。6.3关系模式的规范化3.第三范式(3NF)定义:关系模式RU,F中若不存在这样的码X、属性组Y及非主属性Z(ZY),使得X→Y,Y→Z成立,Y→X,则称RU,F∈3NF。即:每一个非主属性既不部分函数依赖于码,也不传递函数依赖于码。例:关系模式R(P,W,A)中,P:演奏者,W:作品,A:听众。一个演奏者P可以演奏多个作品W;某一作品W可被多个演奏者P演奏;听众A可以欣赏不同演奏者P的不同作品W码为(P,W,A),即全码;不存在非主属性;所以:(不存在非主属性对码部分依赖)(不存在非主属性对码传递依赖)所以:R∈3NF6.3关系模式的规范化3.第三范式(3NF)关系模式S-L(Sno,Sdept,Sloc)出现上述问题的原因是Sloc传递函数依赖于Sno。为消除该传递函数依赖,可以采用投影分解法,把S-L分解为两个关系模式:S-D(Sno,Sdept)D-L(Sdept,Sloc)其中SD的码为Sno,DL的码为Sdept。6.3关系模式的规范化3.第三范式(3NF)S-L(Sno,Sdept,Sloc)∈2NF(不存在非主属性对码部分函数依赖)S-L(Sno,Sdept,Sloc)∈3NF(存在非主属性对码传递函数依赖)分解后:S-D(Sno,Sdept)∈3NFD-L(Sdept,Sloc)∈3NF如何将低一级的2NF规范化为3NF?方法:采用投影分解法将一个2NF的关系分解为多个3NF的关系,可以在一定程度上解决原2NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题。在进行关系数据库的设计时,要保证其可用,至少要达到3NF的条件。6.3关系模式的规范化4.BCNF(修正的第3范式)但是,将一个2NF关系分解为多个3NF的关系后,仍然不能完全消除关系模式中的各种异常情况和数据冗余。BC范式定义:关系模式RU,F∈1NF,若X→Y且YX时X必含有码,则RU,F∈BCNF。即:每一个决定属性因素都包含码。即:消除了任何属性对码的部分依赖和传递依赖。WHY所以:BCNF是在3NF的基础上增加了条件:每一个决定属性因素都包含码。R∈BCNF一定满足3NF,但是满足3NF不一定∈BCNF。6.3关系模式的规范化4.BCNF(修正的第3范式)例1:关系模式SJP(S,J,P),S学生,J课程,P名次。规定:每一个学生选修每门课程的成绩有一定的名次;每门课程中每一个名次只有一个学生(即没并列的)。则,函数依赖为:(S,J)→P;(J,P)→S(S,J)与(J,P)都可以作为候选码、SJP∈3NF(不存在非主属性部分依赖、传递依赖于码)SJP∈BCNF(每一个决定因素都包含码)6.3关系模式的规范化4.BCNF(修正的第3范式)例2:关系模式STC(Sno,Tno,Cno),Sno学生,Tno教师,Cno课程。规定:每一教师只教一门课程;每门课程有若干教师,某一学生选定某门课后对应一个固定的教师。则,函数依赖为:Tno→Cno;(Sno,Cno)→Tno候选码是(Sno,Cno)和(Tno,Sno)则:STC是3NF,因为没有任何非主属性,不存在非主属性对码的部分函数依赖和传递函数依赖。但是STC不是BCNF,因为Tno→Cno中,决定因素Tno不包含码。6.3关系模式的规范化4.BCNF(修正的第3范式)对于不是BCNF的关系模式,仍然存在不合适地方。非BCNF的关系模式也可以通过分解成为BCNF。上例中可以将关系模式STC(Sno,Tno,Cno)分解为ST(Sno,Tno),TC(Tno,Cno)。ST(Sno,Tno)中为全码。决定因素是(Sno,Tno),满足决定因素包含码。TC(Tno,Cno)中,决定因素是Tno,包含码。6.3关系模式的规范化关系模式的规范化:一个低一级范式的关系模式,通过模式分解可以转换成若干个高一