资源预览内容
第1页 / 共54页
第2页 / 共54页
第3页 / 共54页
第4页 / 共54页
第5页 / 共54页
第6页 / 共54页
第7页 / 共54页
第8页 / 共54页
第9页 / 共54页
第10页 / 共54页
亲,该文档总共54页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
第1页,第6章 关系模式的规范化设计,本章概述 本章的学习目标 主要内容,第2页,本章概述,前面4章介绍了如何建立数据模型的问题,并把所建立的数据模型转换成最流行的关系模式。在研究如何把所建立的数据库模型转变成关系模式时,存在一些数据冗余的问题,即客观世界中的一个事实在关系元组中重复出现。 这些问题影响了关系模式的设计和使用,因此需要采取合适的方法来消除这些设计过程中出现的问题。 本章将要讲述的关系模式的规范化设计能够解决这些问题。规范化设计就是在函数依赖理论基础上,通过对关系模式的进行不同层次的分解,使最终得到的关系模式符合用户的需要。,第3页,本章的学习目标,了解关系模式设计时的数据异常问题; 了解和掌握函数依赖的基本概念; 掌握计算属性闭包的基本方法; 掌握关系模式分解的基本原理; 了解关系模式范式的基本概念和类型; 掌握各种范式设计的基本技术和原则。,第4页,主要内容,6.1 概述 6.2 函数依赖 6.3 关系模式的分解 6.4 关系模式的范式 6.5 多值依赖 6.6 范式之间的关系 6.7 数据库模式的实例 6.8 本章小结,第5页,6.1 概述,为了理解关系模式的设计目标,首先需要理解关系模式中的异常问题。 本节首先研究异常问题的特点,然后介绍泛关系模式和数据库模式的概念。,第6页,异常问题,在深入研究关系模式的设计之前,首先了解什么样的关系模式合适,什么样的关系模式不合适。另外还需要理解造成关系模式不合适的原因是什么。 一般认为,如果某个关系实例中的数据存在异常现象,那么称该关系模式是不合适的。 在设计关系模式时,应该避免出现这种不合适的问题。 这些异常现象包括数据冗余、修改异常、插入异常和删除异常等。,第7页,存在异常的Book关系实例,第8页,泛关系模式和数据库模式,在关系模式设计过程中,应该采取一些方法消除这些数据异常现象,把最初的关系模式分解成最终的合适的关系模式。这种最初设计的关系模式也称为泛关系模式(universal relation scheme)。 关系模式的当前值称为关系实例,关系实例是特定元组的集合。 可以把泛关系模式分解成一系列小的符合规范化要求的关系模式集合,这种比较小的最终的关系模式的集合称为数据库模式(database scheme)。对数据库模式的每个关系模式赋予一个当前值,这时称为数据库实例。,第9页,主要内容,6.1 概述 6.2 函数依赖 6.3 关系模式的分解 6.4 关系模式的范式 6.5 多值依赖 6.6 范式之间的关系 6.7 数据库模式的实例 6.8 本章小结,第10页,6.2 函数依赖,数据依赖是数据之间存在的各种联系现象。 数据异常现象与数据依赖有着紧密的关联。 在数据依赖中,函数依赖是最基本的一种依赖形式。 认识和掌握函数依赖知识,对于数据库的约束设计和规范化设计有重要意义。,第11页,函数依赖的定义,函数依赖(Function Dependency,FD)的定义可以叙述为:如果关系R的两个元组在属性A1,A2,An上一致,那么它在另一个属性B上也一致。这种函数依赖记作A1A2AnB,读作属性A1,A2,An函数决定属性B,或属性B函数依赖于属性A1,A2,An。 函数依赖的逻辑定义:设关系模式R的属性集是U,X和Y是U的子集,函数依赖是形如XY的命题,即r是R的当前实例值,对r中的任意两个元组t和s,如果tX=sX,则tY=sY,那么XY在关系模式R中成立。其中,tX表示元组t在属性集X上的值。 函数依赖的定义表示了关系模式属性集X值和Y值之间的多对一联系。,第12页,超键码,首先研究超键码的概念。在某个关系中,如果一个或多个属性的集合A1,A2,An函数决定该关系的其他属性,那么称该属性的集合为该关系的超键码。超键码的含义是关系中不可能存在两个不同的元组在属性A1,A2,An的取值完全相同。 根据上面的定义可以看到,在一个关系中,超键码的数量是没有限制的,例如如果属性集合A1,A2,An是超键码,那么包含该属性集合的所有属性集合都是超键码。,第13页,关系Book中的部分超键码,第14页,键码,在前面的超键码定义中,范围太宽,使得超键码过多,使用起来很不方便。现在,在超键码定义的基础上,增加一些限制条件来定义键码。 在某个关系中,如果一个或多个属性的集合A1,A2,An函数决定该关系的其他属性,并且集合A1,A2,An的任何真子集都不能函数决定该关系的所有其他属性,那么称该属性的集合为该关系的键码。 键码的定义包括两方面的含义,即关系中不可能存在两个不同的元组在属性A1,A2,An的取值完全相同,且键码必须是最小的。,第15页,逻辑蕴含,在讨论函数依赖时,经常需要从一些已知的函数依赖去判断另外一些函数依赖是否成立。例如,如果AB和BC在某个关系中成立,那么AC在该关系中是否成立的问题称为逻辑蕴含问题。 假定F是在某个关系上成立的函数依赖集,T是在该关系上成立的另外一个函数依赖集。如果对于该关系中满足F的每一个关系实例都满足T,那么称函数依赖集F蕴含于函数依赖集T,记作F蕴含于T。 如果F蕴含于T,且T蕴含于F,那么函数依赖集F和T是等价的。,第16页,函数依赖的推理规则,为了判断函数依赖之间的蕴含关系,需要研究一些函数依赖的推理规则。根据已知的一些函数依赖集,推导出其他的函数依赖所依据的规则称为推理规则。 函数依赖有一个恒真的和完备的推理规则集。这些规则首先由Armstrong于1974年提出,后人对其提出的规则进行了完善。说其恒真,是因为这些规则不会推导出错误的函数依赖;说其完备,是因为给定一个函数依赖F,它可以产生所有函数依赖集都蕴含于的函数依赖集。 分解规则:可以把一个函数依赖A1A2AnB1B2Bm用一组函数依赖A1A2AnB1,A1A2AnB2,A1A2AnBm来代替。 合并规则:可以把一组函数依赖A1A2AnB1,A1A2AnB2,A1A2AnBm用一个函数依赖A1A2AnB1B2Bm来代替。,第17页,平凡依赖,对于函数依赖A1A2AnB来说,如果B是A中的一个,那么称之为平凡依赖。例如isbnisbn就是一个平凡依赖。平凡依赖的含义是:如果两个元组在属性A1,A2,An上完全一致,那么他们在其中的一个属性上也一致。所以每一个关系中的所有平凡依赖都保持恒真。 如果允许平凡依赖存在,那么就允许函数依赖右边的某些属性可以同时出现在左边。对于函数依赖A1A2AnB1B2Bm,如果B是A的子集,那么称该依赖是平凡依赖;如果B中至少有一个属性不在A中,那么称该依赖是非平凡依赖;如果B中的任何一个属性都不在A中,那么称该依赖是完全非平凡依赖。,第18页,属性集的闭包,在关系模式的设计中,经常需要判断某个给定的函数依赖是否蕴含于给定的函数依赖集。使用闭包就可以达到这一点。 假设A1,A2,An是属性集,S是函数依赖集。属性集A1,A2,An在函数依赖集S下的闭包是这样的属性集B,它使得满足依赖集S中所有依赖的每一个关系也都满足A1A2AnB。即A1A2AnB蕴含于S中的函数依赖。使用A1,A2,An+表示属性集A1,A2,An的闭包。 为了简化闭包的计算,允许闭包出现平凡依赖,即A1,A2,An总在A1,A2,An+中。,第19页,计算属性集闭包的流程图,第20页,正则覆盖,如果可以去掉一个函数依赖集中的属性而不改变函数依赖集的闭包,那么称该属性是无关的。无关属性可以形式化地定义如下,考虑函数依赖集S和S中的某个函数依赖XY。 如果AX,且S逻辑蕴含(SXY)(XA)Y,那么属性A在X中是无关的。 如果AY,且S逻辑蕴含(SXY)X (YA),那么属性A在Y中是无关的。 S的正则覆盖是一个函数依赖集SC,含义是F逻辑蕴含SC中的所有依赖,并且SC逻辑蕴含S中的所有依赖。此外,SC具有如下三个性质: (1) SC的闭包与S的闭包相同,即S+=SC+。 (2) SC中的任何函数依赖都不含无关属性。 (3) SC中的函数依赖的左半部都是唯一的,即SC中不存在两个函数依赖X1Y1和X2Y2,且X1=X2。,第21页,正则覆盖的计算步骤,第一步,把函数依赖集S中的形如X1Y1和X1Y2的函数依赖替换为X1Y1Y2。 第二步,找出在X或Y中含无关属性的函数依赖XY。 第三步,如果发现无关属性,把它从XY删除。 第四步,重复上面的步骤,直到S不再改变为止。,第22页,主要内容,6.1 概述 6.2 函数依赖 6.3 关系模式的分解 6.4 关系模式的范式 6.5 多值依赖 6.6 范式之间的关系 6.7 数据库模式的实例 6.8 本章小结,第23页,6.3 关系模式的分解,消除关系模式中数据异常的常用方法是分解关系模式。关系模式R的分解就是把关系R中的属性分开,以构成两个新的关系模式。 在分解关系模式时,一定要注意两个问题:第一,保证分解前后关系模式的信息不能丢失和增加,保持原有的信息不变,这称为无损连接;第二,保持分解前后原有的函数依赖依然成立。,第24页,分解条件,给定一个关系模式R,其属性集合为A1,A2,An,现在把其分解成两个关系模式X和Y,其属性集合分别是B1,B2,Bm和C1,C2,Ck,这种分解应该满足如下条件: 第一个条件,A1,A2,An=B1,B2,BmC1,C2,Ck。 第二个条件,关系X中的元组是关系R的所有元组在B1,B2,Bm上的投影,包含相同的元组。 第三个条件,关系Y中的元组是关系R的所有元组在C1,C2,Ck上的投影,不包含相同的元组。,第25页,主要内容,6.1 概述 6.2 函数依赖 6.3 关系模式的分解 6.4 关系模式的范式 6.5 多值依赖 6.6 范式之间的关系 6.7 数据库模式的实例 6.8 本章小结,第26页,6.4 关系模式的范式,前面讲过,在关系模式的分解中,函数依赖起着重要的作用。那么用什么标准来衡量模式是否分解和模式分解之后的好坏呢?这种标准就是关系模式的范式(normal form,NF)。 范式的种类与函数依赖有着直接的联系,在众多的范式类型中,最重要的范式是第三范式和BCNF范式。,第27页,第一范式,第一范式是最基本的范式。如果关系模式R中的所有属性值都是不可再分解的原子值,那么就称关系R是第一范式(first normal form,1NF)的关系模式。 不是1NF的关系称为非规范化的关系,满足1NF的关系称简为关系。在关系型数据库管理系统中,涉及到的研究对象都是满足1NF的规范化关系。 但关系中的属性是否都是原子的,取决于实际研究对象的重要程度。,第28页,BCNF范式,前面讲过,模式分解的目的在于使用几个不存在异常的关系代替原来存在异常现象的关系。可以使用BCNF范式(Boyce-Codd normal form)判断这种异常现象。该范式是Boyce在Codd提出的范式理论基础上研究得到的。 BCNF的定义是,如果某个关系R有非平凡依赖A1,A2,AnB,那么A1,A2,An必然是关系R的超键码。满足这样条件的关系就属于BCNF。即BCNF条件的含义是每一个非平凡依赖的左边必须包含超键码。,第29页,分解成BCNF模式的算法,模式分解的关键是使用合适的分解策略。一般地,分解成BCNF模式的算法如下所示: 第一步,找到一个违背BCNF的非平凡依赖,并在该依赖的右边加上尽量多的属性。 第二步,把原始关系模式分解成两个属性重迭的关系模式,一个模式包含了违背BCNF的所有属性,另一个模式包含了该依赖左边以及未包含在该依赖中的所有属性。 第三步,判断新关系模式是否满足BCNF。如果不满足,继续进行分解;如果满足,则停止。,第30页,函数依赖的投影,在
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号