您好,欢迎访问三七文档
第6章规范化本章主要内容关系模型术语回顾函数依赖非规范化的关系最基本的规范化关系存在的异常分析范式1NF~BCNF规范化的本质1.关系关系模型的数据结构就是关系。在用户看来,一个关系就是一张二维表,表中的一行表示实体的一个具体例子(实例),也可称为一个元组或一个记录。表中的一列就是实体的一个属性,也称为一个字段。6.1关系模型术语回顾2.候选键、主属性与非主属性(1)候选键候选键由一个属性名或多个属性名组成。它具有两个性质:性质1:表中任一行在候选键属性上的值是惟一的。因此,候选键的不同取值可以用来区分不同的行。性质2:不存在更小的真子集(更小的属性或属性组),其不同的取值也能用来区分不同的行。如Students关系的Sno列,就是一个候选键。因为,给定一个Sno的值,如20030102,就能确定表中惟一的一行。一个表可能有多个候选键。(2)主属性与非主属性候选键中出现的属性都是主属性,主属性以外的属性都是非主属性。3.主键与实体完整性(1)主键:如果一个表有多个候选键,通常选择其中一个候选键作为区分行的惟一性标识符,称为主键。如果一个表只有一个候选键,那么这个候选键就作为主键。在Students表中只有一个候选键,则Sno就是该表的主键。(2)实体完整性:表中任意一行的主键值不能为空值。实体完整性依靠主键来实现。它要求主键值不能为空,也就是说主键值必须是某一确定的值。又因为主键是候选键之一,而根据候选键的定义,候选键列上的各个值都惟一,因此,主键列上的各个值也都惟一。可见,实体完整性也即主键值惟一且不能为空值。如Students表中,Sno列的每一个值惟一,且没有空值存在。4.外键与参照完整性(1)外键:若一个表R1中的一个列或列组对应另一个表R2的主键,那么该列或列组称为表R1的外键。例如,第二章图2-1中的选课表Enrollment(Sno,Cno,Grade),Sno不是Enrollment表的主键,但它Sno是表Students(Sno,Sname,Ssex,Sage,Sdept)中的主键。因此,Sno是表Enrollment的外键。(2)参照完整性:一个表的外键值可以为空值。若不为空值,则每一个外键值必须等于另一个表中主键的某个值。外键实现了表之间的参照完整性。主键与外键提供了两个关系中元组之间联系的手段。当两个关系进行连接操作时就是因为有外键在起作用。1.函数依赖定义6.1:设一个关系模式R(U),R是关系的名称,U是关系R的所有属性的集合,X和Y为属性集U上的子集。若对于任一元组在X上的每一个值,都有Y上的一个惟一值与之对应,则称X函数决定Y,或称Y函数依赖于X,记作XY。X称为这个函数依赖的决定因子。函数依赖可以简单理解为:如果知道属性X的值,就可以获得属性Y的值,那么属性X函数决定属性Y,或者说:属性Y函数依赖于属性X,记作XY。若X不函数决定Y,或Y不函数依赖于X,记作:6.2函数依赖YX2.平凡函数依赖与非平凡函数依赖定义6.2:设一个关系模式R(U),R是关系的名称,U是关系R的所有属性的集合。X和Y为属性集U上的子集,如果X→Y,Y是X的子集,则称X→Y是平凡的函数依赖。如果Y不是X的子集,则称X→Y是非平凡的函数依赖。平凡函数依赖可以理解为两种情况:(1)关系的任一个元组的任一属性值都能够函数决定它自己的值。(2)任一组属性值都能够函数决定其中包含的任一属性或属性子集的值。例如:Students关系中,总是存在诸如以下的平凡函数依赖:Sno→SnoSname→Sname(Sno,Sname)→Sno(Sno,Sname)→Sname平凡函数依赖是在任一关系中都必然成立的,它不反映新的语义。一般不讨论。若没有特别声明,X→Y都表示非平凡函数依赖。3.完全函数依赖与局部函数依赖定义6.3:设一个关系R(U),R是关系的名称,U是关系R的所有属性的集合,X和Y为属性集U上的子集。若XY,同时X的一个真子集X’且也能够函数决定Y,即存在X’Y,则称X部分函数决定Y,或Y部分函数依赖于X,记作:。否则若不存在一个真子集X’,使得X’也能够函数决定Y,则称X完全函数决定Y,或者Y完全函数依赖于X。记作:。SnoSage为完全函数依赖(Sno,Ssex)Sage为部分函数依赖4.传递函数依赖定义6.4:设一个关系R(U),R是关系的名称,U是关系R的所有属性的集合,X、Y和Z为属性集U上的子集。若XY,YZ,且则存在称X传递函数决定Z,或者说Z传递函数依赖于X。例如:S(Sno,Sname,Ssex,Sage,Dno,Dname)有Sno-Dno,Dno-Dname则有:,XYZY5.候选键利用函数依赖来定义6.1节中的候选键定义6.5:设一个关系R(U),R是关系的名称,U是关系R的所有属性的集合,K为属性集U上的子集。如果,则称K为关系R(U)的一个候选键。若关系R有多个候选键,则选定其中一个作为主键。注意:表示K函数决定U的每一个属性。6.3.1非规范化的关系当一个表中存在还可以再细分的组合属性项或具有多值属性时,这个表就是非规范化的关系。非规范化的关系有以下两种情况:(1)表中具有组合属性。(2)表中具有多值属性。非规范化的关系分解后的表满足关系的性质1,即它们的每一个属性的各个取值都是单一值,这种表就是满足最低要求的规范化的关系。关系数据库中的表应该满足这一最低要求,该最低要求就是第一范式(1NF)定义的要求6.3规范化6.3.2最低程度的规范化关系的异常分析满足1NF的关系是一个规范化的关系,但它是规范化程度最低的关系,这样的关系仍然存在:(1)数据冗余与更新异常(2)插入异常(3)删除异常例如:学生选课数据库中将学生、系、课程,选课成绩等所有的信息一起存放。即有关系模式:StudData(Sno,Sname,Ssex,Ssage,Dno,Dname,Cno,Cname,Credits,Grade)这个关系的主键(Sno,Cno),存在以上三种异常,分析如下:(1)数据冗余与更新异常所谓数据冗余,就是相同数据在表中多次重复存放的现象。对于每个学生所选的每一门课,都要保存学生的学号、姓名、性别、年龄等信息。存在大量冗余。数据冗余不仅会浪费存储空间,而且可能造成数据的不一致性。所谓数据不一致性,是指一个数据有多个备份,并且多个备份存放的值不一样。数据不一致是对冗余的数据更新不彻底造成的,通常也称为更新异常。(2)插入异常所谓插入异常是指希望插入到关系的记录,由于不能满足实体完整性要求而不能正常地插入到关系中。例如,在StudData这个关系中,主键由学号(Sno)和课程号(Cno)组成,在某一学生刚入学,还没有选课,或因为某种原因没有选课时,就会由于关系的主键值不能为空(NULL)而无法将该学生的姓名Sname、性别Ssex等信息插入到StudData关系中。(3)删除异常所谓删除异常是指在删除某种事实数据的同时把其它不该删除的事实数据也删除了。例如,在StudData关系中,如果某个学生的课上完了,删除该学生所选修的课程,就会连该学生的姓名Sname、性别Ssex等基本信息都删除了。显然这也是不应该的。(4)三种异常产生的原因分析:由于将多个事实捆绑在一起存放之故。如StudData关系中保存了四个不同的事实,即系、学生、课程、选课。实际情况是:不管系是否招生,只要系成立未被撤销,系就存在;不管学生选课与否,学生一旦进学校就是存在的;也不管是否有学生选课,一旦该课程设立未被撤销,课程还是存在的。而对选课,只有学生选了某门课程,才有选课的结果:成绩。解决的直观方法是:消除这种捆绑,按一个事实一个关系存放的原则分解StudData关系。理论上讲:根据范式要求分解转换为高一级的范式,即规范化。6.3.3范式类型通常按属性间依赖情况区分关系规范化的程度,定义了不同要求的规范化关系模式,即范式。目前遵循的主要范式有:第一范式(1NF)、第二范式(2NF)、第三范式(3NF)、BC范式(BCNF)、第四范式(4NF)和第五范式(5NF)等。范式是嵌套的,就是说,属于第二范式的关系必然是属于第一范式的关系,在第五范式中的关系也在第四范式、BC范式、第三范式、第二范式和第一范式中的关系。每一范式都定义了一定的限制或者说要求。关系R满足某一范式要求,则我们称R属于某一范式,有的教材也称R在某一范式中,或者说R是某一范式的。范式既可以作为衡量关系模式规范化程度的标准,又可以看作满足某一程度要求的关系模式的集合。规范化依靠范式来进行,它将一个满足低一级范式要求的关系模式,通过分解转化为若干个满足高一级范式要求的关系模式的集合。下面讨论不同的范式。6.3.4第一范式(1NF)定义6.6:如果一个关系R的所有属性都是不可再分的基本数据项,则称关系R属于第一范式,记作R1NF。例如:关系StudData就是属于第一范式的,可记作:StudData1NF。在任何一个关系数据库中,所有的关系必须都是属于第一范式的关系。不满足第一范式要求的数据库模式就不能称之为关系数据库模式。已经知道只满足第一范式要求的关系并不是个好的关系,比如StudData关系,存在数据冗余、更新异常、插入异常和删除异常等问题,需要进一步规范化。6.3.5第二范式(2NF)定义6.7:如果关系R∈1NF,并且关系R的每一个非主属性不部分依赖于候选键,则R属于第二范式,记作:R∈2NF。关系StudData属于第一范式。但它不属于第二范式。原因:存在非主属性Sname、Ssex、Sage、Dno部分函数依赖于主键(Sno,Cno)。所以StudData违反了2NF的定义,它不属于2NF。消除部分函数依赖的方法就是将关系分解,使其新的关系中非主属性于候选键之间不存在部分函数依赖。分解的方法是投影。具体讲:(1)用组成候选键的属性集合的每一个非空真子集作为主键构成一个新关系;(2)对于每个新关系,将完全依赖或传递依赖于此主键的属性放置到此关系中。下面将StudData关系按上述方法分解:StudData关系只有一个候选键,也就是主键(Sno,Cno)。它的非空子集有:Sno、Cno、(Sno,Cno)。对应构成三个新关系,设分别为Students和Courses、Enrollment,其中,Students的主键为Sno,Courses的主键为Cno,Enrollment的主键为(Sno,Cno)。将完全依赖或传递依赖于Sno主键的属性放置到Students表中,完全依赖或传递依赖于Cno主键的属性放置到Courses表中,完全依赖或传递依赖于(Sno,Cno)主键的属性放置到Enrollment表中得到:Students(Sno,Sname,Ssex,Sage,Dno,Dname)Courses(Cno,Cname,Credits)Enrollment(Sno,Cno,Grade)分解得到三个关系Students、Courses、Enrollmen。根据2NF的标准衡量,这三个关系中都不存在非主属性部分函数依赖于候选键的情况。所以它们都属于2NF。即Students∈2NF、Courses∈2NF、Enrollmen∈2NF。结果:冗余问题已得到明显改善,但还有一定的数据冗余,还存在插入异常和删除异常。属于第二范式的关系同样还可能存在操作异常情况,因此需要进一步规范化。6.3.6第三范式(3NF)定义6.8:如果关系R∈2NF,且每一个非主属性都不传递依赖于候选键,则R属于第三范式,记作R∈3NF。StudData分解后得到的三个关系Students、Courses、Enrollment,它们都属于第二范式了。但Students(Sno,Sname,Ssex,Sage,Dno,Dname)不属于3NF。原因:SnoDno,DnoDname,存在非主属性Dname传递函数依赖于候选键Sno。根据3NF的定义,Students不属于
本文标题:第6章_规范化
链接地址:https://www.777doc.com/doc-3400669 .html