数据库原理与应用第五章关系数据理论问题数据库工具如何使用?如何组织好数据?何为“好”的数据库?标准是什么?规范化规范化理论认为:关系数据库中的每一个关系都要满足一定的规范。研究的是:如何将一个不好的关系模型转化为一个好的关系模型的理论。本章要点1、关系规范化理论研究背景2、数据依赖和键/码3、规范化(Normalization)理论(本章重点)1NF、2NF、3NF、BCNF等范式模式分解关系模式规范化的必要性及方法途径关系模型建立在严格的数据理论基础上,并可向别的数据模型转换,因此常以关系模型为背景来讨论这个问题问题的根源规范程度低→高规范化的思想是:通过创建某一关系的规范化准则,既可以方便数据库中数据的处理,又可以给程序设计带来方便;逐步消除数据依赖关系中不合适的部分,使相互依赖的数据达到有效的分离。问题的提出一、概念回顾二、关系模式的形式化定义三、什么是数据依赖四、数据依赖对关系模式影响关系数据库逻辑设计——针对具体问题,如何构造一个更适合于它的数据模式,即如何更好地设计数据的逻辑结构?——数据库逻辑设计的工具──关系数据库的规范化理论一、概念回顾关系:描述实体,属性,实体间的联系从形式上看,它是一张二维表,是所涉及属性的笛卡尔积的一个子集。•关系模式:用来定义关系•关系数据库:基于关系模型的数据库,利用关系来描述现实世界。二、关系模式的形式化定义关系模式由五部分组成,即它是一个五元组:R(U,D,DOM,F)R:关系名U:组成该关系的属性名集合D:属性组U中属性所来自的域DOM:属性(U)向域(D)的映象集合F:属性间数据的依赖关系集合简化为一个三元组:R(U,F)当且仅当U上的一个关系r满足F时,r称为关系模式R(U,F)的一个关系三、什么是数据依赖一个关系内部属性与属性之间的约束关系现实世界属性间相互联系的抽象数据内在的性质语义的体现四、数据依赖对关系模式的影响[例1]建立一个描述学校教务的数据库,以下是客观存在的:一个系有若干学生,但一个学生只属于一个系;一个系只有一名负责人;一个学生可以选修多门课程,每门课程有若干学生选修;每个学生学习每一门课程有一个成绩单一的关系模式:StudentU、FU={Sno,Sdept,Mname,Cno,Grade}建立一个描述学校教务的数据库:学生的学号(Sno)、所在系(Sdept)系主任姓名(Mname)、课程号(Cno)成绩(Grade)属性组U上的一组函数依赖F:F={Sno→Sdept,Sdept→Mname,(Sno,Cno)→Grade}SnoCnoSdeptMnameGrade该模式存在什么问题?怎么改善这个模式?1.数据冗余太大2.更新异常(UpdateAnomalies)3.插入异常(InsertionAnomalies)4.删除异常(DeletionAnomalies)结论:Student关系模式不是一个好的模式。“好”的模式:不会发生插入异常、删除异常、更新异常,数据冗余应尽可能少返回原因:由存在于模式中的某些数据依赖引起的解决方法:通过分解关系模式来消除其中不合适的数据依赖分解关系模式把这个单一模式分成3个关系模式:S(Sno,Sdept,Sno→Sdept);SC(Sno,Cno,Grade,(Sno,Cno)→Grade);DEPT(Sdept,Mname,Sdept→Mname)单一的关系模式:StudentU、FU={Sno,Sdept,Mname,Cno,Grade}6.2规范化规范化理论目的:讨论一个关系属性间不同的依赖情况(数据依赖)。改造关系模式,通过分解关系模式来消除其中不合适的数据依赖,以解决插入异常、删除异常、更新异常和数据冗余问题。两种重要的数据依赖:函数依赖(FunctionalDependency,FD)多值依赖(MultivaluedDependency,MVD)1)元组的每个分量必须是不可分的数据项。2)数据库中的数据冗余应尽可能少。3)关系数据库不能因为数据更新操作而引起数据不一致问题。4)当执行数据插入操作时,数据库中的数据不能产生插入异常现象。5)数据库中的数据不能在执行删除操作时产生删除异常问题。关系模式应满足的基本要求6.2.1函数依赖函数依赖返回平凡函数依赖与非平凡函数依赖完全函数依赖与部分函数依赖传递函数依赖一、函数依赖定义6.1设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。说明:1.所有关系实例均要满足2.语义范畴的概念3.数据库设计者可以对现实世界作强制的规定函数依赖不是指关系模式R的某个或某些关系实例满足的约束条件,而是指R的所有关系实例均要满足的约束条件。函数依赖是语义范畴的概念。只能根据数据的语义来确定函数依赖。例如“姓名→年龄”这个函数依赖只有在不允许有同名人的条件下成立对函数依赖的说明换句话说:任何时候若某一关系中的两个元组中的X属性组的值相等,则元组中对应的属性组Y的值也相等,类似于函数概念,Y=f(X)需要指出的是:关系R中,如果属性组X是一个候选码或码,则属性组Y一定函数依赖于X(这与候选码的定义一致)事实上:如果关系R上有函数依赖XY,而属性X不是一个候选码,则R中可能存在一些数据冗余例如:R(Sno,Sdept,MN,Cname,Grade)中有函数依赖Sdept-MN,而Sdept并不是候选码,表中数据有大量冗余出现二、平凡函数依赖与非平凡函数依赖例:在关系SC(Sno,Cno,Grade)中,非平凡函数依赖:(Sno,Cno)→Grade平凡函数依赖:(Sno,Cno)→Sno(Sno,Cno)→CnoYXXYYXYXXYYXYXYXXYYXYX术语和记号,但,则称是非平凡的函数依赖,但,则称是平凡的函数依赖若,则X叫做决定因素若,,则记作若Y不函数依赖于X,则记作三、完全函数依赖与部分函数依赖6.2.2码外部码定义6.5关系模式R中属性或属性组X并非R的码,但X是另一个关系模式的码,则称X是R的外部码(Foreignkey)也称外码•如在SC(Sno,Cno,Grade)中,Sno不是码,但Sno是关系模式S(Sno,Sdept,Sage)的码,则Sno是关系模式SC的外部码•o主码与外部码一起提供了表示关系间联系的手段6.2.3范式范式(NormalForm)是指规范化的关系模式,是符合某一种级别的关系模式的集合。关系数据库中的关系必须满足一定的要求,满足不同程度要求的为不同范式。定义范式的种类:第一范式(1NF)第二范式(2NF)第三范式(3NF)BC范式(BCNF)第四范式(4NF)第五范式(5NF)6.2.3范式各种范式之间存在联系:NF5NF4BCNFNF3NF2NF1某一关系模式R为第n范式,可简记为R∈nNF。一个低一级范式的关系模式,通过模式分解可以转换为若干个高一级范式的关系模式的集合,这种过程就叫规范化。6.2.42NF1NF的定义如果一个关系模式R的所有属性都是不可分的基本数据项,则R∈1NF第一范式是对关系模式的最起码的要求。不满足第一范式的数据库模式不能称为关系数据库但是满足第一范式的关系模式并不一定是一个好的关系模式S-L-C[例4]关系模式S-L-C(Sno,Sdept,Sloc,Cno,Grade)Sloc为学生住处,假设每个系的学生住在同一个地方。函数依赖包括:(Sno,Cno)FGrade(Sno,Cno)PSloc(Sno,Cno)PSdeptSnoCnoGradeSdeptSlocSno→SdeptSno→→SlocSdept→Sloc显然是一范式属于第几范式?S-L-C不是一个好的关系模式(1)插入异常(2)删除异常(3)数据冗余度大(4)修改复杂原因Sdept、Sloc部分函数依赖于码。解决方法S-L-C分解为两个关系模式,以消除这些部分函数依赖S-C(Sno,Cno,Grade)S-L(Sno,Sdept,Sloc)关系模式S-L-C是不是2NF?2NF的定义定义6.6若R∈1NF,且每一个非主属性完全函数依赖于码,则R∈2NF。例:S-L-C(Sno,Sdept,Sloc,Cno,Grade)∈1NFS-L-C(Sno,Sdept,Sloc,Cno,Grade)∈2NFSC(Sno,Cno,Grade)∈2NFS-L(Sno,Sdept,Sloc)∈2NF1NF的关系2NF的关系模式分解一定程度上减轻原1NF关系中存在的插入异常、删除异常、数据冗余度大、修改复杂等问题,并不能完全消除关系模式中的各种异常情况和数据冗余。函数依赖图:SnoCnoGradeSCS-LSnoSdeptSloc关系模式SC的码为(Sno,Cno)关系模式S-L的码为Sno这样非主属性对码都是完全函数依赖分解说明一个1NF,但非2NF的关系总是可以被分解成为一组2NF的关系规范化过程中通过一组投影运算消除部分依赖,建议作如下分解(第一步分解)已知关系R(A,B,C,D),(A,B)为主码,即(A,B)-C,(A,B)-D,且A-D,则将R分解成为两个投影:R1(A,D),A为主码R2(A,B,C),(A,B)为主码,A为外码这样,R可以通过R1和R2的自然连接运算得以恢复,即满足分解的无损连接性6.2.53NF定义:若R2NF,且它的任何一个非主属性都不传递依赖于任何候选码,则R3NF说明:即不存在非主属性部分依赖和传递依赖于码的关系为3NF推论:不存在非主属性的模式为3NF上例中得到的关系模式是2NFSC(SNO,CNO,G);S-L(SNO,SDEPT,SLOC);S-L中存在传递传递依赖,故该模式不是3NFSNOSDEPTSLOC可能问题?如何改造?不是3NF可能存在的问题插入异常只有当知道某学生的系时才能插入其住处信息删除异常当删除某系对应的所有学生时,有关该系学生住处的信息也被删除掉了修改异常一个系及其住处信息重复出现,只更新一个元组中对应的系及其住处时可能导致数据不一致冗余同系学生的住处重复存储解决方法继续模式分解如上例中的模式可分解为3NFSC(SNO,CNO,G);(SNO,CNO)GS-D(SNO,SDEPT);SNOSDEPTD-L(SDEPT,SLOC);SDEPTSLOCSNOSDEPTSLOCSDEPTGSNOCNO分解说明一个2NF,但非3NF的关系总是可以被分解成为一组3NF的关系规范化过程中通过一组投影运算消除传递依赖,建议作如下分解(第二步分解)已知关系R(A,B,C),A为主码(AB,AC),且BC,则将R分解成为两个投影:R1(B,C),B为主码R2(A,B),A为主码,B为外码这样,R可以通过R1和R2的自然连接运算得以恢复,分解满足分解的无损连接性3NF的进一步说明在不考虑主属性对码的部分依赖和传递依赖时,可以认为是实现了彻底的分离,已消除了插入异常,删除异常,修改异常,冗余等问题但是,当关系中存在两个或更多的候选码时,尤其是有几个候选码、且候选码内的属性又有部分复合或交迭时,仅仅满足3NF仍有问题,需要进一步分解成BCNF6.2.6BCNF(Boyce/CoddNormalForm)定义:若每一个决定因素都包含(或是)码,则RBCNF说明BCNF中所有的依赖都是包含码的依赖一个BCNF范式必是3NF,但一个3NF范式不一定是BCNF(3NF中可能存在主属性对码的部分和传递依赖)BCNF是在函数依赖范畴内对关系模式的彻底分离,已消除了插入和删除异常通常认为BCNF是扩充的第三范式,一般数据库设计达到BCNF已足够若R∈BCNF所有非主属性对每一个码都是完全函数依赖所有的主属性对每一个不包含它的码,也是完全函数依赖没有任何属性完全函数依赖于非码的任何一组属性•R∈BCNFR∈3NF充分不必要实例例1:SJP(学生S,课程J,名次P)(S,J)和