目录
前言
在ER建模之完成后,需求就被描述成了ER图。之后就能根据ER图设计相应的关系表。
但是从ER图到具体的关系表的建立还需要经过2个步骤:1. 逻辑模型设计;2.物理模型设计。前者是将ER图映射为逻辑意义上的关系表,后者是映射为物理意义上的关闭表。逻辑意义上的关系表可以理解为单纯意义上的关系表,它不涉及到表中字段数据类型,索引信息,触发器等等细节信息。
本文将详细介绍前者。确切来说,也就是ER模型到逻辑关系表的映射是如何完成的。
基本概念
首先明确下逻辑模型中涉及到的一些概念。
1. 关系 relation
关系就是数据库中包含行和列的一张表。也叫做,关系表,或者表。但是关系表和表是有不同的。
2 关系表和表
关系表有以下几个约束条件:
a. 一列只能一个名称
b. 不能出现完全一样的行
c 表中每个值必须为单值
d 同一列中所有的值都必须属于同一个域
e 行或者列的顺序无关
3 列 column
就是字面上的列,也叫做属性,或者域。
4 行 row
也叫做一个记录,或者元祖(这个没听过)
5 主键 primary key
每个表(关系)中,必须要包含一个主键,用来唯一标识行中记录。
有的地方叫做主码。
6 外键 primary key
外键是某个关系表中的一列,这一列又恰恰是另一个关系表中的主键。用于外键和主键相关联。
有的地方叫做外码。
7 实体约束性 entity integrity constranit
即,主键不能为空。
8 参照完整性约束(reference integrity constraints)
即,外键要么为空,要么是相关关系表中主键的取值。
ER模型到关系表的映射
1 将常规实体映射为关系表
对于常规的实体,每个常规的属性,对应到关系表中就是一列。某个单值且唯一的列,则是主键,用下划线标记。
映射为关系表为:
2 将有复合属性的实体映射为关系表
这类映射中,复合属性的子属性映射到新的关系中,但是复合属性本身不会。
上面的CustFullName是复合属性,但是在关系表中,没有体现出来,只有作为子属性的CustFName,和CustLName。
映射为关系表为:
虽然关系表中的复合属性没有了,但是在ER图中各个阶段还是会用到。
3 将具有唯一复合属性的实体映射为关系表
这类映射中,会形成一个复合主码,即联合主键。联合主键就是复合属性的子属性们。
映射为:
4 将具有可选属性的实体映射为关系表
即,将可选属性对应的列标记一个(O)。
映射为关系表:
5 一对多 1:M 关系的映射
这里映射是将一对多,1:M联系中,M侧(即多的一侧)的实体所映射得到的关系中设置一个外键。这个外键对应的于1侧的实体映射得到的关系中的主键。
映射为:
感觉上面的ER图是有问题的,一个员工只能属于一个部门;一个部门有多个员工。这才是一对多。上面ER图的department实体处,不该有符号。
映射出的关系表是没问题的,外键在多的一侧。
6 多对多 (M:N) 联系映射
这类映射规则是,除了具有多对多联系的两个实体外,联系本身也需要映射关系。
联系对应的关系表中的两个外键,分别是两个实体中的主键。
映射关系为:
7 一对一 1:1 联系映射
这类映射和1:M的很相似。原则上外键设在任何一个实体的关系中都OK,但如果一对一联系中的基数约束是强制单个和可选单个这种类型,则最好将外键设置在可选多的一侧。因为这样可以保证关系中不会出现太多空值。
映射关系为:
8 将具有若干候选码的实体映射为关系
这类映射中,主键依然标记划线,而非主键唯一属性则标记(U)。