您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 企业文化 > 第7章 关系数据库规范化理论---12
数据库原理与应用高等院校计算机教材系列第7章关系数据库规范化理论•数据库设计是数据库应用领域的主要研究课题。•数据库设计的任务是在给定的应用环境下,创建满足用户需求且性能良好的数据库模式,建立数据库及其应用系统,使之能有效地存储和管理数据,满足用户需求。•数据库设计需要理论指导,这个理论就是关系数据库规范化理论。•关系数据库规范化理论研究:关系模式中各属性的依赖关系以及对关系模式性能的影响。------探讨好的关系模式的标准第7章关系数据库规范化理论•7.1函数依赖•7.2关系规范化•7.3关系模式的分解准则7.1函数依赖•直观的函数依赖定义:如果有一个关系模式R(A1,A2,…,An),X和Y为{A1,A2,…,An}的子集,那么对于关系R中的任意一个X值,都只有一个Y值与之对应,则称X函数决定Y,或Y函数依赖于X。•记着:X→Y例:Student(Sno,SName,Sdept,Sage)Sno→SName,Sno→Sdept,Sno→Sage•(Sno决定Sname,Sname依赖Sno)例:SC(Sno,Cno,Grade)(Sno,Cno)→Grade7.1函数依赖•定义:设有关系模式R(A1,A2,…,An),X和Y为{A1,A2,…,An}的子集,r是R的任一具体关系,t1t2是r中的任意2个元组。如果t1[X]=t2[X]可以推导出t1[Y]=t2[Y],则称X函数决定Y,或Y函数依赖于X。记为X→Y一些术语和符号•1.如果X→Y,但Y不包含于X,则称X→Y是非平凡的函数依赖。如不作特别说明,我们总是讨论非平凡函数依赖。•2.如果Y不函数依赖于X,则记作X—/→Y。•3.如果X→Y,则称X为决定因子。•4.如果X→Y,并且Y→X,则记作X←→Y。一些术语和符号•5.如果X→Y,并且对于X的一个任意真子集X’都有X’—/→Y,则称Y完全函数依赖于X,记作:YXf•6.如果X→Y(非平凡函数依赖,并且Y—/→X)、Y→Z,则称Z传递函数依赖于X。如果X’→Y成立,则称Y部分函数依赖于X,记作:YXp示例•例1:有关系模式:SC(Sno,Sname,Cno,Grade)•主码为(sno,cno)•则函数依赖关系有:•Sno→Sname(Sno决定Sname,•Sname依赖Sno)•(Sno,Cno)→Sname姓名部分依赖学号和课程号•(Sno,Cno)→Grade成绩完全依赖学号和课程好示例•例2:有关系模式:S(Sno,Sname,Dept,•Dept_master)学号、姓名、系、系主任,主码为sno•函数依赖关系有:Sno(Sno完全决定Sname,Sname完全依赖Sno)ff由于:SnoDept,DeptDept_master所以有:SnoDept_masterSname传递f传递f•7.1.3为什么讨论依赖关系•讨论属性依赖关系的意义,先看一个例子:•S-L-C(sno,sdept,sloc,cno,grade)学号、系、宿舍楼、课程号、成绩,假设每个系的学生都住一个宿舍楼,主码为(sno,cno)SnoSdeptSLOCCnoGrade9812101计算机2公寓DB809812101计算机2公寓OS859821101信息1公寓C909821101信息1公寓DS849821102信息1公寓OS78存在问题•从上面的表中可以看出如下问题:•数据冗余问题:在这个关系中,有关每个学生的系和其所住的宿舍楼的信息有冗余,因为每个系有多少个学生,这个系所对应的宿舍楼的信息就要重复存储过少遍。•数据更新问题:如果有一个学生转系了,那么不但要修改sdept列还要修改sloc列,使修改复杂化存在问题•从上面的表中可以看出如下问题:•数据插入问题:如果某个学生还没有选课,但已经知道sdept,sloc的信息,我们不能将此学生的信息登记。因为cno为空,而cno是主码,不能为空,因此,也就丢掉了该学生的其他信息•数据删除问题:如果一个同学只选了一门课,而后来又不选了,则应该删除该同学的选此门课记录。但该同学只选了一门课,那么删掉该同学选课记录的同时也删掉了该1同学的其他信息存在问题•上面的问题我们统称----操作异常•为什么出现这些问题?----这是因为关系模式没有设计好,某些属性之间存在着不良的函数依赖•解决这些问题----进行模式分解,即把一个关系模式分解成2个或者多个关系模式,在分解的过程中,消化那些不良的函数依赖7.2关系规范化•7.2.1关系模式中的码•7.2.2范式7.2.1关系模式中的码•候选码:能够惟一标识关系中的一个元组的一个属性或最小属性组。(能够唯一标示一条记录的字段,或者字段的组合)•主码(主键、KEY):指定候选码中的一个作为主码。•全码:候选码为整个属性组。7.2.1关系模式中的码主属性与非主属性:主属性:在R(U,F)中,包含在任一候选码中的属性称为主属性;非主属性:不包含在任一候选码中的属性称为非主属性;7.2.1关系模式中的码1.候选码:设K为R(U,F)中的属性或属性组,若Kf→U,则K为R候选码。(K为决定R全部属性值的最小属性组)。主码:关系R(U,F)中可能有多个候选码,则选其中一个作为主码。全码:候选码为整个属性组。主属性与非主属性:在R(U,F)中,包含在任一候选码中的属性称为主属性,不包含在任一候选码中的属性称为非主属性示例例:SC(SNO,CNO,Grade)候选码:(SNO,CNO),也为主码主属性:SNO,CNO,非主属性:Grade例:R(P,W,A),P――演奏者,W――作品,A――听众语义:一个演奏者可演奏多个作品,某一作品可被多个演奏者演奏;听众也可欣赏不同演奏者个不同作品。候选码:(P,W,A)――全码(演奏者、作品、听众-一场音乐会)7.2.1关系模式中的码(续)•外码(外部关键字、外键):如果某个属性不一定是所在关系的码,但是其他关系的码,则称该属性为外码。7.2.1关系模式中的码(续)外码:用于关系表之间建立关联的属性(组)。定义:若R(U,F)的属性(组)X(X属于U)是另一个关系S的主码,则称X为R的外码。7.2.2范式•关系数据库中的关系要满足一定的要求,满足不同程度要求的为不不同的范式。•满足最低要求的关系属于第一范式,简称1NF(FirstNormalForm)。在第一范式中进一步满足一些要求的关系属于第二范式,简称2NF,依次类推,3NF、BCNF、4NF、5NF•所谓第几范式是表示关系模式满足的条件,所以经常称某一关系模式为第几范式的关系模式,R为第二范式的关系模式写为R∈2NF7.2.2范式•对关系模式的属性间的函数依赖加以不同的限制就形成了不同的范式。•1NF的表比不是1NF的要好•2NF的表比1NF的要好•范式越高、规范化的程度越高,关系模式就越好。7.2.2范式•规范化的理论首先由E.F.CODD于1971年提出,其目的是要设计“好的”关系数据库模式。关系规范化实际就是对有问题(操作异常)的关系进行分解,从而消去这些异常。第一范式第一范式:不包含重复组的关系(即不包含非原子项的属性)。•将非第一范式的关系转换为第一范式的关系:只需要将所有数据项都分解为不可再分的最小数据项即可。第二范式•2.第二范式:如果R(U,F)∈1NF,并且R中的每个非主属性都完全函数依赖于主码,则R(U,F)∈2NF•若某个1NF的关系的主码只由一个列组成,那么这个关系就是2NF关系•若某个1NF的关系的主码是由多个属性列构成的复合主码,并且存在非主属性对主属性的部分函数依赖则这个关系就不是2NF•例:S-L-C(Sno,Sdept,SLOC,Cno,Grade)不是2NF。因为(SNO,CNO)是主码,而又有SNO决定SDEPT,因此有(Sno,cno)P→Sdept,非主码属性对主码部分依赖,不是2NF。分解办法•前面已经介绍S-L-C(Sno,Sdept,SLOC,Cno,Grade)不是2NF,这个关系存在异常操作,而这些异常操作就是因为存在部分函数依赖关系造成的。•可以用模式分解的办法将非2NF的关系模式分解为多个2NF的关系模式。分解办法•分解过程:•首先,对于组成主码的属性集合的每一个子集,用它作为主码构成一个表。•然后,将依赖于这些主码的属性放置到相应的表中。•最后,去掉只由主码的子集构成的表。分解示例•对于S-L-C表,首先分解为如下形式的三张表:S-L(Sno,…)C(Cno,…)S-C(Sno,Cno,…)•然后,将依赖于这些主码的属性放置到相应的表中S-L(Sno,Sdept,Sloc)C(Cno)S-C(Sno,Cno,Grade)•最后,去掉只由主码的子集构成的表,最终分解为:S-L(Sno,Sdept,Sloc)S-C(Sno,Cno,Grade)这2个表都是2NFS-L(Sno,Sdept,Sloc)存在问题•分解之后形成2个2NF的表也存在问题:•数据冗余:有多少个学生就有多少个重复的Sdept和SLOC;•插入异常:当新建一个系时,若还没有招收学生,则无法插入;•因为,2NF的表也可能存在操作异常问题,还需要进一步分解第三范式•定义:如果R(U,F)∈2NF,并且所有非主属性都不传递依赖于主码,则R(U,F)∈3NF。•从定义可以看到,如果存在非主属性对主码的传递依赖,则相应的关系模式不是3NF•对S-L(Sno,Sdept,SLOC)•SNO→SDEPT,SDEPT→SLOC∵Sno传递→SLOC,∴不是3NF当关系模式中存在传递函数依赖时,这个关系模式仍然有操作异常,需要进一步分解分解过程•(1)对于不是候选码的每个决定因子,从表中删去依赖于它的所有属性;(去掉SLOC)•(2)新建一个表,新表中包含在原表中所有依赖于该决定因子的属性;新建D-L(Sdept,Sloc)•(3)将决定因子作为新表的主码。D-L(Sdept,Sloc)•S-L分解后的关系模式为:•S-D(Sno,Sdept)•D-L(Sdept,Sloc)•这2个表都是3NF,•由于3NF关系模式中不存在非主码属性对主码的部分依赖和传递依赖关系,因而在很大程度上消去了数据冗余和更新异常,因此在通常的数据库设计中,一般要求要达到3NFBCNF•BCNF也叫Boyce-codd范式,它是3NF的进一步规范化,其限制条件更严格。•首先分析3NF中存在的问题。在3NF的关系模式中可能存在能够决定其他属性取值的属性组,而该属性组非码。•例:关系模式:CSZ(City,Street,Zip)•语义:城市和街道可以决定邮政编码,邮政编码可以决定城市。•候选码:(City,Street),(Street,Zip)•F:{(City,Street)→Zip,Zip→City}•是3NF:此关系模式中没有非主属性,因此为3NF•存在的问题:插入异常,删除异常•关系模式:CSZ(City,Street,Zip)•存在的问题:插入异常,删除异常•假如取(City,Street)为主码,则当插入数据时,如果没有街道信息,则一个邮政编码是哪个城市的信息就无法保存在数据库中,因为STREET不能为空。由此可见3NF的表也有可能操作异常。•操作异常的原因是因为存在Zip→City,ZIP是决定因子,但ZIP不是码。BCNF(续)•BCNF定义:R∈1NF,且能决定其它属性取值的属性(组)必定包含码,则其是BCNF•如果一个关系的每个决定因素都是候选码,则其是BCNF•如果一个关系的每个函数依赖的左部都是候选码,则其是BCNF•如果R∈3NF,并且不存在主属性对非主属性的函数依赖,则其是BCNFBCNF和3NF的关系•若R∈BCNF,则R∈3NF•若R∈3NF,则R不一定属于BCNF规范化举例•设有关系模式:Student(学号,姓名,导师号,导师名,课程号,课程说明,成绩)•语义:一名学生只有一个导师,学生可选多门课。•将其规范化成3NF的。1.此表是1NF,没有可再分的数据项其函数依赖为:学号p→姓名(学号决定姓名),学号p→导师号,学号p→导师名,课
本文标题:第7章 关系数据库规范化理论---12
链接地址:https://www.777doc.com/doc-3380700 .html