第5章关系数据库规范化理论第5章关系数据库规范化理论5.1关系规范化的作用5.2函数依赖5.3关系模式的规范化5.4多值依赖和第四范式5.5关系的规范化程度5.6函数依赖公理与模式分解5.7小结第5章关系数据库规范化理论5.1关系规范化的作用所谓规范化,就是用形式更为简洁、结构更加规范的关系模式取代原有关系的过程。例有三个属性的工资表(姓名,级别,工资)关系模式。对应此模式建立的表如表5―1所示。第5章关系数据库规范化理论表5―1工资表第5章关系数据库规范化理论5.1.1表5―1存在的问题1.数据冗余度大表5―1中,工资是从级别推导出的,但却重复存放。数据在数据库中的重复存放称为数据冗余。冗余度大,不仅浪费存储空间,重要的是在对数据进行修改时,又易造成数据的不一致性。如10级的工资变化时,如果表中有K个职工的工资为10级,就需要修改K次,一旦遗漏就使数据不一致。第5章关系数据库规范化理论2.插入与删除异常无法插入某部分信息或删除掉不应删除的信息称为插入或删除异常。例如,9级工资为550元的信息无法插入表。因为该表的码是姓名,而目前无职工工资级别为9级,表中不能插入码为空值的记录。即在插入一行时,此关系模式强迫同时增加关于两个实体的数据。又如,要删除姓名为C的职工记录时,又将7级工资的信息一起删去了。即在删除一行时,删除了关于两个实体的数据。第5章关系数据库规范化理论5.1.2解决方法上述现象的产生,是由于关系模式不合理。如果一个关系中,存储了两个或两个以上实体的数据,一般应将它分解为多个关系,使每个关系只有一个实体。将表5―1分解为两个模式表达:职工级别(姓名,级别),级别工资(级别,工资),如表5―2、表5―3所示。第5章关系数据库规范化理论表5―2职工级别第5章关系数据库规范化理论表5―3级别工资第5章关系数据库规范化理论改进后,有如下好处:(1)数据量减少。设有n个职工,m个工资级别,则表5―1有n*m个数据,表5―2和表5―3共有2n+2m个数据,显然后者的数据量要少得多。(2)表达能力强。表5―1中无法进入的信息(如9级工资),而在采用改进后的两个模式表达时则可加入;当删除职工C时,也不会丢失7级工资信息。(3)修改方便。改进后,修改某一级别工资时只要修改一处。第5章关系数据库规范化理论当然,改进后的关系模式也存在另外一个问题,当查询某个职工的工资时,需要将两个关系连接后进行查询,而关系的连接代价是很大的。那么,什么样的关系模式需要分解?分解关系模式的理论依据又是什么?分解后能完全消除上述三种问题吗?回答这些问题需要理论的指导。下面将加以讨论。第5章关系数据库规范化理论5.2函数依赖5.2.1属性间的关系前面章节讲到客观世界的事务间有着错综复杂的联系。实体间的联系有两类,一类是实体与实体之间的联系;另一类是实体内部各属性间的联系。在数据库建模一章中主要讨论了前一类联系,现在讨论第二类联系。第5章关系数据库规范化理论属性间的联系可分为以下三类:1.一对一关系(1∶1)以职工模式为例:职工(职工号,姓名,职称,部门),如果该企业(或单位)中职工无重名,则属性职工号与姓名之间是1∶1关系。一个职工号唯一地决定一个姓名,一个姓名也可决定唯一的职工号。设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中至多有一个值与之对应,且反之亦然,则称X、Y两属性间是一对一关系。第5章关系数据库规范化理论2.一对多关系(1∶m)职工模式中,职工号和职称间是一对多关系。一个职工号只对应一种职称(如胡一民只能对应工程师),但一种职称却可对应多个职工号(如工程师可对应多名职工)。设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中至多有一个值与之对应,而Y中的一个值却可以和X中的n个值(n≥0)相对应,则称Y对X是一对多关系。第5章关系数据库规范化理论3.多对多关系(m∶m)在职工模式中,职称和部门之间是多对多关系。一种职称可分布在多个部门中(如每一个部门中均可有工程师),而一个部门中也可有多个职称。设X、Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中有m(m≥0)个值与之对应,而Y中的一个值也可以和X中的n个值(n≥0)相对应,则称Y对X是多对多关系。第5章关系数据库规范化理论上述属性间的三种关系实际上是属性值之间相互依赖又相互制约的反映,称为属性间的数据依赖。数据依赖是现实世界属性间相互联系的抽象,是世界内在的性质,是语义的体现。数据依赖共有三种:函数依赖(FunctionalDependency,简称FD)、多值依赖(MultivaluedDependency,简称MVD)和连接依赖(JoinDependency,简称JD),其中最重要的是函数依赖和多值依赖。第5章关系数据库规范化理论5.2.2函数依赖函数依赖是属性之间的一种联系。假设给定一个属性的值,就可以唯一确定(查到)另一个属性的值。例如,知道职工号的值,可以得出其对应的职称的值。如果这种情况成立,就可以说职称函数依赖于职工号。定义1所谓函数依赖是指在关系R中,X、Y为R的两个属性或属性组,如果对于R的所有关系r都存在:对于X的每一个具体值,Y都只有一个具体值与之对应,则称属性Y函数依赖于属性X。第5章关系数据库规范化理论或者说,属性X函数决定属性Y,记作X→Y。其中X叫决定因素,Y叫被决定因素。此定义可简单表述为:如果属性X的值决定属性Y的值,那么属性Y函数依赖于属性X。换一种说法是,如果知道X的值,就可以获得Y的值。(1)若Y函数不依赖于X,记作X→Y。(2)若X→Y,Y→X,记作XY。前面讨论的属性间的三种关系,并不是每一种关系中都存在函数依赖。第5章关系数据库规范化理论(1)如果两属性集X、Y间是1∶1关系,则存在函数依赖:XY。如职工关系模式中,如果不允许同名职工存在,则有:。(2)如果两属性集X、Y间是1∶m关系,则存在函数依赖:X→Y。如:职工号→职称,职工号→部门。(3)如果两属性集X、Y间是m∶n关系,则不存在函数依赖。如职称与部门之间即如此。第5章关系数据库规范化理论我们再以关系模式学生课程为例,来说明属性间的函数依赖。设关系模式为:学生课程(学生号,课程号,成绩,教师,教师办公室),在该关系中,成绩要由学生号和课程号共同确定,但教师和教师办公室由课程号决定,所以此关系中包含了以下四种函数依赖关系:(学生号,课程号)→成绩;课程号→教师;课程号→教师办公室;教师→教师办公室.注意:属性间的函数依赖不是指R的某个或某些关系满足上述限定条件,而是指R的一切关系都要满足定义中的限定。只要有一个具体关系r不满足定义中的条件,就破坏了函数依赖,使函数依赖不成立。第5章关系数据库规范化理论5.2.3码的定义在前面章节中我们已对码进行了直观的定义,下面用函数依赖的概念对码作出较为精确的形式化的定义。定义2设K是关系模式R(U,F)中的属性或属性组,K′是K的任一真子集。若K→U,而不存在K′→U,则K为R的候选码(CandidateKey)。·若候选码多于一个,则选定其中的一个为主码(PrimaryKey);·包含在任一候选码中的属性,叫做主属性(PrimeAttribute);第5章关系数据库规范化理论·不包含在任何码中的属性称为非主属性(NonprimeAttribute)或非码属性(Non―keyAttribute);·关系模式中,最简单的情况,单个属性是码,称为单码(SingleKey);最极端的情况,整个属性组是码,称为全码(All―Key)。前面我们已经多次遇到单码的情况,下面举一全码的例子。在第5章有关演员、制片公司、电影的一关系模式如下:签约(演员名,制片公司名,电影名)第5章关系数据库规范化理论该关系模式反映了某个演员为某部电影与某制片公司的签约情况。由于一个制片公司可以为一部电影和多个演员签约,一个演员可以和多个制片公司签约饰演多部电影中的角色,一部电影可由不同的制片公司制作。所以此关系模式的码为(演员名,制片公司名,电影名),即全码。第5章关系数据库规范化理论定义3设有两个关系模式R和S,X是R的属性或属性组,并且X不是R的码,但X是S的码(或与S的码意义相同),则称X是R的外部码(ForeignKey),简称外码。设有如下两个关系模式:职工(职工号,姓名,性别,职称,部门号)部门(部门号,部门名,电话,负责人)其中部门号不是职工表的码,但是部门表的码,所以部门号在职工表中称为外码。第5章关系数据库规范化理论关系间的联系可通过同时存在于两个或多个关系中的主码和外码的取值来建立。例如要查询某个职工所在部门的详细情况,只需查询部门表中的部门号与该职工部门号相等的记录。所以主码和外部码提供了一个表示关系间联系的途经。第5章关系数据库规范化理论5.2.4函数依赖和码的唯一性码是由一个或多个属性组成的可唯一标识元组的最小属性组。码在关系中总是唯一的,即一个码函数唯一地决定一行。如果码的值重复,则整个元组都会重复。否则,违反实体完整性规则。与码的唯一性不同,函数依赖的决定因素可能是唯一的,也可能不是唯一的。如果我们知道A决定B,且A和B在同一关系中,但我们仍无法知道A是否能决定除B以外的其他所有属性,所以无法知道A在关系中是否是唯一的。第5章关系数据库规范化理论看关系模式:学生课程(学生号,课程号,成绩,教师,教师办公室),此关系中包含的四种函数依赖为:(学生号,课程号)→成绩;课程号→教师;课程号→教师办公室教师→教师办公室其中,课程号是决定因素,但它不是唯一的。因为它能决定教师和教师办公室,但不能决定属性成绩。但决定因素(学生号,课程号)除了能决定成绩外,当然也能决定教师和教师办公室,所以它是唯一的。关系的码应取(学生号,课程号)。第5章关系数据库规范化理论函数依赖性是一个与数据有关的事物规则的概念。如果属性B函数依赖于属性A,那么,若知道了A的值,则完全可以找到B的值。这并不是说可以导算出B的值,而是逻辑上只能存在一个B的值。例如,在人这个实体中,如果知道某人的唯一标识符,如身份证号,则可以得到此人的性别、身高、职业等信息,所有这些信息都依赖于确认此人的唯一标识符。第5章关系数据库规范化理论通过非主属性如年龄,无法确定此人的身高,从关系数据库的角度来看,身高不依赖于年龄。事实上,这也就意味着码是实体实例的唯一标识符。因此,在以人为实体来讨论依赖性时,如果已经知道是哪个人,则身高、体重等等就都知道了。码指示了实体中的某个具体实例。第5章关系数据库规范化理论5.3关系模式的规范化5.3.1非规范化的关系当一个关系中的所有分量都是不可分的数据项时,该关系是规范化的。表5―4具有组合数据项,表5―5具有多值数据项,因此都不是规范化的表。第5章关系数据库规范化理论表5―4具有组合数据项的非规范化的表第5章关系数据库规范化理论表5―5具有多值数据项非规范化表第5章关系数据库规范化理论5.3.2第一范式(1NF)定义4如果关系模式R中不包含多值属性,则R满足第一范式,简称1NF(FirstNormalForm),记作R∈1NF。1NF是对关系的最低要求,不满足1NF的关系是非规范化关系,如表5―4、表5―5所示。非规范化关系转化为1NF的方法很简单,当然也不是唯一的。对表5―4、表5―5分别进行横向和纵向展开,可分别转化为如表5―5、表5―7所示的符合1NF的关系。第5章关系数据库规范化理论表5―5消除组合数据项后的表第5章关系数据库规范化理论表5―7消除多值数据项后的表第5章关系数据库规范化理论5.3.3第二范式(2NF)表5―7虽然已符合1NF的要求,但表中存在大量的数据冗余和潜在的数据更新异常。原因是该关系的码是(职工号,学历),但姓名、职称、系名、系办公地址却与学历无关,即它们只与码的一部分有关。定义5设X、Y是关系R的两个不同的属性或属性组,且X→Y。如果存在X的某一个真子集X′,使X′→Y成立,则称Y部分函数依赖于X,记作XY。反之,则称Y完全函数依赖于X,记作XY。FF第5章关系数据库规范化理论定义5