数据库原理与应用
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.4 E-R模型

1.4.1 E-R模型的组成要素

E-R模型(Entity Relationship Model),也被称为实体-联系模型或E-R图,是一种描述概念数据模型的工具。E-R模型分别用实体、属性、联系描述现实世界中的对象、对象的属性、对象之间的联系,这三者被称为E-R模型的三要素。

E-R模型以规范的图例描述现实世界。常用的图例规范有两种,如图1-10所示。在第一种图例规范中,将实体、属性和联系分别用矩形、椭圆形和菱形表示;实体及其属性之间、联系及其属性之间用实线段连接;实体和联系之间也用实线段连接,连线旁标注联系的映射基数(Mapping Cardinality)。映射基数表示一个实体通过一个联系所关联的实体值的数量。映射基数的值可以是“一”或“多”。在第二种图例规范中,实体及其属性用一个两行的矩形表示,第一行为实体名,第二行为属性名;联系用菱形表示,联系的属性用矩形表示,联系及其属性之间用虚线连接;实体与联系之间用实线段连接,连线旁标注联系的映射基数。

图1-10 E-R模型的图例规范

假设某高校请你设计校园卡管理系统,你首先需要到该校不同部门去调研,了解校园卡管理涉及哪些人,哪些部门,他们分别有什么属性,会对校园卡进行什么操作。然后你需要进行数据抽象,把相关的人、物、事和概念按照共同特性进行归类,梳理各类对象的属性,以及对象与对象之间的联系。最后你需要调研和分析,结果是该高校拟实行一卡通管理,相关人员可以持校园卡在校内的食堂、超市、洗衣房和热水房等商户消费。该系统中校园卡和商户之间的消费关系可以描述为如图1-11和图1-12所示的E-R模型,两种描述形式是等价的,后文以第二种为例进行示例。其中,校园卡实体有卡号、密码、卡状态(分为正常使用、挂失和冻结三种状态,简称状态)与余额等四种属性;商户实体有编号、名称和地址等三种属性。一张卡可以在多个商户消费,一个商户可以接受多张校园卡消费,所以校园卡实体和商户实体之间是多对多的联系,消费时会产生消费日期和消费金额属性。

1. 实体

实体(Entity)是指现实世界中可区别于所有其他对象的一类“事物”或“对象”。例如,校园卡、商品、商户、消费行为等。实体可能是具象的,也可能是抽象的,如校园卡、商品、商户是具象的,而消费行为是抽象的。

图1-11 校园卡消费的E-R模型1

同一类实体具有共性的属性,可以通过一组属性来表示一类实体,并与其他类实体区分开来。例如,校园卡可以用卡号、密码、状态、余额等属性来描述,而学生可以用学号、姓名、性别、学院等属性来描述。

实体有“型”和“值”的区别。实体型中的个体称为实体值(Entity Value),每个实体值的属性类型相同,但是可以取不同的属性值。例如,学生是实体型,张伟是学生、周萍是学生,他们是学生这个实体型的实体值,都可以用学号、姓名、性别、学院等属性来描述,只是不同个体的学号、姓名等属性的值是不同的,如表1-1所示。后文如不特别说明,实体指的是实体型。

图1-12 校园卡消费的E-R模型2

表1-1 学生实体型及实体值示例

同一个实体型内的若干个实体值的集合称为实体集(Entity Set)。实体集中每个实体值具有相同的属性。例如,张伟和他的同班同学构成了一个实体集。

2. 联系

放在同一个数据库系统中进行处理的实体往往存在联系,例如学生持有校园卡在商户消费,学生在教师的授课下完成课程的学习。在E-R模型中把实体之间会发生的关系称为联系(Relationship)。

(1)联系的度。

联系的度(Degree)是指参与联系的实体的数目。如果一个应用涉及两个实体及其联系,就建立一个二元联系,联系的度为2。例如,学生和校园卡之间是二元联系。如果一个应用同时涉及三个实体,且通过二元联系无法准确描述三个实体间的联系时,就要建立一个三元联系,联系的度为3。例如,超市中同一种商品有多个供应商,同一个供应商给多家超市供货且向同一家超市供应多种商品。供应商、商品和超市之间是三元联系。三元及以上的联系统称为多元联系。

(2)联系的属性。

实体一定有属性,某些情况下联系也有属性。例如,学生持卡在商户消费,产生的消费金额和消费日期既不是校园卡的属性,也不是商户的属性,而是消费行为发生后产生的“消费”联系的属性。

(3)二元联系的映射基数。

二元联系的映射基数有一对一、一对多、多对一、多对多等四种情况,A、B实体二元联系的映射基数如表1-2所示,其中1表示“一”,n或者m表示“多”。

表1-2 二元联系的映射基数示例

一对一(One-to-one):A中的一个实体值至多与B中的一个实体值关联,B中的一个实体值也至多与A中的一个实体值关联,记为1:1。例如,一个学生只能拥有一张校园卡,一张校园卡也只能由一个学生持有,学生与校园卡之间是一对一的联系,如图1-13所示。

一对多(One-to-many):A中的一个实体值可与B中任意数目(0到多个)的实体值关联,B中的一个实体值至多与A中的一个实体值关联,记为1:n。例如,一个部门中有若干名职工,每名职工只能在一个部门工作,则部门与职工之间是一对多的联系,如图1-14所示。

图1-13 一对一联系示例

多对一(Many-to-one):A中的一个实体值至多与B中的一个实体值关联,B中的一个实体值可与A中任意数目(0到多个)的实体值关联,记为n:1。上例中,职工与部门之间是多对一的联系。

多对多(Many-to-many):A中的一个实体值可与B中任意数目(0到多个)的实体值关联,B中的一个实体值可与A中任意数目(0到多个)的实体值关联,记为m:n。例如,某高校的图书借阅制度是一个学生可以借阅多本图书,一本图书可以被多个学生借阅。学生与图书之间是多对多的联系,如图1-15所示。

图1-14 一对多/多对一联系示例

图1-15 多对多联系示例

(4)多元联系的映射基数。

多元联系映射基数的确定方法是分别以一个实体作为中心,假设另外的实体都只有一个实体值,根据关联的中心实体的数量进行判断。例如,三元联系中,分别以一个实体作为中心,假设另两个实体都只有一个实体值。若中心实体只有一个实体值能与另两个实体的实体值进行关联,则中心实体的连通数为“一”;若中心实体有多于一个实体值能与另两个实体的实体值进行关联,则中心实体的连通数为“多”。三元联系的映射基数有以下四种情况:一对一对一、一对一对多、一对多对多、多对多对多,分别表示为1:1:1、1:1:n、1:m:nm:n:p

假设A公司的技术员可能负责多个项目,而且一名技术员在每个项目中只使用一本手册,一名技术员在不同的项目中使用不同的手册,一个项目的每本手册只属于一名技术员。技术员、项目和手册之间是1:1:1的三元联系,如图1-16所示。

假设B公司中,每个员工在一个地点仅仅能被分配一个项目,但能够在不同地点做不同的项目。每个地点的一个项目能够由多个员工来做。项目、地点和员工之间的联系是1:1:n的三元联系,如图1-17所示。

再如,C公司中,一名经理手下的一名工程师可能参与多个项目。一名经理管理的一个项目可能会有多名工程师。一个项目的每名工程师仅由一名经理管理。经理、工程师和项目之间的联系是1:m:n的三元联系,如图1-18所示。

图1-16 1:1:1的三元联系示例

图1-17 1:1:n的三元联系示例

最后来看一个m:n:p联系的例子。D公司中,一位店员可以向一位顾客销售多种商品,而一名店员也可以将一种商品销售给多位顾客,一位顾客可以从不同店员处购买同一种商品。店员、顾客和商品之间的联系是m:n:p的三元联系,如图1-19所示。

图1-18 1:m:n的三元联系示例

图1-19 m:n:p的三元联系示例

(5)自环联系及其表示。

自环联系是一类特殊的联系,是指同一个实体以不同角色多次参与一个联系。例如,每个班只有一名班长,班长管理本班的所有学生,而班长也是一名学生。该联系中学生实体以班长和普通学生两种角色参与管理与被管理的联系。发生自环联系时,有必要在菱形和矩形的连线上标注角色名,指明实体是如何参与联系的,如图1-20所示。

图1-20 自环联系示例

3. 属性

E-R模型中的属性除了按照描述对象的不同,分为实体的属性和联系的属性之外,还可以按照其他标准进行分类。

(1)简单属性和复合属性。

简单属性是指不能划分为更小部分的基本属性,反之称为复合属性。复合属性中的子属性也可以是复合属性。E-R图中,复合属性用缩进式目录结构表示。例如,如图1-21所示的学生实体的属性中,学号、姓名、出生日期、学院都是不可再分的简单属性;通信地址是由省、市、区、街道组成的复合属性。其中,街道是由街道号、街道名和门牌号组成的复合属性。

(2)单值属性和多值属性。

如果某个属性对于一个特定的实体只有单独的一个值,这样的属性称为单值属性;反之称为多值属性。多值属性用{}表示。例如,绝大多数学生只有一个电话号码,但只要有学生有多个电话号码,则电话号码就是多值属性,如图1-21所示。

(3)派生属性。

派生属性是指可以从别的相关属性或实体派生出来的属性。派生属性用()表示。为了减少冗余和数据不一致,数据库中不存储派生属性,仅在需要时通过相应的公式计算得到。例如,图1-21中,学生的年龄是可由其出生日期计算得到的派生属性,故建议删除该属性。

图1-21 复合属性、多值属性、派生属性示例