【数据库技术】完整性约束与模式分解_第1页
【数据库技术】完整性约束与模式分解_第2页
【数据库技术】完整性约束与模式分解_第3页
【数据库技术】完整性约束与模式分解_第4页
【数据库技术】完整性约束与模式分解_第5页
已阅读5页,还剩68页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1,第5章 完整性约束与模式参考书目:数据库系统概论萨师煊 王珊,高等教育出版社,2,本章概要,本章讲述完整性约束和关系数据库规范化理论,这是数据库逻辑设计的理论依据。 深刻理解完整性约束的基本概念; 要求了解规范化理论的研究动机及其在数据库设计中的作用; 掌握函数依赖的有关概念; 理解第一范式、第二范式、第三范式的定义, 重点掌握并能够灵活运用关系模式规范化的方法和关系模式分解的方法,这也是本章的难点。,3,为了维护数据库中数据与现实世界的一致性,对关系数据库的插入、删除和修改操作必须有一定的约束条件,这就是关系模型的三类完整性: 实体完整性 参照完整性 用户定义的完整性 1. 实体完整性(

2、Entity Integrity) 实体完整性是指主码的值不能为空或部分为空。 例如,图5.4中学生关系中的主码“学号”不能为空;选课关系中的主码“学号+课程号”不能部分为空,即“学号”和“课程号”两个属性都不能为空。,5.1 关系模型的完整性,4,2. 参照完整性(Referential integrity) 如果关系R2的外部关系码X与关系R1的主码相符,则X的每个值或者等于R1中主码的某一个值,或者取空值。 如图5.1,5.2所示,学生关系中某个学生(如s1或s2)“系别”的取值,必须在参照的系别关系中主码“系别”的值中能够找到,否则表示把该学生分配到一个不存在的部门中,显然不符合语义。

3、 如果某个学生(如s11)“系别”取空值,则表示该学生尚未分配到任何一个系。否则,它只能取专业关系中某个元组的专业号值。,5,S(学生关系) D(系别关系),图5.1 S表(学生表),图5.2 D表(系别表),6,实体完整性和参照完整性是关系模型必须满足的完整性约束条件,被称作关系的两个不变性。任何关系数据库系统都应该支持这两类完整性。 除此之外,不同的关系数据库系统由于应用环境的不同,往往还需要一些特殊的约束条件,这就是用户定义完整性。 3. 用户定义完整性(User-defined Integrity) 用户定义完整性是针对某一具体关系数据库的约束条件。它反映某一具体应用所涉及的数据必须满

4、足的语义要求。 例如,属性值根据实际需要,要具备一些约束条件,如选课关系中成绩不能为负数;某些数据的输入格式要有一些限制,关系模型应该提供定义和检验这类完整性的机制,以便用统一的、系统的方法处理它们,而不要由应用程序承担这一功能。,7,5.2 规范化问题的提出,5.2.1 规范化理论的主要内容 关系数据库的规范化理论主要包括三个方面的内容: 函数依赖 范式(Normal Form) 模式设计 其中,函数信赖起着核心的作用,是模式分解和模式设计的基础,范式是模式分解的标准。,8,5.1.2 关系模式的存储异常问题 数据库的逻辑设计为什么要遵循一定的规范化理论? 什么是好的关系模式? 某些不好的关

5、系模式可能导致哪些问题? 下面通过例子进行分析: 例如:要求设计教学管理数据库,其关系模式SCD如下: SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE) 其中,SNO表示学生学号,SN表示学生姓名,AGE表示学生年龄,DEPT表示学生所在的系别,MN表示系主任姓名,CNO表示课程号,SCORE表示成绩。,9,根据实际情况,这些数据有如下语义规定: 一个系有若干个学生,但一个学生只属于一个系; 一个系只有一名系主任,但一个系主任可以同时兼几个系的系主任; 一个学生可以选修多门功课,每门课程可有若干学生选修; 每个学生学习某门课程有一个成绩。 在此关系模式中填入一部分具体的数据,

6、则可得到SCD关系模式的实例,即一个教学管理数据库,如图5.3所示。,10,图5.3 关系SCD,返回原处,11,根据上述的语义规定,可以看出:(SNO,CNO)属性的组合能唯一标识一个元组,所以(SNO,CNO)是该关系模式的主码。 对图5.3所示的进行数据库的操作时,会出现以下几方面的问题: 数据冗余。 每个系名和系主任的名字存储的次数等于该系的学生人数乘以每个学生选修的课程门数,同时学生的姓名、年龄也都要重复存储多次,数据的冗余度很大,浪费了存储空间。 插入异常。 如果某个新系没有招生,尚无学生时,则系名和系主任的信息无法插入到数据库中。 因为在这个关系模式中,(SNO,CNO)是主码。

7、根据关系的实体完整性约束,主码的值不能为空,而这时没有学生,SNO和CNO均无值,因此不能进行插入操作。 另外,当某个学生尚未选课,即CNO未知,实体完整性约束还规定,主码的值不能部分为空,同样不能进行插入操作。,12,删除异常。 某系学生全部毕业且还没有招生时,删除全部学生的记录则系名、系主任也随之删除,而这个系依然存在,在数据库中却无法找到该系的信息。 另外,如果学生s4不再选修C1课程,本应该只删去C1,但C1是主码的一部分,为保证实体完整性,必须将整个元组一起删掉,这样,有关该学生的其它信息也随之丢失。见图5.3所示。 更新异常。 如果学生改名,则该学生的所有记录都要逐一修改SN; 又

8、如某系更换系主任,则属于该系的学生记录都要修改MN的内容,稍有不慎,就有可能漏改某些记录,这就会造成数据的不一致性,破坏了数据的完整性。,13,产生上述问题的原因是因为关系中“包罗万象”,内容太杂。所以认为它不是一个好的数据库。那么,怎样才能得到一个好的关系模式呢? 我们把关系模式SCD分解为下面三个结构简单的关系模式,如图5.4所示: 学生关系S(SNO,SN,AGE,DEPT) 选课关系SC(SNO,CNO,SCORE) 系关系D(DEPT,MN),14,S SC,图5.4 分解后的关系模式,D,返回原处,15,在以上三个关系模式中,实现了信息的某种程度的分离, S中存储学生基本信息,与所

9、选课程及系主任无关;当某个学生尚未选课,只要在关系S中添加一条学生记录,避免了插入异常。 D中存储系的有关信息,与学生无关;当一个系的学生全部毕业时,只需在S中删除该系的全部学生记录,而关系D中有关该系的信息仍然保留,从而不会引起删除异常。 SC中存储学生选课的信息,而与所学生及系的有关信息无关。 由于数据冗余度的降低,数据没有重复存储,也不会引起更新异常。,16,与SCD相比,分解为三个关系模式后,数据的冗余度明显降低。从而得出结论,一个好的关系模式应该具备以下四个条件: 1. 尽可能少的数据冗余。 2. 没有插入异常。 3. 没有删除异常。 4. 没有更新异常。,17,但是一个好的关系模式

10、并不是在任何情况下都是最优的,因此要以实际设计的目标出发进行设计,因此,根据不同的要求将规范化分成若干级别。 我们要设计的关系模式中的各属性是相互依赖、相互制约的,这样才构成了一个结构严谨的整体。因此在设计关模式时,必须从语义上分析这些依赖关系。 在此我们先讨论属性间的依赖关系,然后再讨论关系规范化理论。,18,5.3 函数依赖,5.3.1函数依赖的定义 函数依赖(Functional Dependency)是关系模式中属性之间的一种逻辑依赖关系。下面给函数依赖的形式化定义: 定义5.1设R(U)是属性集U上的关系模式,令X和Y是U的子集。若对于R(U)的任意一个可能的关系r及r中的任意两个元

11、组t1和t2,总满足以下条件: 若t1X= t2X,则t1Y= t2Y 则称X函数决定Y,或Y函数依赖于X,记作XY。我们称X为决定因素,Y为依赖因素。 当Y不函数依赖于X时,记作:X Y。 当XY且YX时,则记作: X Y。,19,例1:教材P104图5.2 例2:对于关系模式SCD U=SNO,SN,AGE,DEPT,MN,CNO,SCORE U为属性集 F=SNOSN,SNOAGE,SNODEPT F为函数依赖集 一个SNO有多个SCORE的值与其对应,SNO SCORE。 但是SCORE可以被(SNO,CNO)唯一地确定。所以可表 示为:(SNO,CNO)SCORE。 重要结论:(教材

12、P105)函数依赖不可能从某个具体的关系实例中推导出来,只能在关系实例中得到验证。它是在数据库设计阶段产生,要求在关系模式上产生的所有关系都必须成立的一种限制性规则。 问题提出:在设计数据库时除了给定的函数依赖集以外,还需要考虑在关系模式上成立的其它所有的函数依赖。那么如何得到所有的函数依赖?,20,5.3.2 函数依赖集的闭包 1、逻辑蕴涵 如果给定函数依赖集F,可以证明其他某些函数依赖也成立,就称这些函数依赖被F逻辑蕴含。 2、闭包 令F为一个函数依赖集,F的闭包是指被F逻辑蕴含的所有函数依赖的集合,记为F+。 问题提出:如何在给定函数依赖集F的情况下方便地推导出它的闭包F+?,21,5.

13、3.3 函数依赖的公理系统 Armstrong公理 设有关系模式R(U),U是R的属性集,、都是U的子集,推理规则如下: 自反律:若 ,则; 例如,在关系SCD中,(SNO,CNO)SNO和(SNO,CNO)CNO。 增补律:若,则 传递律:若及,则 例如,在关系SCD中,SNODEPT和DEPTMN,则有SNOMN。 Armstrong公理是正确的完备的。,22,推论 合并律:若及,则 例如,在关系SCD中,SNO(SN,AGE),SNO(DEPT,MN),则有SNO(SN,AGE,DEPT,MN)。 分解律:若 ,则及 伪传递律:若及,则 ,23,5.3.4 有关函数依赖的几点说明 1平凡

14、的函数依赖与非平凡的函数依赖。 当属性集Y是属性集X的子集时,则必然存在着函数依赖XY,这种类型的函数依赖称为平凡的函数依赖。 如果Y不是X的子集,则称XY为非平凡的函数依赖。若不特别声明,我们讨论的都是非平凡的函数依赖。 2函数依赖是语义范畴的概念。 我们只能根据语义来确定一个函数依赖,它反映了一种语义完整性约束。 例如下列依赖的成立是有一定语义约束的(?)。 SNAGE SNDEPT,24,3函数依赖与属性之间的联系类型有关。 在一个关系模式中,如果属性X与Y有1:1联系时,则存在函数依赖XY,YX,即X Y 例如,当学生无重名时,SNO SN。 如果属性X与Y有m : 1的联系时,则只存

15、在函数依赖XY。 例如,SNO与AGE,DEPT之间均为m : 1联系,所以有SNOAGE,SNODEPT。 如果属性X与Y有m: n的联系时,则X与Y之间不存在任何函数依赖关系。 例如,一个学生可以选修多门课程,一门课程又可以为多个学生选修,所以SNO与CNO之间不存在函数依赖关系。,25,4函数依赖关系的存在与时间无关。 因为函数依赖是指关系中的所有元组应该满足的约束条件,而不是指关系中某个或某些元组所满足的约束条件。 因此,必须根据语义来确定属性之间的函数依赖,而不能单凭某一时刻关系中的实际数据值来判断。 例如,对于关系模式S,假设没有给出无重名的学生这种语义规定,则即使当前关系中没有重

16、名的记录,也只能存在函数依赖SNOSN,而不能存在函数依赖SNSNO,因为如果新增加一个重名的学生,函数依赖SNSNO必然不成立。,26,5函数依赖可以保证关系分解的无损连接性()。 设R(X,Y,Z),X,Y,Z为不相交的属性集合,如果XY或XZ,则有R(X,Y,Z)=RX,Y*RX,Z,其中,RX,Y表示关系R在属性(X,Y)上的投影,即R等于其投影在X上的自然连接,这样便保证了关系R分解后不会丢失原有的信息,称作关系分解的无损连接性。 例如,对于关系模式SCD,有SNO(SN,AGE,DEPT,MN),SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE)=SCDSNO,SN

17、,AGE,DEPT,MN*SCDSNO,CNO,SCORE,也就是说,用其投影在SNO上的自然连接可复原关系模式SCD。,27,5.3.5 完全函数依赖与部分函数依赖 定义5.2 设关系模式R(U),U是属性全集,X和Y是U的子集,如果XY,并且对于X的任何一个真子集X,都有X Y,则称Y对X完全函数依赖,记作X Y。否则称为部分函数依赖,记为X Y。 例如,在关系模式SCD中,因为SNO SCORE,且CNO SCORE,所以有:(SNO,CNO) SCORE ,而SNOAGE,所以(SNO,CNO) AGE。 由定义5.2可知,只有当决定因素是组合属性时,讨论部分函数依赖才有意义,当决定因

18、素是单属性时,只能是完全函数依赖。,28,5.3.6 传递函数依赖 定义5.3 设有关系模式R(U),U是属性全集,X,Y, Z是U的子集, 若XY,但Y X,而YZ(Y X,Z Y),则称Z对X传递函数依赖(Transitive Functional Dependency),记作:X Z。 如果YX,则X Y,这时称Z对X直接函数依赖,而不是传递函数依赖。 例如,在关系模式SCD中,SNODEPT,但DEPT SNO,而DEPTMN,则有SNO MN。当学生不存在重名的情况下,有SNOSN,SNSNO,SNO SN,SNDEPT,这时DEPT对SNO是直接函数依赖,而不是传递函数依赖。,29

19、,综上所述,函数依赖分为: 完全函数依赖 部分函数依赖 传递函数依赖,30,5.4 范式,规范化的基本思想是消除关系模式中的数据冗余,消除数据依赖中的不合适的部分,解决数据插入、删除时发生异常现象。 为不同程度的规范化要求而设立的不同标准称为范式(Normal Form)。由于规范化的程度不同,就产生了不同的范式。 至此在关系数据库规范中建立了一个范式系列:1NF,2NF,3NF,BCNF,4NF,5NF,一级比一级有更严格的要求。各个范式之间的联系可以表示为: 5NF 4NF BCNF 3NF 2NF 1NF,如图5.5所示。,31,图5.5 各种范式之间的关系,32,5.4.1 第一范式(

20、First Normal Form) 定义5.4 如果关系模式R,每个属性都是不可再分的原子属性,则称R属于第一范式,简称1NF,记作R1NF。 在关系数据库系统中只讨论规范化的关系,凡是非规范化的关系模式必须化成规范化的关系。 每个规范化的关系都属于1NF,这也是它之所以称为“第一”的原因。,33,然而,一个关系模式仅仅属于第一范式是不适用的。例如在5.1节中给出的关系模式SCD属于第一范式,但其具有大量的数据冗余,具有插入异常、删除异常、更新异常等弊端。为什么会存在这种问题呢? 分析一下SCD中的函数依赖关系,它的主码是(SNO,CNO)的属性组合,所以有: (SNO,CNO) SCORE

21、 SNOSN,(SNO,CNO) SN SNOAGE,(SNO,CNO) AGE SNODEPT,(SNO,CNO) DEPT SNO MN,(SNO,CNO) MN,34,我们可以用函数依赖图表示以上函数依赖关系,如图5.6所示。,由此可见,在SCD中,既存在完全函数依赖,又存在部分函数依赖和传递函数依赖,如此复杂的函数依赖,导致了数据操作中出现的种种弊端。因此必须用投影运算将关系分解,去掉过于复杂的函数依赖关系,向更高一级的范式进行转换。,35,5.4.2 第二范式 5.4.2.1 第二范式的定义 定义5.5 如果关系模式R1NF,且每个非主属性都完全函数依赖于R的每个关系码,则称R属于第

22、二范式,简称2NF,记作R2NF。 在关系模式SCD中,SNO,CNO为主属性,AGE,DEPT,MN,MN,SCORE均为非主属性,经上述分析,存在非主属性对关系码的部分函数依赖,所以SCD 2NF。 而如图5.4所示的由SCD分解的三个关系模式S,D,SC,其中S的关系码为SNO,D的关系码为DEPT,都是单属性,不可能存在部分函数依赖。 而对于SC,(SNO,CNO) SCORE。所以SCD分解后,消除了非主属性对关系码的部分函数依赖,S,D,SC均属于2NF。,36,经以上分析,可以得到两个结论: 从1NF关系中消除非主属性对关系码的部分函数依赖,则可得到2NF关系。 如果R的关系码为

23、单属性,或R的全体属性均为主属性,则R2NF。,37,5.4.2.2 2NF规范化 2NF规范化是指把1NF关系模式通过投影分解转换成2NF关系模式的集合。分解时遵循的基本原则就是“一事一地”,让一个关系只描述一个实体或者实体间的联系。如果多于一个实体或联系,则进行投影分解。 下面以关系模式SCD为例,来说明2NF规范化的过程 例5.1 将SCD(SNO,SN,AGE,DEPT,MN,CNO,SCORE)规范到2NF。 由SNOSN,SNOAGE,SNODEPT,(SNO,CNO) SCORE,可以判断,关系SCD至少描述了两个实体, 一个为学生实体,属性有SNO、SN、AGE、DEPT、MN

24、; 另一个是学生与课程的联系(选课),属性有SNO、CNO和SCORE。 根据分解的原则,我们可以将SCD分解成如下两个关系,如图5.7所示。,38,SD(SNO,SN,AGE,DEPT,MN),描述学生实体; SC(SNO,CNO,SCORE),描述学生与课程的联系。 SD,SC,图5.7 关系SD和SC,返回P64,39,SD2NF,SC2NF,而且前面已经讨论,SCD的这种分解没有丢失任何信息,具有无损连接性。 分解后,SD和SC的函数依赖分别如图5.8和5.9所示。,图5.8 SD中的函数依赖关系 图5.9 SC中的函数依赖关系,返回P64,40,下面对2NF规范化作形式化的描述: 设

25、关系模式R(X,Y,Z),R1NF,但R 2NF,其中,X是主码属性,Y,Z是非码属性,且存在部分函数依赖,X Y。设X可表示为X1X2,其中X1 Y。则R(X,Y,Z)可以分解为RX1,Y和RX,Z。 因为X1Y,所以R(X,Y,Z)=RX1,Y*RX1,X2,Z=RX1,Y*RX,Z,即R等于其投影RX1,Y和X,Z在X1上的自然连接,R的分解具有无损连接性。 由于X1 Y,因此RX1,Y2NF。若RX,Z 2NF,可以按照上述方法继续进行投影分解,直到将RX,Z分解为属于2NF关系的集合,且这种分解必定是有限的。,41,5.4.2.3 2NF的缺点 2NF的关系模式解决了1NF中存在的一

26、些问题,但2NF的关系模式在进行数据操作时,仍然存在着一些问题: 数据冗余。每个系名和系主任的名字存储的次数等于该系的学生人数。 插入异常。当一个新系没有招生时,有关该系的信息无法插入。 删除异常。某系学生全部毕业而没有招生时,删除全部学生的记录也随之删除了该系的有关信息。 更新异常。更换系主任时,仍需改动较多的学生记录。,42,分析SD中的函数依赖关系: SNOSN,SNOAGE,SNODEPT,DEPTMN, SNO MN,非主属性MN对主码SNO传递依赖。 存在上述问题,就是由于在SCD中存在着非主属性对主码的传递依赖。 为此,对关系模式SD还需进一步简化,消除这种传递依赖,得到3NF。

27、,43,5.4.3 第三范式 5.4.3.1 第三范式的定义 定义5.6 如果关系模式R2NF,且每个非主属性都不传递依赖于R的每个关系码,则称R属于第三范式,简称3NF,记作R3NF。 5.4.3.2 3NF规范化 3NF规范化是指把2NF关系模式通过投影分解转换成3NF关系模式的集合。 和2NF的规范化时遵循的原则相同,即“一事一地”,让一个关系只描述一个实体或者实体间的联系。,44,下面以2NF关系模式SD为例,来说明3NF规范化的过程。 例5.2将SD(SNO,SN,AGE,DEPT,MN)规范到3NF。 分析SD的属性组成,可以判断,关系SD实际上描述了两个实体: 一个为学生实体,属

28、性有SNO,SN,AGE,DEPT; 另一个是系的实体,其属性DEPT和MN。 根据分解的原则,我们可以将SD分解成如下两个关系,如图5.10所示。 S(SNO,SN,AGE,DEPT),描述学生实体; D(DEPT,MN),描述系的实体。,45,S D,对于分解后的两个关系S和D,主码分别为SNO和DEPT,不存在非主属性对主码的传递函数依赖。因此,S3NF,D3NF。,图5.10 关系S和D,46,分解后,S和D的函数依赖分别如图5.10和5.11所示。,由以上两图可以看出,关系模式SD由2NF分解为3NF后,函数依赖关系变得更加简单,既没有非主属性对码的部分依赖,也没有非主属性对码的传递

29、依赖,解决了2NF中存在的四个问题:,47,数据冗余降低。系主任的名字存储的次数与该系的学生人数无关,只在关系D中存储一次。 不存在插入异常。当一个新系没有学生时,该系的信息可以直接插入到关系D中,而与学生关系S无关。 不存在删除异常。要删除某系的全部学生而仍然保留该系的有关信息时,可以只删除学生关系S中的相关学生记录,而不影响系关系D中的数据。 不存在更新异常。更换系主任时,只需修改关系D中一个相应元组的MN属性值,从而不会出现数据的不一致现象。,48,3NF的不足: 3NF只限制了非主属性对码的依赖关系,而没有限制主属性对码的依赖关系。如果发生了这种依赖,仍有可能存在数据冗余、插入异常、删

30、除异常和修改异常。这时,则需对3NF进一步规范化,消除主属性对码的依赖关系 Boyce与Codd共同提出了一个新范式的定义,这就是Boyce-Codd范式,通常简称BCNF或BC范式。它弥补了3NF的不足。,49,5.3.4 BC范式 5.3.4.1 BC范式的定义 定义5.7 如果关系模式R1NF,且所有的函数依赖XY(Y X),决定因素X都包含了R的一个候选码,则称R属于BC范式(Boyce-Codd Normal Form),记作RBCNF。 5.3.4.2 BCNF规范化 BCNF规范化是指把3NF关系模式通过投影分解转换成BCNF关系模式的集合。 下面以3NF关系模式SNC为例,来说

31、明BCNF规范化的过程。,50,例5.3将SNC(SNO,SN,CNO,SCORE)规范到BCNF。 分析SNC数据冗余的原因,是因为在这一个关系中存在两个实体,一个为学生实体,属性有SNO、SN;另一个是选课实体,属性有SNO、CNO和SCORE。 根据分解的原则,我们可以将SNC分解成如下两个关系: S1(SNO,SN),描述学生实体; S2(SNO,CNO,SCORE),描述学生与课程的联系。 对于S1,有两个候选码SNO和SN, 对于S2,主码为(SNO,CNO)。 在这两个关系中,无论主属性还是非主属性都不存在对码的部分依赖和传递依赖,S1BCNF,S2BCNF。,51,分解后,S1

32、和S2的函数依赖分别如图5.12和5.13所示。,图5.12 S1中的函数依赖关系 图5.13 S2中的函数依赖关系,关系SNC转换成BCNF后,数据冗余度明显降低。 学生的姓名只在关系S1中存储一次,学生要改名时,只需改动一条学生记录中的相应的SN值,从而不会发生修改异常。,52,例5.4 设关系模式TCS(T,C,S),T表示教师,C表示课程,S表示学生。语义假设是,每一位教师只讲授一门课程;每门课程由多个教师讲授;某一学生选定某门课程,就对应于一确定的教师。 根据语义假设,TCS的函数依赖是: (S,C)T,(S,T)C,TC。 函数依赖图如图5.14所示。,5.14 TCS中的函数依赖

33、关系,53,对于TCS,(S,C)和(S,T)都是候选码,两个候选码相交,有公共的属性S。TCS中不存在非主属性,也就不可能存在非主属性对码的部分依赖或传递依赖,所以TCS3NF。 但从TCS的一个关系实例(如图5.15)分析,仍存在一些问题。,图5.15 关系TCS,54,数据冗余。虽然每个教师只开一门课,但每个选修该教师的该门课程的学生元组都要记录这一信息。 插入异常。当某门课程本学期不开,自然就没有学生选修。没有学生选修,因为主属性不能为空,教师上该门课程的信息就无法插入。同样原因,学生刚入校,尚未选课,有关信息也不能输入。 删除异常。如果选修某门课程的学生全部毕业,删除学生记录的同时,

34、随之也删除了教师开设该门课程的信息。 更新异常。当某个教师开设的某门课程改名后,所有选修该教师该门课程的学生元组都要进行修改,如果漏改某个数据,则破坏了数据的完整性。,55,分析出现上述问题的原因在于主属性部分依赖于码,(S,T) C,因此关系模式还继续分解,转换成更高一级的范式BCNF,以消除数据库操作中的异常现象。 将TCS分解为两个关系模式ST(S,T)和TC(T,C),消除函数依赖(S,T) C。其中ST的码为S,TC的码为T。STBCNF,TCBCNF。这两个关系模式的函数依赖图分别如图5.16和5.17所示。,图5.16 ST中的函数依赖关系 图5.17 TC中的函数依赖关系,56

35、,关系模式TCS由规范到BCNF后,使原来存在的四个异常问题得到解决: 数据冗余降低。每个教师开设课程的信息只在TC关系中存储一次。 不存在插入异常。对于所开课程尚未有学生选修的教师信息可以直接存储在关系TC中,而对于尚未选修课程的学生可以存储在关系ST中。 不存在删除异常。如果选修某门课程的学生全部毕业,可以只删除关系ST中的相关学生记录,而不影响系关系TC中相应教师开设该门课程的信息。 不存在更新异常。当某个教师开设的某门课程改名后,只需修改关系TC中的一个相应元组即可,不会破坏数据的完整性。,57,如果一个关系数据库中所有关系模式都属于3NF,则已在很大程度上消除了插入异常和删除异常,但

36、由于可能存在主属性对候选码的部分依赖和传递依赖,因此关系模式的分离仍不够彻底。 如果一个关系数据库中所有关系模式都属于BCNF,那么在函数依赖的范畴内,已经实现了模式的彻底分解,消除了产生插入异常和删除异常的根源,而且数据冗余也减少到极小程度。,58,5.5 关系模式的规范化模式分解,5.5.1 问题的提出 例:教材P108,有关系模式: Course_teacher_schema(course_name,course_location,course_capacity,teacher_number,teacher_name,teacher_age,department_name) 被分解成如下

37、两个模式: Course_deparetment_schema(course_name,course_location,course_capacity, department_name) Teacher_department_schema(teacher_number,teacher_name,teacher_age,department_name) 分解之后进行查询时将出现意外情况,称这样的分解为有损分解。,59,5.5.2 无损连接分解 设R为关系模式,关系模式集R1,R2 , Rn为R的一个分解,即:R=R1R2 Rn。令r是模式R上的关系,即r(R),而ri= Ri(r),于总有: r

38、 r1 r2 rn 令C为数据库上的约束集合。如果对于模式R上满足的所有合法关系r,均有: r= R1(r) R2(r) Rn(r) 那么,R1,R2 , Rn就是关于R的无损连接分解。,60,5.5.3 规范化(Normalization) 一个低一级范式的关系模式,通过模式分解转化为若干个高一级范式的关系模式的集合,这种分解过程叫作关系模式的规范化。 5.5.3.1 关系模式规范化的目标 是一个无损连接分解; 保持所有的函数依赖; 分解后的模式最好是BCNF或是3NF,61,5.5.3 .2 无损连接分解的充要条件 定理:设R的一个分解 =R1, R1具有无损连接分解的条件是:U1U2 U

39、1U2F+或U1U2 U2U1F+。,62,5.5.3.3 关系模式规范化的步骤 规范化就是对原关系进行投影,消除决定属性不是候选码的任何函数依赖。具体可以分为以下几步: 对1NF关系进行投影,消除原关系中非主属性对码的部分函数依赖,将1NF关系转换成若干个2NF关系。 对2NF关系进行投影,消除原关系中非主属性对码的传递函数依赖,将2NF关系转换成若干个3NF关系。 对3NF关系进行投影,消除原关系中主属性对码的部分函数依赖和传递函数依赖,也就是说使决定因素都包含一个候选码。得到一组BCNF关系。,63,关系规范化的基本步骤如图5.18所示。,图5.18 规范化过程,一个不好的关系模式分解转

40、换成好的关系模式的集合时要全面衡量,综合考虑,视实际情况而定。 对于那些只要求查询而不要求插入、删除等操作的系统,几种异常现象的存在并不影响数据库的操作。这时便不宜过度分解,否则当要对整体查询时,需要更多的多表连接操作,这有可能得不偿失。 在实际应用中,最有价值的是3NF和BCNF,在进行关系模式的设计时,通常分解到3NF就足够了。,64,5.5.3.4 模式分解实例 实例 对于讲义P38图5.7表SD中的关系模式SD(SNO,SN,AGE,DEPT,MN), 其函数依赖见P39图5.8。 要求规范到3NF,可以有以下三种不同的分解方法: 方法一: S(SNO,SN,AGE,DEPT) D(D

41、EPT,MN) SD(SNO,SN,AGE,DEPT,MN)=SSNO,SN,AGE,DEPT*DDEPT,MN,也就是说,用其两个投影在DEPT上的自然连接可复原关系模式SD。也就是说这种分解具有无损连接性。 对于分解后的关系模式S,有函数依赖SNODEPT,对于D,有函数依赖DEPTMN,这种分解方法保持了原来的SD中的两个完全函数依赖SNODEPT,DEPTMN。分解既具有无损连接性,又具有函数依赖保持性。 这是一种正确的分解方法。,65,第二种: S1(SNO,SN,AGE,DEPT) D1(SNO,MN) 分解后的关系如图5.18所示。 S1 D1,图5.18 关系S1和D1,66,分解以后,两个关系的主码都为SNO,也不存在非主属性对主码的传递函数依,所以两个关系均属于3NF。 且SD=S1*D1,关系模式SD等于S1和D1在SNO上的自然连接,这种分解也具有无损连接性,保证不丢失原关系中的信息。但这种分解结果,仍然存在着一些问题: 1数据冗余。每个系名和系主任的名字存储的次数等于该系的学生人数。 2插入异常。当一个新系没有招生时,系主任的名字则无法插入。 3删除异常。某系学生全部毕业而没有招生时,要删除全部学生的记录

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论