1、第第3章章 数据库设计数据库设计2第第3章章 数据库设计数据库设计ER数据模型数据模型3.1EER数据模型数据模型3.2逻辑数据库设计:映射逻辑数据库设计:映射ER/EER模式到关系模式模式到关系模式3.3关系模式求精与规范化关系模式求精与规范化3.43DB应用应用vDB应用定义:一个特定的数据库,加上实现此数据库查询应用定义:一个特定的数据库,加上实现此数据库查询/更新的相关程序。更新的相关程序。v概念设计是成功设计概念设计是成功设计DB应用的一个环节。应用的一个环节。实体-关系模型(Entity-Relation model),简称ER模型,是一种非常流行的概念数据模型。EER是基于ER的
2、扩展模型(Enhanced ER model)ER/EER已被广泛应用于DB概念设计。它们均以图形化方式描述和捕获用户需求。基于ER/EER进行概念设计的输出为一组ER/EER图。v基于概念模型的设计,最终都必须变换基于概念模型的设计,最终都必须变换/转换到可在转换到可在DB中实现的逻辑数据模型。中实现的逻辑数据模型。借助RDB设计有关规范理论,不仅可对转换后的逻辑数据模式进行规范,而且可对ER/EER图进行求精。4DB设计的主要阶段与过程设计的主要阶段与过程5DB设计的基本步骤(设计的基本步骤(1)1.需求分析需求分析2.概念概念DB设计设计利用需求分析获得的信息,建立DB数据的一个抽象描述
3、。这一步通常利用ER/EER模型,或其它高级数据概念模型(如UML类图),来实现。3.逻辑逻辑DB设计设计转换DB概念设计模式到指定DBMS逻辑模式。由于需求信息本身带有很大主观性,故基于需求信息构造的ER/EER图只能提供数据的一个近似描述。4.模式细化模式细化5.物理物理DB设计设计6.安全设计安全设计 6DB设计的基本步骤(设计的基本步骤(2)1.需求分析需求分析2.概念概念DB设计设计3.逻辑逻辑DB设计设计4.模式细化模式细化分析关系数据库模式的关系集,检查潜在问题并进行优化。与需求分析和概念设计的主观性特点不同,细化可得到强有力的规范理论支持。5.物理物理DB设计设计考虑应用必须支
4、持的一些典型预期负荷,并以此为基础进一步求精DB设计,确保它能满足预期的性能要求。这个步骤可能包括为一些表建立索引,或指定聚集存储方式等。6.安全设计安全设计 73.1 ER数据模型数据模型3.1.1 实体类型、实体集、属性和键 3.1.2 关系、关系类型和关系集3.1.3 ER模型的其他特性8ER模型简介模型简介1.构成构成ER模型的基本概念模型的基本概念 v实体与属性实体与属性v实体类型、实体集与键实体类型、实体集与键实体类型:实体类型:定义了具有相同属性的实体模式结构,由名和属性来描述。实体集:实体集:具有相同实体类型的所有实体集合。实体类型描述了相同结构实体集的模式或内涵;实体集则描述
5、了实体类型的外延。ER图中不区分实体类型和实体集(被视为同义词)。v关系、关系类型和关系集关系、关系类型和关系集vER模型的其它概念模型的其它概念 ER图表示规定图表示规定 实体集:用加矩形外框的名字来表示。实体集:用加矩形外框的名字来表示。属性名:则用椭圆框起,属性名:则用椭圆框起,并用直线与实体集相连。并用直线与实体集相连。多值属性:用双线椭圆框起多值属性:用双线椭圆框起;复合属性:用名字后加注结构成份表示复合属性:用名字后加注结构成份表示;键属性:通过属性名加下划线来标识。键属性:通过属性名加下划线来标识。ER图表示规定图表示规定 关系集:用名字外加菱形框表示,并用直线 将其与参与实体集
6、的矩形框相连。9ER图设计举例(图设计举例(1)10ER图设计举例图设计举例(2)11ER模型的其它概念模型的其它概念v关系属性关系属性关系集也可以有自己的描述属性,用来刻画关系集本身的性质,而不是某个参与实体集的性质。v关系约束关系约束指与关系集相关的约束,通过约束表达可限制参与关系各实体的可能组合。主要类型:基数词约束、键约束和参与约束。v弱实体集弱实体集指只能附属其它实体集而存在的实体集。12在在ER图中表达关系基数词和参与约束图中表达关系基数词和参与约束 13弱实体集的几种弱实体集的几种ER建模方法(图建模方法(图3.5)143.2 EER数据模型数据模型3.2.1 EER模型核心概念
7、的形式定义 3.2.2 子类、超类与类层次结构3.2.3 特化与泛化 3.2.4 利用union子类建模3.2.5 值集属性与复合结构属性的建模表示3.2.6 EER与UML类图比较3.2.7 EER作为知识表示模型 3.2.8 为大型企业/组织进行DB概念设计15EER核心概念(核心概念(1)v类类指实体的集合或实体集,这包括可对DB应用域实体分组的任何EER模式构造,如实体类(型)、子类、超类和类别。EER中,任何类都允许参与一个关系。v子类、超类子类、超类子类S是一个类,子类中的实体必然是其超类C中实体的一个子集,即有关系:SC 成立超类/子类关系也称为ISA关系,记做C/S。子类实体除
8、了可以从超类实体中继承所有的属性外,还可以有自己专有的属性和关系。16EER核心概念(核心概念(2)v特化特化特化ZS1,S2,Sn是具有相同超类G的一个子类集合,每个G/Si是一个超类/子类关系。G被称为泛化实体类型。用“特化”指代由特化过程所获得的-特化子集。特化的种类(约束)完全特化与部分特化;不相交特化与重叠特化。两类约束相互独立,可以组合出四种约束。v泛化泛化是特化的逆过程,允许我们忽略多个实体集之间的性质差异,找出它们的共同点抽象出超类。特化是概念上的求精,而泛化则是概念上的综合。特化是概念上的求精,而泛化则是概念上的综合。显然,由泛化获得超类方法,易得到完全特化的子集。显然,由泛
9、化获得超类方法,易得到完全特化的子集。17特化及其约束的特化及其约束的EER表示表示18EER核心概念(核心概念(3)v类别类别(category)类别有时也被称为union子类。类别T是一个类,它是n个判定超类D1,D2,Dn(n1)并集的一个子集。其形式表示为:T(D1 D2 Dn)vunion子类的约束子类的约束完全约束:子类包含了其所有超类并集中的所有成员;部分约束:子类只包含并集的一个子集。19UNION子类及其约束的子类及其约束的EER表示(图表示(图3.8)用粗用粗/细区分细区分完全和部分完全和部分约束约束20基本基本ER模型与模型与UML类图的特性对比类图的特性对比 21Com
10、pany DB模式的模式的EER表示表示22Company DB模式的模式的UML表示表示233.3 逻辑数据库设计逻辑数据库设计:映射映射ER/EER模式到关系模式模式到关系模式3.3.1 映射常规实体集到关系表 3.3.2 映射关系集到关系表3.3.3 映射弱实体集3.3.4 映射带有聚集关系的ER图 3.3.5 映射EER扩展结构3.3.6 ER模型至关系模型映射小结243.3 映射映射ER/EER模式到关系模式模式到关系模式 vER/EER模型适合于初始阶段、抽象层次较高的模型适合于初始阶段、抽象层次较高的DB概念设计。概念设计。v给定一个概念设计模式给定一个概念设计模式(ER/EER
11、图图),现已有一套标准方法可将它们映射到关系,现已有一套标准方法可将它们映射到关系DB模式,但这模式,但这种转换还只是近似的。种转换还只是近似的。DB模式:一组表+约束集基于SQL-92,我们尚无法捕获隐含在ER/EER设计中的所有约束。v本节我们将介绍从本节我们将介绍从ER/EER模式创建关系模式的方法和过程。模式创建关系模式的方法和过程。25映射常规实体集到关系表映射常规实体集到关系表 v一个常规实体集可直接地映射到一个关系表:一个常规实体集可直接地映射到一个关系表:将实体集的每个属性,作为关系表的一个属性。用SQL-92 DDL建表语句基本上可以完全捕获这些信息,包括域约束和主键约束。2
12、6映射关系集到关系表映射关系集到关系表(一)映射含键约束的关系集(一)映射含键约束的关系集方法方法1:独立关系表法:独立关系表法v映射关系集映射关系集R到独立的关系表到独立的关系表R。27映射关系集到关系表映射关系集到关系表(一)映射含键约束的关系集(一)映射含键约束的关系集方法方法1:独立关系表法:独立关系表法方法方法2:外键方法:外键方法将关系集的相关信息合并到具有键约束的参与实体集中(一对多关系的一端)。28映射关系集到关系表映射关系集到关系表(一)映射含键约束的关系集(一)映射含键约束的关系集方法方法1:独立关系表法:独立关系表法方法方法2:外键方法:外键方法方法方法3:合并关系法合并
13、关系法 若关系集的所有参与实体集都有键约束且都是完全参与。这时,也可合并所有参与实体集到一个关系。(二)在映射关系集时考虑参与约束(二)在映射关系集时考虑参与约束图3.9(a)中的Manages,除了键约束(每部门至多有一经理)外,还含有一完全参与约束(每部门至少需要有一经理)。考虑到这一点,Dept_Mgr:ssn应设置NOT NULL。(三)无键约束和参与约束的关系集映射(三)无键约束和参与约束的关系集映射对这类关系集,一般只能用独立关系表法(方法1)进行映射。29映射弱实体集映射弱实体集 v弱实体集总是参与一对多的二元关系,且有一个键约束和完全参与约束。弱实体集总是参与一对多的二元关系,
14、且有一个键约束和完全参与约束。v前面讨论的映射关系方法前面讨论的映射关系方法2(外键法)是一种较理想的转换方法。但要考虑弱实体中只含有部分键(外键法)是一种较理想的转换方法。但要考虑弱实体中只含有部分键这个情况。这个情况。30映射映射EER扩展结构多值扩展结构多值/复合结构属性复合结构属性 v关系模式不支持多值属性,必须为关系模式中的每个多值属性,分别创建一个独立的关系。关系模式不支持多值属性,必须为关系模式中的每个多值属性,分别创建一个独立的关系。令关系模式为R,MA是R的一个多值属性,为MA创建的关系表为M。M的属性应包含R的主键属性k,以便关联到R。原关系模式R中可去掉多值属性MA.v令
15、关系模式为令关系模式为R,CA是是R的一个复合属性。对于的一个复合属性。对于CA,有两种建模方法:,有两种建模方法:方法1:将复合属性的每个结构成份,分别作为一个属性,加到所属的关系表中。方法2:为复合属性CA单独建立一个关系表。31映射映射EER扩展结构类层次结构扩展结构类层次结构 v映射处理映射处理EER图中的图中的ISA层次结构。层次结构。假设超类假设超类C被特化为被特化为m个子类个子类S1,SmAttr(C)=k,a1,an,PK(C)=k。v方法方法1:映射超类和每个子类到一个不同的表。:映射超类和每个子类到一个不同的表。32映射映射EER扩展结构类层次结构扩展结构类层次结构 v方法
16、方法1:映射超类和每个子类到一个不同的表。:映射超类和每个子类到一个不同的表。v方法方法2:仅创建子类关系表。:仅创建子类关系表。为每个子类为每个子类Si(1im)创建一个关系创建一个关系Li,且有属性,且有属性Attr(Li)=k,a1,an Si的其它专有属的其它专有属性性,PK(Li)=k。该方法只适用于超类完全参与的特化类型。该方法只适用于超类完全参与的特化类型。v方法方法3:仅创建含:仅创建含1个类标志属性的单个关系。个类标志属性的单个关系。v方法方法4:仅创建含:仅创建含m个类标志属性的单个关系。个类标志属性的单个关系。该方法能适应子类有重叠特化的情况,但会产生大量的该方法能适应子
17、类有重叠特化的情况,但会产生大量的null值。值。33映射映射EER:union子类子类(1)1)对超类实体集有各自不同键的情况)对超类实体集有各自不同键的情况在创建与在创建与union子类对应的关系表时,通常需要指定一个新的键属性子类对应的关系表时,通常需要指定一个新的键属性-代理键代理键(surrogate key)。2)对超类实体集有)对超类实体集有有相同键的情况有相同键的情况这时,无需使用代理键。这时,无需使用代理键。34ER模型至关系模型映射小结模型至关系模型映射小结 v步骤步骤1:映射常规实体集。:映射常规实体集。v步骤步骤2:映射弱实体集。:映射弱实体集。v步骤步骤3:映射:映射
18、ER模式中的关系集。模式中的关系集。v步骤步骤4:映射:映射ER模式中的聚集关系集。模式中的聚集关系集。v步骤步骤5:映射与:映射与EER模型相关的扩展结构。模型相关的扩展结构。353.4 关系模型求精与规范化关系模型求精与规范化3.4.1 模式求精问题 3.4.2 函数依赖3.4.3 基本规范范式3.4.4 无损分解与依赖保持分解 3.4.5 分解与规范化关系模式3.4.6 多值依赖与第四规范363.4.1 模式求精问题(综述)模式求精问题(综述)v模式求精的基本任务是基于分解技术,来处理初始关系模式中存在的问题。信息的冗余存储是引模式求精的基本任务是基于分解技术,来处理初始关系模式中存在的
19、问题。信息的冗余存储是引发这些问题的根源。虽然分解能删除冗余,但它也可能导致一些额外的问题,如信息损失或导致发这些问题的根源。虽然分解能删除冗余,但它也可能导致一些额外的问题,如信息损失或导致某些强制性约束丢失,必须慎重使用。某些强制性约束丢失,必须慎重使用。(一)冗余可能引发问题(一)冗余可能引发问题v浪费空间。浪费空间。v更新异常。更新异常。同样的信息被存储多份,如某份数据被更新,而其它份信息未做相应更新,就会造成同样的信息被存储多份,如某份数据被更新,而其它份信息未做相应更新,就会造成DB数据数据的不一致。的不一致。v插入异常。插入异常。如果不附带冗余存储一些相关的信息,新的信息可能无法
20、存储到如果不附带冗余存储一些相关的信息,新的信息可能无法存储到DB中。中。v删除异常。删除异常。删除某信息时删除某信息时,可能会附带删掉一些不希望删除的信息。可能会附带删掉一些不希望删除的信息。37冗余可能引发问题举例冗余可能引发问题举例v考虑考虑Hourly_Emps (ssn,name,lot,rating,hourly_wages,ours_worked)缩写为Hourly_Emps(SNLRWH)假定小时工资主要取决于员工等级,即给定R值,就可唯一确定W值。这是一个典型的函数依赖约束关系,它会导致存储冗余,其副作用有多个方面:同等级员工对应的元组中,R/W信息完全相同。同样的信息被存储
21、多次,浪费存储空间。如果删除了给定R值的所有元组,将丢失这组R/W所隐含的IC约束信息,这是一种删除异常。无法单独记录员工等级与小时工资的R/W关系。这是一种插入异常。38(二)利用分解技术消除冗余(二)利用分解技术消除冗余v函数依赖约束函数依赖约束(FDs)或其它相近的或其它相近的ICs可被用来识别冗余点,并给出处理冗余的指导性建议。可被用来识别冗余点,并给出处理冗余的指导性建议。v分解技术的核心思想分解技术的核心思想通过将原关系替换(分解)为一组更小关系,来解决冗余问题。通过将原关系替换(分解)为一组更小关系,来解决冗余问题。例如,通过将例如,通过将Hourly_Emps分解为如下的两个小
22、关系,就可以很好消除原有冗余引起的相关分解为如下的两个小关系,就可以很好消除原有冗余引起的相关问题。问题。Hourly_Emps2(ssn,name,lot,rating,hours_worked)Wages(rating,hourly_wage)39(三)分解可能引发的相关问题(三)分解可能引发的相关问题v分解能很好解决冗余问题,但必须慎重使用,否则可能会带来其它问题。在使用分解时,须反复提分解能很好解决冗余问题,但必须慎重使用,否则可能会带来其它问题。在使用分解时,须反复提问以下两个重要问题:问以下两个重要问题:我们的确需要分解一个关系吗?我们的确需要分解一个关系吗?对该问题,已有若干规范
23、来帮助回答这个问题。一个给定的分解会引起那些其它问题?一个给定的分解会引起那些其它问题?对该问题,可借助分解的两个重要特性来帮助回答 用无损连接用无损连接(lossless-join);依赖保持依赖保持(dependency-preservasion)403.4.2 函数依赖函数依赖(functional dependency,FD)v函数依赖,是函数依赖,是DB中两组属性间存在的一种约束,是一类更广义的键概念约束。其形式定义如下:中两组属性间存在的一种约束,是一类更广义的键概念约束。其形式定义如下:令令R代表一个关系模式,代表一个关系模式,r是是R的一个任意合法实例。的一个任意合法实例。X和
24、和Y是是R的两个非空属性子集。的两个非空属性子集。如果对如果对 r中每个元组对中每个元组对t1和和t2有有t1.X=t2.X,则必有,则必有t1.Y=t2.Y。这时,我们就称。这时,我们就称Y函数依赖于函数依赖于X,记,记为:为:XY。v两类特殊的函数依赖两类特殊的函数依赖完全函数依赖与部分函数依赖完全函数依赖与部分函数依赖v通常,模式设计者会显式指定一组函数依赖。通常,模式设计者会显式指定一组函数依赖。常用常用F表示在关系表示在关系R上显式指定的一组上显式指定的一组FDs。41函数依赖推理(函数依赖推理(1)v在满足在满足F:FDs的所有合法关系实例中,通常还会隐含一些其它可从的所有合法关系
25、实例中,通常还会隐含一些其它可从F推理获得的函数依赖。推理获得的函数依赖。例如,对例如,对Workers(ssn,name,lot,did,since)显式FDs FD1:ssndid,FD2:didlot 保持保持隐含FDs 通过传递推理,不难发现:在Workers中,FD3:ssnlot也能保持的结论。v定义(隐含函数依赖定义(隐含函数依赖 f)给定给定FDs集集F,如果,如果FD:f 也能在满足也能在满足F的每个关系实例中保持,则称的每个关系实例中保持,则称FD:f 是隐含在是隐含在F中的函数中的函数依赖。依赖。v定义(函数依赖集闭包定义(函数依赖集闭包F+)将包括给定的将包括给定的FD
26、s集集F,加上,加上F所隐含的所有所隐含的所有f,合称为合称为F闭包,简记为闭包,简记为F+。42函数依赖推理函数依赖推理(2)v由给定由给定FDs集集F,推导或计算出,推导或计算出F+的规则的规则自反规则自反规则IR1:如:如 XY,则,则 X Y。增广规则增广规则IR2:如:如 XY,则,则 XZ YZ,Z是任意属性组。是任意属性组。传递规则传递规则IR3:如果:如果 XY,YZ,则,则 X Z。两增补规则:两增补规则:合并或加法规则合并或加法规则IR4:如果:如果 XY,XZ,则,则 X YZ。分解或投影规则分解或投影规则IR5:如果:如果 XYZ,则,则 X Y,XZ。v定义(平凡函数
27、依赖)定义(平凡函数依赖)如果如果X Y且且XY,则称,则称X Y是平凡的是平凡的(trivial)。显然,利用自反规则显然,利用自反规则IR1,我们不难由已知的,我们不难由已知的FDs推出所有的平凡依赖关系。推出所有的平凡依赖关系。43函数依赖推理(函数依赖推理(3)v定义(函数依赖集覆盖)定义(函数依赖集覆盖)对于函数依赖集对于函数依赖集F,如果另一个函数依赖集,如果另一个函数依赖集E中的每个函数依赖同时也在中的每个函数依赖同时也在F+中,则称中,则称F覆盖了覆盖了E。v定义(函数依赖集等价)定义(函数依赖集等价)对于两个函数依赖集对于两个函数依赖集E和和F,如果,如果E+=F+,则称,则
28、称E和和F是等价的。是等价的。v定义(函数依赖集最小覆盖)一个定义(函数依赖集最小覆盖)一个FDs集集F的最小覆盖是满足以下三个条件的一组的最小覆盖是满足以下三个条件的一组FDs集集G:G中的每个依赖关系都是规范的中的每个依赖关系都是规范的XA形式,这里,形式,这里,A是一个单属性;是一个单属性;闭包闭包F+等价于闭包等价于闭包G+。如果通过删除如果通过删除G中的一个或多个依赖关系,或删除中的一个或多个依赖关系,或删除G中依赖关系的属性,得到另一个依赖集中依赖关系的属性,得到另一个依赖集H,则必有则必有H+G+。44计算所有隐含计算所有隐含FDs的一个系统方法的一个系统方法45寻找函数依赖集寻
29、找函数依赖集F的一个最小覆盖的一个最小覆盖G463.4.3 基本规范范式(基本规范范式(1)v第一范式第一范式对于一个关系R,如果它的每个字段只包含不可分割的原子值(即没有复合值或值集字段),则R满足第一范式,记为R 1NF。1NF独立于键和函数依赖;关系模型能自然满足1NF约束。v第二范式第二范式 对于一个关系R,如果它的每个非键属性A都完全依赖于R的某个键,则R满足第二范式,记为R 2NF。473.4.3 基本规范范式(基本规范范式(2)vBoyce-Codd 范式范式 令R是一关系模式,X和A分别是R的属性子集。如果对R中保持的每个FD:XA,能至少满足以下两条件之一,就称R满足Boyc
30、e-Codd范式,简记为R BCNF。1)A X,即XA是一个平凡的FD;2)X是一个超键。可证明:判断R BCNF,只需检查F+中每个非平凡FD左边是否为超键。v直观分析直观分析“满足满足BCNF”的关系表的关系表BCNF能确保关系表在FD信息视角下无冗余。每个元组是“一个实体或一个关系”。每个字段都存储着无法从其它字段(利用FD)推导出的信息值。BCNF关系中的关系中的非平凡非平凡FD结构模式结构模式48基本规范范式(基本规范范式(3)v第三规范第三规范令R是一关系模式,X与A分别是R的属性子集。如果对R中保持的每个FD:XA,能至少满足以下三条件之一,就称R满足第三范式,简记为R 3NF
31、。A X,即XA是一个平凡的FD;X是一个超键;A是R的部分键。v3NF比比BCNF多了第三个条件,也允许多了第三个条件,也允许A是键的一部分。显然,每个是键的一部分。显然,每个BCNF关系肯定是关系肯定是3NF关系关系49依赖关系依赖关系XA违反违反3NF的两种主要情形的两种主要情形1)X是某键是某键K的一个属性子集。这时,依赖关系的一个属性子集。这时,依赖关系XA是部分依赖。这种情形下,存储是部分依赖。这种情形下,存储(X,A)对对是一种冗余情况是一种冗余情况,R 2NF。2)X不是任何键不是任何键K的完全属性子集。这时,存在依赖链的完全属性子集。这时,存在依赖链KXA,依赖关系依赖关系X
32、A是传递依赖。是传递依赖。503.4.4 无损分解与依赖保持分解无损分解与依赖保持分解1.无损分解无损分解v无损分解定义无损分解定义令R为一关系模式,F是R上的FDs集将R分解为两个属性组X和Y,如果对R的每个满足F的实例r,满足x(r)y(r)=r,就称该分解是无损连接的。v无损分解应用无损分解应用将R分解为属性组R1和R2是无损连接的,当且仅当R1R2 R1或R1R2 R2保持。举例:Hourly_Emps(SNLRWH);FD:RW 51一个不满足无损连接的分解示例(图一个不满足无损连接的分解示例(图3.14)523.4.4 无损分解与依赖保持分解无损分解与依赖保持分解2.依赖保持分解依
33、赖保持分解v定义(依赖集投影)定义(依赖集投影)令关系R被分解为两个属性组X和Y,F是R上保持的FDsF在X上的投影(FX):是F+中那些仅包含X中属性的FDs依赖UV在Fx中,当且仅当U和V中的所有属性都在X中。v定义(依赖保持分解)定义(依赖保持分解)带有FDs集F的关系模式R,分解为X和Y两个属性组是依赖保持的,当且仅当(FX FY)+=F+。v依赖保持为什么考虑依赖保持为什么考虑F闭包闭包F+而不是而不是F?533.4.5 分解与规范化关系模式分解与规范化关系模式1.分解关系到分解关系到BCNF543.4.5 分解与规范化关系模式分解与规范化关系模式2.分解关系到分解关系到3NF55分解到分解到BCNF与分解到与分解到3NF的实质差别的实质差别v对一个非对一个非BCNF的关系模式,通过无损连接分解,获得一组满足的关系模式,通过无损连接分解,获得一组满足BCNF的关系模式总是可能的。的关系模式总是可能的。但有可能不存在获得一组BCNF关系的任何依赖保持分解。而将一个非BCNF关系分解为一组3NF关系的无损连接且依赖保持分解,则通常总是存在的。?谢谢大家!