第4章关系数据库规范化理论第4章关系数据库规范化理论本章内容4.1问题导入4.2函数依赖及关系的范式4.3函数依赖的公理系统4.4关系模式的分解学习目标理解关系模式规范化的必要性;理解数据依赖、函数依赖、逻辑蕴涵及其范式的概念;掌握各种范式判定的条件及关系数据库规范化的过程,并能够根据应用语义,完整地写出关系模式的数据依赖集合,同时能根据数据依赖分析某一个关系模式满足第几范式;掌握数据依赖的公理系统,属性集闭包的含义和作用,模式分解的准则;了解满足不同范式要求的模式分解算法;掌握运用规范化理论设计满足实际应用需求的数据库。第4章关系数据库规范化理论重点与难点重点:关系规范化的必要性,函数依赖、范式的基本概念和定义,关系规范化的方法。难点:属性集闭包,逻辑蕴涵,模式分解算法。第4章关系数据库规范化理论关系数据库的规范化设计是指面对一个应用问题,如何选择一个比较好的关系模式集合。规范化设计理论数据依赖范式模式设计方法研究数据间自然联系与约束范式是关系模式的标准是自动化设计的基础数据依赖属性到域上的映射关系关系的域属性集R(U,D,dom(),F)关系名关系模式是静态的,与时间无关。关系模式通常简记为:R(U,F)。4.1问题导入4.1.1关系模式的规范化一个关系模式应当是一个五元组。关系模式设计引论在某校信息管理系统中要建立一个数据库来描述学生和选课的一些信息,面临的对象有:学号、姓名、系名、系主任、课号、成绩。由已知事实可以得知上述对象之间有如下对应关系:(l)一个系有若干学生,但一个学生只属于一个系;(2)一个系只有一名系主任;(3)一个学生可选修多门课程,每门课程有若干学生选修;(4)每个学生学习每一门课程有一个成绩。如何设计一个合理的关系数据库模式?1.导入案例4.1问题导入方案1:采用一个总的关系模式,将这些对象都放在SA中。SA(学号,姓名,系名,系主任,课号,成绩)example(1)数据冗余每个学生的系信息重复出现,既浪费存储空间,又易造成数据的不一致性。(2)插入异常插入异常指的是应该插入的信息不能正常插入,例如:新生未入学,就无法把该系及相应系主任信息插入到数据库。(3)删除异常删除异常指的是不该删除的信息被删除了,例如:当一个系的全部学生毕业了,删除学生时该系及系主任信息也删除了。4.1问题导入学号姓名系名系主任课号成绩13001刘烨计算机系李翔c18013001刘烨计算机系李翔c28913001刘烨计算机系李翔c37813002赵华管理系郑明c19013002赵华管理系郑明c38713009范冰冰艺术系刘欢c413015范晨物理系葛亮c97613009范冰冰艺术系刘欢c8904.1问题导入结论:该关系模式不是一个好的模式。“好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少。原因:在该例中系主任属性不仅函数依赖于系名,而且还依赖于学号。由于属性间约束关系太强才造成了上述异常现象。解决方法:通过分解关系模式来消除其中不合适的依赖。如:将SA分解为三个关系模式:S(学号,姓名,系名)D(系名,系主任)SC(学号,课号,成绩)4.1问题导入总结:关系模型中用关系来描述实体及其联系,对同一现实世界可用不同的关系模式来描述,但不同的关系模式的效果却有很大差异。判断是否存在插入异常、删除异常、数据冗余的大小是一种直观判断一个关系模式设计质量的方法。如何消除不合理的数据依赖,将一个“不好”的关系模式改造为一个“好”的关系模式,这就是关系数据库设计过程中要讨论的规范化理论问题。4.1问题导入4.1问题导入2.关系模式规范化的概念规范化:就是把一个存在数据冗余大、插入异常、删除异常和更新异常等情况的关系模式通过模式分解的方法转换为“较好”关系模式的集合,这个过程叫做关系模式的规范化。将关系模式规范化,是使其达到“好”关系模式的唯一途径。否则,设计的关系数据库将会产生一系列的问题。4.2函数依赖及关系的范式4.2.1函数依赖的定义及分类函数依赖(FunctionalDependency,FD)是最基本的一种数据依赖形式,是关系模式中属性之间最常见的一种依赖关系,也是关系模式最重要的一种约束。函数依赖反映了同一关系中属性间的相互依赖和相互制约,是属性间的一种联系,反映了同一关系中属性间一一对应的约束。4.2函数依赖及关系的范式1.函数依赖的定义设R(U,F)是属性集U上的关系模式,X和Y是U的子集,F是属性集U的数据依赖集,r是R的任意关系。r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称称X函数确定Y,或Y函数依赖于X,记为X→Y。其中X称做决定因素(determinant),Y称做依赖因素(dependent)。根据引例假设学生不允许重名,则有:学号→系名,学号→年龄学号→姓名,姓名→学号,姓名→系名,姓名→年龄4.2函数依赖及关系的范式对于函数依赖,需要说明以下几点:(1)函数依赖是指R的所有关系实例都要满足的约束条件,不是针对某个或某些关系实例满足的约束条件。(2)函数依赖是语义范畴的概念,人们只能根据数据的语义来确定函数依赖。(3)数据库设计者可以对现实世界做强制的规定。(4)X→Y,但YX,则称X→Y是非平凡的函数依赖。(5)X→Y,但YX,则称X→Y是平凡的函数依赖。(6)若X→Y,Y→X,则X与Y相互依赖,记为X↔Y。(7)若Y不函数依赖于X,则记为X→Y。4.2函数依赖及关系的范式确定函数依赖关系,可以通过属性之间的联系加以确定。属性间的3种联系,并不是每一种联系中都存在函数依赖。(1)如果两属性集X、Y间是1:1联系,则存在函数依赖:X↔Y。(2)如果两属性集X、Y之间是N:1联系,则存在函数依赖:X→Y。(3)如果两属性集X、Y间是M:N联系,则不存在函数依赖。例如:学号→系名学号→课号4.2函数依赖及关系的范式2.函数依赖的分类1)完全函数依赖设有R(U),X’是X的真子集,如果X→Y,并且对于X的任何一个真子集X’,都不存在X’→Y,则称Y对X完全函数依赖,记为2)部分函数依赖设R(U),X’是X的真子集,如果X→Y,并且对于X的任何一个真子集X’,都存在X’→Y成立,则称Y对X部分函数依赖,也就是Y不完全函数依赖于X,记为4.2函数依赖及关系的范式3)传递函数依赖在R(U)中,X,Y,Z是U的子集,如果X→Y,(YX),Y→Z,且Y→X不成立,则称Z对X传递函数依赖,记为。需要注意的是:如果Y→X成立,而X→Y,即X↔Y,则Z直接依赖于X;如果,则Z直接依赖于X。例如在SA(学号,姓名,系名,系主任,课号,成绩)中,有:学号→系名,系名→系主任,则学号T系主任4.2函数依赖及关系的范式【例4-1】某商业集团考核供应商供应商品情况的关系为W,判断关系W的函数依赖情况。W(供应商编号,供应商名,地址,商品号,商品名,规格,单价,产地,产地主负责人,月供应量)解:W的主码是供应商编号和商品号的组合。根据语义可以得知W存在如下的函数依赖:4.2函数依赖及关系的范式可以用函数依赖图来表示属性间的不同依赖情况。图中虚线表示为部分函数依赖。W关系由于存在部分函数依赖、传递函数依赖,因此会出现插入异常、删除异常、更新异常以及数据冗余大的问题。月供应量商品编号产地供应商名供应商编号主负责人4.2函数依赖及关系的范式3.码设k为R(U,F)中的属性或属性组合,k'是k的真子集,若k→U,且不存在k'→U成立,则k为R的候选码(candidatekey),简称为码。若候选码多于一个,则选定其中的一个为主码。包含在任何一个候选码中的属性,称为主属性。不包含在任何候选码的属性称为非主属性。码具有以下两个性质:决定性(标识的唯一性):对于R中的每一个元组,k值确定后,该元组就确定了。最小性(无冗余性):当k是属性集合时,k的任何一部分都不能标识该元组。4.2函数依赖及关系的范式4.2.2关系的范式及其规范化范式(normalform,NF),是指规范化的关系模式。从低一级的关系范式通过模式分解达到若干高一级范式的关系模式的集合,这种过程叫做关系模式的规范化。1.范式的判定条件与规范化1)第一范式(1NF)1NF:在一个关系模式R中,如果R的每一个属性都是不可再分的数据项,则称R属于第一范式1NF,记为R∈1NF。4.2函数依赖及关系的范式2)第二范式(2NF)2NF:如果一个关系R属于1NF,且它的每一个非主属性都完全依赖于码,则R属于第二范式,记为R∈2NF。案例分析:SA(学号,姓名,系名,系主任,课号,成绩)进行分析,主码为(学号,课号),学号→系名,(学号,课号)→系名其不属于2NF,故对其分解①S2(学号,课号,成绩)∈2NF②S1(学号,姓名,系名,系主任)∈2NF2NF存在问题:数据冗余度大、插入异常、删除异常。p4.2函数依赖及关系的范式3)第三范式(3NF)3NF:如果一个关系模式R满足2NF,并且每个非主属性都不传递函数依赖于码,则R属于第三范式,记为R∈3NF。案例分析①S2(学号,课号,成绩)∈2NF②S1(学号,姓名,系名,系主任)∈2NF可是S1中存在非主属性对码的传递依赖,故不属于3NF。为优化设计将关系模式S1再分解为:S11(学号,姓名,系名)S12(系名,系主任)分解后的关系模式S11与S12都∈3NF。1NF是指关系模式中的所有属性都满足原子性。2NF是指关系模式中不存在非主属性(组)对码的部分依赖。3NF是指关系模式中不存在非主属性(组)对码的传递依赖。范式间的包含关系:3NF2NF1NF范式的级别越高,其存在的操作异常和数据冗余越小。解决操作异常和数据冗余的方法是通过关系模式的分解使达到更高一级的范式。分解实质为让每个关系只有一个主题;如一个关系有多个主题,就将其分解为多个关系,“一事一地”原则。对比理解1NF、2NF、3NF4.2函数依赖及关系的范式4)BCNFBCNF:如果关系模式R(U,F)∈1NF。若F中任一函数依赖X→Y且YX时X必含有R的一个码,则R∈BCNF。通常,BCNF的条件有多种等价的描述,换言之,若关系模式R属于第一范式,且每个属性都不部分依赖和传递函数依赖于码,则R属于BCNF。4.2函数依赖及关系的范式【例4-2】关系模式R(学号,课程号,课程名,成绩),假设课程号,课程名都具有唯一性,判断此关系满足第几范式。分析:由语义得知该关系模式的候选码分别是(学号,课程号)和(学号,课程名)。F={(学号,课程号)→成绩,(学号,课程名)→成绩,课程号→课程名,课程名→课程号};由此可以得出:存在主属性课程名对码(学号,课程号)的部分依赖,主属性课程号对码(学号,课程名)的部分依赖。不存在非主属性成绩对码的部分依赖和传递函数依赖,所以此关系属于3NF,但不属于BCNF。4.2函数依赖及关系的范式问题:冗余和操作异常依然存在,只是没有1NF和2NF的问题严重,但仍不可忽视。因此,满足3NF的关系模式,仍然存在着一些操作异常现象。由BCNF的定义,关系模式R分解为BCNF的关系模式如下:课程(课程号,课程名)选课(学号,课程号,成绩)4.2函数依赖及关系的范式关于BCNF的以下结论:若R∈BCNF,则R中所有非主属性对每一个码都完全函数依赖。所有主属性对每个不包含它的码都完全函数依赖。R中没有任何属性完全函数依赖于非码的任何一组属性因此,可以说3NF和BCNF是在函数依赖的条件下对模式分解所能达到的分离程度的一种度量。一个关系模式如果都满足BCNF,那么,在函数依赖的范畴内已实现了彻底的分解。【例4-3】关系模式SJP(学号,课程号,名次),每一学生选修每门课程的成绩都有一定名次,且名次不重复。FD:(学号,课程号)→名次,(课程号,名次)→学号码:(学号,课程号),(课程号,名次)非主属性:无①不存在非主属性对码的部分依赖SJP∈2NF②不存在非主属性对码的传递依赖SJP∈3NF③每一个函数依赖的决定因素都包含码SJP∈BCNF4.2函数依赖