1
数据库原理与应用技术
1.2.2.3 1.2.3 E-R模型
1.2.3 E-R模型

描述概念模型的方法有很多种,其中E-R模型是最为有名也是最为常用的数据模型。本节主要讨论它的相关概念及如何将E-R模型转换为关系模型。有关如何认识和分析现实世界,如何建立实体和实体之间的联系,如何实现概念模型的方法将在第4章介绍。

1. 基本概念

概念模型有很多种,其中最为流行的一种是由美籍华人陈平山(P. S. Chen)于1976年提出的实体-联系模型(Entity-Relationship Model,E-R模型)。用于表示E-R模型的图称为实体-联系图,简称E-R图,它主要用于描述概念世界。

E-R图提供了表示实体型、属性和联系的方法。

1) E-R图的三个要素

(1) 实体:用矩形表示实体,矩形内标注实体名称。

(2) 属性:用椭圆形表示属性,椭圆形内标注属性名称,并用连线与实体连接起来。

(3) 实体之间的联系:用菱形表示实体间的联系,菱形内注明联系名称,并用连线将菱形分别与相关实体相连,同时在连线上注明联系类型(1∶1、1∶n或m∶n)。

画E-R图时,在实体与属性的连线上画线段,用此表示该属性是关键属性。学生的E-R图如图1-9所示。

注意:若一个联系具有属性,则这个属性也要用连线与该联系连接起来。如图1-10所示,销售量是销售的属性。在后续图中,如果不加特殊说明,都表示此含义。

图1-9 学生的E-R图

图1-10 联系的属性

2) 实体之间的联系

(1) 一对一联系:如果对实体集A中的每个实体,实体集B中至多有一个(可以没有)与之相对应,反之亦然,则称实体集A与实体集B具有一对一联系,记为1∶1。如班长和班级之间的联系就是一对一联系,如图1-11(a)所示。

(2) 一对多联系:如果对实体集A中的每个实体,实体集B中有n个实体(n≥0)与之相对应;反之,实体集B中的每个实体,实体集A中至多只有一个实体与之相对应,则称实体集A与实体集B具有一对多联系,记为1∶n。如班级和学生之间的联系就是一对多联系,如图1-11(b)所示。

(3) 多对多联系:如果对实体集A中的每个实体,实体集B中有n个实体(n≥0)与之相对应;反之,实体集B中的每个实体,实体集A中也有m个实体(m≥0)与之相对应,则称实体集A与实体集B具有多对多联系,记为m∶n。如学生和课程之间的联系就是多对多联系,如图1-11(c)所示。

图1-11 E-R图

2. E-R图的画法

把有联系的实体(矩形框)通过联系(菱形框)连接起来,注明联系方式,实体的属性(椭圆形框)连接到相应的实体上。例如,学生和学院之间的E-R图如图1-12所示。假设:学生的属性有学号、姓名、性别、出生日期和所在学院,学院的属性有学院号、学院名和院长。在实体与属性的连线上加线段的是关键属性。

图1-12 学院和学生的E-R图

由于E-R图直观易懂,在概念上表示了数据库的信息组织情况,所以,若能画出E-R图,结合具体DBMS的类型,则能把它演变为DBMS支持的数据模型,这种逐步推进的方法如今已经普遍应用于数据库设计中,成为数据库设计中的重要步骤。

3. E-R模型到关系模型的转化

E-R 模型对最初的高级数据库设计非常方便,但是没有哪个数据库产品直接支持该模型,它只是一款工具而已,是连接实际对象与数据库间的桥梁。E-R模型到关系模型的转化过程如图1-13所示。

图1-13 E-R模型到关系模型的转化

关于E-R模型到关系模型的转化,可以分别从以下四个方面来介绍。

1)独立实体到关系模型的转化

独立实体到关系模型的转化:将实体码转化为关系表的关键属性,其他属性转化为关系表的属性即可。

图1-14所示的独立实体转化为关系模型为学生(学号,姓名,性别,籍贯),其中有下画线的学号为关键属性,在图中用画有小线段的连线来表示。

图1-14 独立实体到关系模型的转化

2)1∶1联系到关系模型的转化

一个1∶1联系可以转换为一个独立的关系模型,此时与该联系相连的各实体的码及联系本身的属性均转换为该联系的关系模型的属性;1∶1联系还可以与任意一端对应的关系模型合并,此时只需在该关系模型的属性中加入另一个关系模型的码和联系本身的属性即可。

经理和公司间存在着1∶1联系,其E-R图如图1-15所示。将其转换为关系模型的方法有以下几种。

(1) 将联系转换成一个关系模型,转换后的关系模型为:

经理(经理号,姓名,年龄,电话,民族,住址);

公司(公司编号,名称,电话,类型,注册地);

管理(经理号公司编号,任期)。

(2) 将联系与“公司”关系模型合并,增加“经理号”和“任期”属性,转换后的关系模型为:

公司(公司编号,名称,电话,类型,注册地,经理号,任期);

经理(经理号,姓名,年龄,电话,民族,住址)。

(3) 将联系与“经理”关系模型合并,增加“公司编号”和“任期”属性,转换后的关系模型为:

公司(公司编号,名称,电话,类型,注册地);

经理(经理号,姓名,年龄,电话,民族,住址,公司编号,任期)。

图1-15 1∶1联系到关系模型的转化

3)1∶n联系到关系模型的转化

一个1∶n联系可以转换为一个独立的关系模型,此时与该联系相连的各实体的码及联系本身的属性均转换为该联系的关系模型的属性;1∶n联系还可以与n端对应的关系模型合并,此时只需在n端关系模型的属性中加入单方关系模型的码和联系本身的属性即可。

班级和学生间存在着1∶n联系,其E-R图如图1-16所示。将其转换为关系模型的方法有以下几种。

(1) 将联系转换成一个关系模型,转换后的关系模型为:

学生(学号,姓名,年龄,入学时间,民族,电话);

班级(班号,名称,年级,系,专业);

领导(学号班号)。

(2) 将联系与“学生”关系模型合并,增加“班号”属性,转换后的关系模型为:

学生(学号,姓名,年龄,入学时间,民族,电话,班号);

班级(班号,名称,年级,系,专业)。

由于第(2)种方法可以减少系统中的关系个数,一般情况下更倾向于采用这种方法。

4)两个实体m∶n联系到关系模型的转化

两个实体m∶n联系到关系模型的转化,原有的实体关系表不变,再单独建立一个关系表,分别用两个实体的关键属性作为外键即可,并且,如果联系有属性,也要归入这个关系中。m∶n联系转化为关系模型,如图1-17所示。

转换后的关系模型为:

学生(学号,姓名,年龄,电话);

课程(课程号,课程名,课时数);

学习(学号课程号,成绩)。

图1-16 1∶n联系到关系模型的转化

图1-17 m∶n联系到关系模型的转化

5)对于两个以上实体m∶n的多元联系到关系模型的转化

两个以上实体m∶n的多元联系到关系模型的转化,也需要为联系单独建立一个关系,该关系中最少应包括它所联系的各个实体关键字,若是联系有属性,也要归入这个新增关系中。这种转换与两个实体间m∶n联系的转换类似。

【例1-1】某医院病房计算机管理中心需要如下信息。

科室:科室号、科室名、科室地址、医生姓名。

病房:病房号、病房名、所属科室名。

医生:医生编号、医生姓名、职称、所属科室名、年龄。

病人:病历号、病人姓名、性别、诊断、主管医生、病房号。

其中,一个科室有多个病房、多个医生,一个病房只能属于一个科室,一个医生只属于一个科室,但一个医生可负责多个病人的诊治,一个病人的主管医生只有一个。

要求完成如下设计:

(1) 设计该计算机管理系统的E-R图。

(2) 将该E-R图转换为关系模型结构。

解:(1) 根据题意画出该系统的E-R图,如图1-18所示。

(2) 对应的关系模型结构如下:

科室(科室号,科室名,科室地址);

病房(病房号,病房名,科室号);

医生(医生编号,医生姓名,职称,年龄,科室号);

病人(病历号,病人姓名,性别,医生编号,病房号)。

图1-18 E-R图