您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第5章 关系数据库规范化理论
第五章关系数据库规范化理论关系数据库是由一组关系组成的,那么针对一个具体问题,应该如何构造一个适合于它的数据模式,即应该构造几个关系,每个关系由哪些属性组成等,这是关系数据库逻辑设计问题。关系数据库设计理论对数据库逻辑设计有重要的指导作用,它主要包括三个方面的内容:数据依赖、范式、模式设计方法,其中数据依赖起着核心作用。前面已经讲述了关系数据库、关系模型的基本概念以及关系数据库的标准语言。如何使用关系模型设计关系数据库,也就是面对一个比较好的关系模式的集合,其中每个又应该由哪些属性,这属于数据库设计的问题,确切地讲是数据库逻辑设计的问题。学生-课程模式S-T:学生表:Student(Sno,Sname,Ssex,Sage,Sdept)课程表:Course(Cno,Cname,Cpno,Ccredit)学生选课表:SC(Sno,Cno,Grade)5.1规范化问题的提出5.1.1规范化理论的重要内容关系数据库的规范化理论最早是由关系数据库的创始人E.F.Cold提出的,后经许多专家学者对关系数据库理论作了深入地研究和发展,形成了一整套有关关系数据库设计的理论。在该理论出现以前,层次和网状数据库的设计只是遵循其模型本身固有的原则,而无具体的理论依据可言,因而带有盲目性,可能在以后的运行和使用中发生许多预想不到的问题。在关系数据库系统中,关系模型包括一组关系模式,并且各个关系不是完全孤立的。如何设计一个合适的关系数据库系统,关键是关系数据库模式的设计,一个好的关系数据库模式应该包括多少关系模式,而每一个关系模式又应该包括哪些属性,又如何将这些相互关联的关系模式组建成一个适合的关系模型,这些工作决定了整个系统运行的效率。也是系统成败的关键所在,所以必须在关系数据库的规范化理论的指导下逐步完成。本章首页关系数据库的规范化理论主要包括三个方面的内容:函数依赖、范式、模式设计。其中,函数依赖:是模式分解和模式设计的基础;范式:是模式分解的标准。(NormalForm)5.1.2不合理的关系模式存在的存储异常问题数据库的逻辑设计为什么要遵循一定的规范化理论?什么是好的关系模式?不好的关系模式可能导致哪些问题?下面通过例子对这些问题进行分析:[例1]要求设计教学管理数据库,其关系模式,SCD如下:SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE)其中SNO表示学生学号,SN表示学生姓名,AGE表示学生年龄,DEPT表示学生所在系别,MN表示系主任姓名,CNO表示课程号,SCORE表示成绩。根据实际情况,这些数据有以下语义规定:(1)一个系有若干个学生,但一个学生只属于一个系;(2)一个系只有一名系主任,但一个系主任可以同时兼几个系的系主任;(3)一个学生可以选修多门功课,每门课程可被若干个学生选修;(4)每个学生学习的课程有一个成绩。在此关系模式中填入一部分具体的数据,则可得到SCD关系模式的实例,即一个教学管理数据库,如下图所示。SNOSNAGEDEPTMNCNOSCORES1赵军17计算机刘军航C190S1赵军17计算机刘军航C285S2钱进18信息王平C557S2钱进18信息王平C680S2钱进18信息王平C7S2钱进18信息王平C570S3张伟20信息王平C10S3张伟20信息王平C270S3张伟20信息王平C485S4李平20自动化刘军航C193根据上述的语义规定并分析以上关系中的数据,我们可以看出,(SNO,CNO)属性的组合能唯一标识一个元组,所以(SNO,CNO)是该关系模式的主码。但在进行数据库的操作时,会出现以下几方面的问题。(1)数据冗余。每个系名和系主任的名字存储的次数等于该系的学生人数乘以每个学生选修的课程,同时学生的姓名、年龄也都要重复存储多次,数据的冗余度很大,浪费了存储空间。(2)插入异常。如果某个新系没有招生,尚无学生时,则系名和系主任的信息无法插入到数据库中。因为在这个关系模式中,(SNO,CNO)是主码。根据关系的实体完整性约束,主码的值不能为空,而这时没有学生,SNO和CNO均无值,因此不能进行插入操作,另外,当某个学生尚未选课,即CNO未知,实体完整性约束还规定,主码的值不能部分为空,同样也不能进行插入操作。(3)删除异常。当某系学生全部毕业而没有招生后时,要删除全部学生的信息,这时系名、系主任也随之删除,而现实总这个系仍然存在,但在数据库中却无法找到该系的信息。另外,如果某个学生不再选修C1课程,本应该只删去C1,但C1是主码的一部分,为保证实体完整性,必须将整个元组一起删掉,这样,有关学生所有录入的其他信息也随之丢失。本章首页本节首页上一页本章首页本节首页上一页(4)更新异常。如果某学生改名,则该学生的所有记录都要逐一修改SN的值;又如某系更换系主任,则属于该系的学生记录都要修改MN的内容,稍有不慎,就有可能漏改某些记录,这就会造成数据库的不一致性,破坏了数据的完整性。由于存在以上问题,我们说:SCD是一个不好的关系模式。产生上述问题的原因,直观地说:是因为关系中“包罗万象”,内容太复杂了。那么,怎样才能得到一个好的关系模式呢?我们把关系模式SCD分解为三个结构简单的关系模式:学生关系S(SNO,SN,AGE,DEPT)选课关系SC(SNO,CNO,SCORE)系关系D(DEPT,MN)SNOSNAGEDEPTS1赵军17计算机S2钱进18信息S3张伟20信息S4李平21自动化如图所示SSNOCNOSCORES1C190S1C285S2C557S2C680S2C7S2C570S3C10S3C270S3C485S4C193DEPTMN计算机刘军航信息王平自动化刘军航SCD在以上三个关系模式中,实现了信息的某种程度的分离:S中存学生基本信息,与所选课程及系主任无关D中存储系的有关信息,与学生无关SC中存储的学生选课的信息,而与学生及系的有关信息无关与SCD相比,分解为三个关系模式后,数据的冗余程度明显降低。本章首页本节首页上一页同时,由于数据冗余度的降低,数据没有重复存储,也不会引起更新异常。当新插入一个系时,只要在关系D中添加一个记录就可以了;当某个学生尚未选课时,只要在关系S中添加一条学生记录就可以了,而与选课关系无关,这就避免了插入异常。当一个系的学生全部毕业时,只需在S中该系的全部学生记录,而关系D中有关该系的信息仍然保留,从而不会引起异常删除。经过上述分析,我们说分解后的关系模式是一个好的关系数据库模式。从而得出结论,一个好的关系模式应该具备四个条件:(1)尽可能少的数据冗余(2)没有插入异常(3)没有删除异常(4)没有更新异常一个好的关系模式并不是在任何情况下都是最优的,比如查询某个学生选修课程名及所在系的系主任时,要通过连接,而连接所需的系统开销非常大,因此要以实际设计的目标出发进行设计。注意按照一定的规范设计的关系模式,将结构复杂的关系分解成结构简单的关系,从而把不好的关系数据库模式转变成为好的关系数据库模式,这就是关系的规范化。规范化又可以根据不同的要求而分成若干级别。我们要设计的关系模式中的各属性是相互依赖、相互制约的,这样才构成了一个结构严谨的整体。在设计关系模式的时候,必须从语义上分析这些依赖关系。数据库模式的好坏和关系中各属性间的依赖关系有关。因此,我们先讨论关系规范化理论。5.2函数依赖本节介绍函数依赖的概念和码的形式化定义。数据依赖一个关系内部属性与属性之间的约束关系现实世界属性间相互联系的抽象数据内在的性质语义的体现数据依赖的类型函数依赖(FunctionalDependency,简记为FD)多值依赖(MultivaluedDependency,简记为MVD)其他5.2函数依赖1.函数依赖的定义定义:设R(U)是属性集U上的关系模式,X,Y是U的子集,r是R的任一具体关系,如果对r的任意两个元组t1,t2,由t1[x]=t2[x]导致t1[y]=t2[y],则称X函数决定Y或Y函数依赖于X,记为X→Y。X→Y为模式R的一个函数依赖(FD)。这里t1[x],t2[x]分别表示元组t1,t2在属性集X上的值,FD是对关系R的一切可能的当前值R定义的,不是针对某个特定关系,也就是说,对于X的每一个具体的值,都有惟一的Y值与之对应,即Y值由X值决定,因而这种数据依赖称为函数依赖。注意:1,2,3P107定义设R(U)是一个属性集U上的关系模式,X和Y是U的子集。若对于R(U)的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等,则称“X函数确定Y”或“Y函数依赖于X”,记作X→Y。函数依赖是语义范畴的概念。只能根据语义来确定一个函数。例如,“姓名→出生年月”这个函数依赖只有在没有同名人的条件下成立,如果允许在同一关系中有相同姓名存在,则出生年月就不再函数依赖于姓名了。如果系统设计人员限定不允许相同姓名出现,则“姓名→出生年月”函数依赖成立。【例】有一个关系模式R(学号,姓名,出生年月,系编号,系负责人)。在R的关系r中,存在着如下函数依赖:学号→姓名(每个学号只能对应一个姓名);学号→出生年月(每个学生只能对应一个出生年月);系编号→系负责人(每个系只能有一名负责人)。下面介绍一些术语和记号:(1)若X→Y,则X称为决定因素。(2)若X→Y,Y→X,则记作X←→Y。(3)若Y不函数依赖于X,则记作X→Y。函数依赖完全函数依赖部分函数依赖传递函数依赖2.平凡依赖和非平凡依赖在关系模式R(U)中,对于U的子集X和Y,如果X→Y,但YX,则称X→Y是非平凡的函数依赖如果X→Y,但YX,则称X→Y是平凡的函数依赖例:在关系SC(Sno,Cno,Grade)中,非平凡函数依赖:(Sno,Cno)→Grade平凡函数依赖:(Sno,Cno)→Sno(Sno,Cno)→Cno定义在R(U)中,如果X→Y,并且对于X的任何一个真子集X′,都有X′→Y,则称Y对X完全函数依赖,记作XY。P108定义5.3F【例】有一关系模式S(学号,姓名,系名称,出生年月)。若无重名还存在学号←→姓名函数依赖在S中存在如下完全函数依赖:学号系名称,学号出生年月通常记为:学号→系名称,学号→出生年月FF定义在R(U)中,如果X→Y,X′→Y,则称Y对X部分函数依赖,记作XY。P108定义5.3P【例】有一关系模式SC(学号,课程号,成绩,教师编号)。在SC中,(学号,课程号)成绩(学号,课程号)→教师编号(相当于X→Y)课程号→教师编号(相当于X’→Y)F因此(学号,课程号)教师编号P定义在R(U)中,如果X→Y,Y→Z,其中YX,Y→X,则称Z对X传递函数依赖,记作:XZ。∪T【例】关系模式R(学号,姓名,出生年月,系编号,系负责人)在此关系模式中有如下函数依赖:学号→系编号(相当于X→Y)系编号→系负责人(相当于Y→Z)因此,在R中存在传递函数依赖:学号系负责人。T系编号→学号(相当于Y→X)2.码码是唯一标识实体的属性集,这是对码的直观定义,下面用函数依赖的概念来定义它。定义设K为R(U)中的属性或属性组合,若KU,则K为R的候选码(CandidateKey)。若候选码多于一个,则选定其中的一个为主码(PrimaryKey),也称为码(Key);当只有一个候选码时这个候选码即是主码。F主属性(PrimeAttribute):包含在任何一个候选码中的属性;非主属性(NonprimeAttribute):不包含在任何码中的属性。或非码属性(Non-keyAttribute)。主属性集、非主属性集P109例如:学号→姓名系编号→系负责人(学号,课程号)→成绩学号,课程号,系编号--主属性X姓名系,负责人,成绩--非主属性Y主码可为单个属性,也可为属性组。在特殊情况下,主码可以由整个元组组成,称为全码(All-key)。如在关系模式S(学号,姓名,系名称,出生年月)中,学号是主码,而在关系模式SC(学号,课程号,成绩,教师编号)中,属性组合(学号,课程号)是主码,下面举一个全码的例子。定义关系模式R中属性或属性组X并非R的主
本文标题:第5章 关系数据库规范化理论
链接地址:https://www.777doc.com/doc-3371779 .html