第7章关系数据库设计理论4.1规范化问题的提出4.2函数依赖4.3范式4.4多值依赖与4NF4.5关系模式的分解在关系型数据库中,关系模型包括一组关系模式,并且各个关系不是完全独立的。要设计一个合适的关系数据库系统,必须进行数据库的规范化。规范化理论包括三个方面的内容:函数依赖、范式和模式设计。4.1规范化问题的提出4.1.1规范理论的主要内容4.1.2不合理的关系模式存在的存储异常问题例要求设计一教学管理数据库,其关系模式SCD如下SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE)关系中(SNO,SN)属性的组合能唯一标识一个元组,所以是该关系模式的主关键键。但进行数据库的操作时,会出现以下几方面的问题。1)数据冗余2)插入异常3)删除异常4)更新异常关系模式应满足的基本要求:1、元组的每一个分量必须是不可分的数据项;2、数据库中的数据冗余应尽可能的少;3、关系数据库不能因为数据更新操作而引起数据不一致问题4、当执行数据插入操作时,数据库中的数据不能产生插入异常现象5、数据库中的数据不能在执行删除操作时产生删除异常问题6、数据库设计应考虑查询要求,数据组织应合理。4.2.1函数依赖的定义及性质关系模式中的各个属性之间相互依赖、相互制约的联系称为数据依赖。函数依赖、多值依赖是重要的数据依赖4.2函数依赖1、函数依赖定义设R〈U〉是属性集U上的关系模式,X、Y是U的子集。若对于R〈U〉的任意一个可能的关系r,r中不可能存在两个元组在X上的属性值相等,而Y上的属性值不等,则称X函数确定Y函数,或Y函数依赖于X函数,记作X→Y。我们称X为决定因素,Y为依赖因素,当Y不函数依赖于X时,记做XY。当X→Y且Y→X时,则记做X←→Y对于关系模式SCDU={SNO,SN,AGE,DEPT,MN,CNO,SCORE}F={SNO→SN,SNO→AGE,SNO→DEPT}SNOSCORE但是(SNO,CNO)→SCORE说明:1)平凡的函数依赖与非平凡的函数依赖当属性集Y是属性集X的子集时,则必然存在着函数依赖关系X→Y,这种类型的函数依赖关系称为平凡的函数依赖。如果Y不是X的子集,则称X→Y为非平凡的函数依赖。2)函数依赖与属性之间的联系类型有关a、在一个关系模式中,如果属性X与Y有1:1的联系时,则存在函数依赖X→Y且Y→X,即X←→Y。(SNO、SN)b、如果属性X与Y有m:n的联系时,则不存在函数依赖。(SNO、CNO)2、完全函数依赖和部分函数依赖在R〈U〉中,如果X→Y,并且对于X的任何一个真子集X’,都有X’Y,则称Y对X完全函数依赖,记作:X→Y;若X→Y,但Y不完全函数依赖于X,则称Y对X部分函数依赖,记作:X→Y。FPSNOSCORE,且CNOSCORE,有SCORE完全函数依赖于(SNO,CNO),SNO→AGE所以(SNO,CNO)部分函数依赖于AGE3、传递函数依赖SNO→DEPT,但DEPTSNO,而DEPT→MN,则有MN对SNO传递函数依赖在R〈U〉中,如果X→Y,(YX),YX,Y→Z,则称Z对X传递函数依赖。传递函数依赖记作X→Z。T4、函数依赖可以保证关系分解的无损连接性设R(X,Y,Z),X,Y,Z为不相交的属性集合,如果X→Y或X→Z则有R(X,Y,Z)=R(X,Y)R(X,Z),其中R(X,Y)表示关系R在属性(X,Y)上的投影,即R等于其投影在X上的自然连接,这样就保证了关系R分解后不会丢失原有信息,称做关系分解的无损连接性。例如:对于关系模式SCD,有SNO→(SN,AGE,DEPT,MN),SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE)=SCD[SNO,SN,AGE,DEPT,MN]SCD[SNO,CNO,SCORE]说明用其投影在SNO上的自然连接可复原关系模式SCD.5、码设K为关系模式RU,F中的属性或属性组集合。若KU,则K称为R的一个候选码。若关系模式R有多个候选码,则选定其中一个作为主码。我们把关系数据库的规范化过程中为不同程度的规范化要求设立的不同标准称为范式(Normalform)。由于规范的程度不同,就产生了不同的范式。满足最基本规范化要求的关系模式叫第一范式,在第一范式中进一步满足一定要求的范式为第二范式,依次类推就产生第三范式等概念。4.3范式4.3.1第一范式(1NF)定义:如果关系模式R所有属性均为简单属性,即每一个属性都是不可再分的,则称R属于第一范式,简称1NF.在任何一个关系数据库系统中,第一范式是关系模式的一个最起码的要求。不满足第一范式的数据库模式不能称为关系数据库。关系模式SCD属于第一范式,但它具有大量的数据冗余,插入异常等弊端。出现问题的原因在SCD中的函数依赖关系。在SCD中既存在完全函数依赖,又存在部分函数依赖和传递函数依赖。这在数据库中不允许。解决方法利用投影运算将关系分解。(SNO,CNO)fSCORESNO→SN,(SNO,CNO)PSNSNO→AGE,(SNO,CNO)PAGESNO→DEPT,(SNO,CNO)PDEPTSNOtMN,(SNO,CNO)PMN4.3.2第二范式(2NF)1、定义:如果关系模式R属于1NF,且每个非主属性都完全函数依赖于R的每个关系键,则称R属于第二范式,简称2NF.在关系模式SCD中,SNO,CNO为主属性,AGE,DEPT,MN,SCORE为非主属性,存在非主属性对关系键的部分函数依赖,所以SCD不属于2NF。2、2NF规范化2NF规范化是指把1NF关系模式通过投影分解,转换成为2NF关系模式的集合。分解时遵循的基本原则是让一个关系只描述一个实体或者实体间的联系。如果多于一个实体或联系,则进行投影分解。例:将SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE)规范为2NF由于SNO→SN,SNO→AGE,SNO→DEPT,(SNO,CNO)fSCORE,可以判断,关系SCD至少描述两个实体,一个为学生实体,属性有SNO,SN,AGE,DEPT,MN;另一个是学生与课程的联系,属性有SNO,CNO,SCORE.根据分解原则,可将SCD分解成如下两个关系:SD(SNO,SN,AGE,DEPT,MN)描述学生实体,SC(SNO,CNO,SCORE)描述学生与课程的联系。对于分解后的两个关系,主键分别为SNO和(SNO,CNO),非主属性对主键完全函数依赖。因此,两个关系都属于第二范式,同时SCD的这种分解不会丢失任何信息,具有无损连接性。1NF的关系模式经过分解转换成2NF后,消除了一些数据冗余。结论:1)从1NF关系中消除非主属性对关系键的部分函数依赖,则可得到2NF关系。2)如果R的关系键为单属性,或R的全体属性均为主属性,则R为2NF.4.3.3第三范式(3NF)1、定义:如果关系模式R∈2NF,且每个非主属性都不传递依赖于R的每一个关系键,则称R属于第三范式,简称3NF.2、性质(1)如果R∈3NF,则R也是2NF。(2)如果R∈2NF,则R不一定是3NF。3、规范化分解时遵循的基本原则是让一个关系只描述一个实体或者实体间的联系。如果多于一个实体或联系,则进行投影分解。例:将SD(SNO,SN,AGE,DEPT,MN)规范为3NF由于关系SD描述两个实体,一个为学生实体,属性有SNO,SN,AGE,DEPT;另一个是系的实体,属性有DEPT,MN.根据分解原则,可将SD分解成如下两个关系:S(SNO,SN,AGE,DEPT)描述学生实体,D(DEPT,MN)描述系实体。4.3.4BC范式(BCNF)1、BC范式的定义如果关系模式R∈1NF,且所有的函数依赖X→Y(Y不属于X),决定因素X都包含了R的一个侯选键,则称R属于BC范式,记做R∈BCNF.2、性质(1)满足BCNF的关系将消除任何属性(主属性或非主属性)对键的部分函数依赖和传递函数依赖。也就是如果R∈BCNF,则必有R也是3NF。(2)如果R∈3NF,则不一定有R是BCNF。例如:设有关系模式SNC(SNO,SN,CNO,SCORE),(无重名现象)。可以判定SNC有两个候选键(SNO,CNO)和(SN,CNO),其函数依赖如下:SNO←→SN(SNO,CNO)→SCORE(SN,CNO)→SCORE唯一非主属性SCORE对键不存在部分函数依赖,也不存在传递函数依赖。所以SNC∈3NF.但是因为SNO←→SN,即决定因素SNO或SN不包含候选键,从另一个角度看,存在着主属性对键的部分函数依赖:(SNO,CNO)PSN,(SN,CNO)pSNO,所以SNC不是BCNF.3、BCNF规范化把3NF的关系模式通过投影分解转换成BCNF关系模式的集合。例将SNC(SNO,SN,CNO,SCORE)规范到BCNF我们将SNC分解成如下两个关系:S1(SNO,SN)S2(SNO,CNO,SCORE)对于S1,有两个候选键,对于S2,主键为(SNO,CNO).在这两个关系中,无论主属性还是非主属性都不存在对键的部分依赖和传递依赖,S1∈BCNF,S2∈BCNF.结论:从1NF关系中消除任何属性对关系键的部分和传递函数依赖,则可得到BCNF关系。4.5.1关系模式规范化的步骤规范化的基本思想是对已有的关系模式进行分解来实现的,它逐步消除数据依赖中不合适的部分,把低一级的关系模式分解为多个高一级的关系模式,使模式中的各关系模式达到某种程度的“分离”。即采用“一事一地”的模式设计原则,让一个关系描述一个概念、一个实体或者实体间的一种联系,若多于一个概念就把它“分离”出去。因此所谓规范化实质上是概念的单一化。4.5关系模式的分解关系模式规范化的基本步骤如下:(1)对1NF关系进行投影,消除原关系中非主属性对关系键的部分函数依赖,将1NF关系转换为若干个2NF关系。(2)对2NF关系进行投影,消除原关系中非主属性对关系键的传递函数依赖,从而产生一组3NF关系。(3)对3NF关系进行投影,消除原关系中主属性对关系键的部分函数依赖和传递函数依赖,得到一组BCNF关系。4.5.2关系模式的分解关系模式的规范化过程是通过对关系模式的分解来实现的,但是把低一级的关系模式分解为若干个高一级的关系模式的方法并不是惟一的。在这些分解方法中,只有能够保证分解后的关系模式与原关系模式等价的方法才有意义。SNO→SNSNO→AGESNO→DEPTDEPT→MNSNO→MNSD(SNO,SN,AGE,DEPT,MN)关系模式有下列函数依赖:t第一种分解方法:将SD分解为2个关系模式:S(SNO,SN,AGE,DEPT)D(DEPT,MN)对于分解后的关系模式s,有函数依赖SNO-DEPT;对于D,有函数依赖DEPT-MN.这种分解方法保持了原来的SD中的两个完全函数依赖,SNO-DEPT,DEPT-MN,使分解即有无损连接性,又具有函数依赖保持性。第二种分解方法是将SD分解为两个关系模式:S1(SNO,SN,AGE,DEPT)D1(SNO,MN)分解后的关系为:S1D1S1,D1均为2NF,且SD=S1D1,则SD等于s1和d1在sno上的自然连接。所以这种分解具有无损连接,保证不丢失原关系中的信息。这分解结果仍然存在数据冗余、插入异常、删除异常和更新异常的问题。问题:1)DEPT→MN没有投影到关系模式s1上,也没有投影到关系模式D1上。2)D1关系中隐含了传递函数依赖SNO-MNt第三种分解方法是将SD关系分解为两个关系模式:s2(SNO,SN,AGE,MN),D2(DEPT,MN)两个关系均为3NF,公共属性为MN,但MN-SNO,MN-DEPT,所以S2D2=SD,不满足无损连接,容易丢失数据判断关系模式的一个分解是否与原关系模式等价可以有三种不同的标准:(1)分解具有无损连接性。(2)分解要保持函数依赖。(3)分解既要保持函数依赖,又要具有无损连接。