概念结构设计阶段得到的E-R模型是用户的模型,它独立于任何一种数据模型和任何一个具体的DBMS。为了创建用户要求的数据库,需要把上述概念模型转换为某个具体的DBMS支持的数据模型。数据库逻辑设计的过程是将概念结构转换成特定DBMS支持的数据模型的过程。从此开始便进入了“实现设计”阶段,需要考虑到具体DBMS的性能、具体的数据模型特点。E-R图表示的概念模型可以转换成任何一种具体的DBMS所支持的数据模型,如网状模型、层次模型和关系模型。
一般的逻辑设计分为以下3步:初始关系模式设计、关系模式规范化、模式的评价与改进。
初始关系模式设计
概念设计中得到的E-R图是由实体、属性和联系组成的,而关系数据库逻辑设计的结果是一组关系模式的集合。因此将E-R图转换为关系模型实际上就是将实体、属性和联系转换成关系模式。在转换中要遵循以下规则:
实体类型的转换
:将每个实体类型转换成一个关系模式,实体的属性即为关系的属性,实体的标识符即为关系模式的码。
联系类型的转换
:根据不同的联系类型做不同的处理。
-
若实体间联系是1:1,则可以在两个实体类型转换成的两个关系模式中任意一个关系模式中加入另一个关系模式的码和联系类型的属性。
-
若实体间的联系是1:n,则在n端实体类型转换成的关系模式中加入1端实体类型的码和联系类型的属性。
-
若实体间联系是m:n,则将联系类型也转换成关系模式,其属性为两端实体类型的码加上联系类型的属性,而码为两端实体码的组合。
-
3个或3个以上的实体间的一个多元联系,不管联系类型是何种方法,总是将多元联系类型转换成一个关系模式,其属性为与该联系相连的各实体的码及联系本身的属性,其码为各实体码的组合。
-
具有相同码的关系可合并。
关系模式的规范化
数据库逻辑设计的结果不是唯一的。为了进一步提高数据库应用系统的性能,还应该根据应用需要适当修改、调整数据模型的结构,这就是数据模型的优化。关系数据模型的优化通常以规范化理论为指导,将关系模式规范化,使之达到较高的范式是设计好关系模式的唯一途径,否则,设计的关系数据库会产生一系列的问题。
一个“好”的关系模式应当不会发生插入和删除异常,冗余度要尽可能少。对于存在问题的关系模式,可以通过模式分解的方法使之规范化。“分解”是解决冗余的主要方法,也是规范化的一条原则,“关系模式有冗余问题,就分解它”。
函数依赖基本概念
规范化
是指用形式更为简洁、结构更加规范的关系模式取代原有关系模式的过程。
关系模式必须满足一定的完整性约束条件以达到现实世界对数据的要求。完整性约束条件主要包括以下两个方面:
-
对属性取值范围的限定
-
属性值间的相互联系(主要体现在值的相等与否),这种联系称为
数据依赖
。
客观世界的事物间存在着错综复杂的联系,实体间的联系有两类:一类是实体与实体之间的联系;另一类是实体内部各属性间的联系。而属性间的联系可分为3类:
-
一对一联系
(1:1)。设X和Y是关系R的两个属性(集)。如果对于X中的任一具体值,Y中至多有一值与之对应;反之亦然,则称X、Y两属性间是一对一联系。 -
一对多联系
(1:n)。设X和Y是关系R的两个属性(集)。如果对于X中的任意具体值,Y中至多有一个值与之对应,而Y中的一个值却可以在X中的n个值(n≥0)相对应,则称Y对X是一对多联系。 -
多对多联系
(m:n)。设X和Y是关系R的两个属性(集)。如果对于X中的任意具体值,Y中有m个值(m≥0)与之对应,而Y中的一个值也可以和X中的n个值(n≥0)相对应,则称Y对X是多对多联系。
数据依赖
是指通过一个关系中属性间值的相等与否体现出来的数据间的相互关系,是现实世界属性间相互联系的抽象,是数据内在的性质。数据依赖共有3种:
-
函数依赖(Functional Dependency, FD)
-
多值依赖(Multivalued Dependency, MVD)
-
连接依赖(Join Dependency, JD)
其中最重要的是函数依赖和多值依赖。
在数据依赖中,函数依赖
是最基本、最重要的一种依赖,它是属性之间的一种联系,假设给定一个属性的值,就可以唯一确定(查找到)另一个属性的值。这种唯一性并非指只有一个记录,而是指任何记录。
设有关系模式R(U),X和Y均为U={A1, A2, …, An}的子集,r是R的任一具体关系,r中不可能存在两个元组在X上的属性值相等,而在Y上的属性值不等(也就是说,如果对于r中的任意两个元组t和s,只要有t[X]=s[X],就有t[Y]=s[Y]),则称X函数决定Y,或称Y函数依赖于X,记作X→Y,其中X叫作决定因素(Determinant),Y叫作依赖因素(Dependent)。
属性间联系决定函数依赖。
-
1:1联系。如果两属性集X、Y之间是1:1联系,则存在函数依赖X←→Y。
-
1:n联系。如果两属性集X、Y之间是n:1联系,则存在函数依赖X→Y。
-
m:n联系。如果两属性集X、Y之间是m:n联系,则不存在函数依赖。
识别函数依赖是理解数据语义的一个组成部分,依赖是关于现实世界的断言,它不能被证明,决定关系模式中函数依赖的唯一方法是仔细考察属性的含义。
范式
利用规范化理论,使关系模式的函数依赖集满足特定的要求,满足特定要求的关系模式称为范式
(Normal Form)。关系按其规范化程度从低到高可分为5级范式,分别称为1NF、2NF、3NF(BCNF)、4NF、5NF。规范化程度较高者必是较低者的子集。一个低一级范式的关系模式,通过模式分解可以转换成若干个高一级范式的关系模式的集合,这个过程称为规范化
。
第一范式(1NF)
如果关系模式R中不包含多值属性(每个属性必须是不可分的数据项),则R满足第一范式
(First Normal Form),记作R∈1NF 。1NF是规范化的最低要求,是关系模式要遵循的最基本的范式,不满足1NF的关系是非规范化的关系。关系模式如果仅仅满足1NF是不够的,只有对关系模式继续规范化,使之满足更高的范式,才能得到高性能的关系模式。
第二范式(2NF)
如果关系模式R(U, F)∈1NF,且R中的每个非主属性完全函数依赖于R的某个候选码,则R满足第二范式
(Second Normal Form),记作R∈2NF。不满足2NF的关系模式,会产生以下几个问题:插入异常、删除异常、更新异常。解决的办法是用投影分解把关系模式分解为多个关系模式。投影分解是把非主属性及决定因素分解出来构成新的关系,决定因素在原关系中保持,函数依赖关系相应分开转化(将关系模式中部分依赖的属性去掉,将部分依赖的属性单组组成一个新的模式)。
第三范式(3NF)
如果关系模式R(U, F)∈2NF,且每个非主属性都不传递函数依赖于任何候选码,则R满足第三范式
(Third Normal Form),记作R∈3NF。解决的办法同样是投影分解。3NF是一个可用的关系模式应满足的最低范式,也就是说,一个关系模式如果不满足3NF,则实际上它是不能使用的。
(最近更新:2019年09月03日)