数据库原理及应用(Access版)第3版
上QQ阅读APP看书,第一时间看更新

1.5 实体-联系模型

数据库设计的过程就是利用数据模型来表达数据和数据之间联系的过程。数据模型是一种工具,用来描述数据(Data)、数据的语义(Data Semantics)、数据之间的联系(Relationship)以及数据的约束(Constraints)等。数据建模过程是一个抽象的过程,其目的是把一个现实世界中的实际问题用一种数据模型来表示,用计算机能够识别、存储和处理的数据形式进行描述。在本节中,将讨论一种用于数据库概念设计的数据模型—E-R模型。一般地讲,任何一种数据模型都是经过严格定义的。

理解实际问题的需求之后,需要用一种方法来表达这种需求,现实世界中使用概念数据模型来描述数据以及数据之间的联系,即数据库概念设计。概念模型的表示方法之一是E-R模型,即用E-R模型表达实际问题的需求。E-R模型具有足够的表达能力且简明易懂,不需要使用者具有计算机知识。E-R模型以图形的方式表示模型中各元素及其之间的联系,所以又称E-R图(Entity-Relationship Diagram)。E-R图便于理解且易于交流,因此,E-R模型得到了相当广泛的应用。

1.5.1 实体-联系模型中的基本概念

下面介绍E-R模型中使用的基本元素。

1.实体

实际问题中客观存在并可相互区别的事物称为实体(Entity)。实体是现实世界中的对象,实体可以是具体的人、事、物。例如,实体可以是一名学生、一位教师或图书馆中的一部书籍。

2.属性

实体所具有的某一特性称为属性(Attribute)。在E-R模型中用属性来描述实体,例如,通常用“姓名”“性别”“出生日期”等属性来描述人,用“图书名称”“出版商”“出版日期”等属性描述书籍。一个实体可以由若干个属性来描述。例如学生实体可以用学号、姓名、性别、出生日期等属性来描述。这些属性的集合(学号,姓名,性别,出生日期)表征了一个学生的部分特性。一个实体通常具有多种属性,应该使用哪些属性描述实体,取决于实际问题的需要或者说取决于最终期望得到哪些信息。例如,教务处关心、描述学生各门功课的成绩,而学生处可能会更关心学生的各项基本情况,如学生来自哪里,监护人是谁,如何联系等问题。

确定属性的两条原则。

1)属性必须是不可分的最小数据项,属性中不能包含其他属性,不能再具有需要描述的性质。

2)属性不能与其他实体具有联系,E-R图中所表示的联系是实体集之间的联系。

属性的取值范围称为该属性的域(Domain)。例如,“学号”的域可以是9位数字组成的字符串,“性别”的域是“男”或“女”,“工资”的域是大于零的数值等。但域不是E-R模型中的概念,E-R模型不需要描述属性的取值范围。

3.实体集

具有相同属性的实体的集合称为实体集(Entity Set/Entity Class)。例如,全体学生就是一个实体集。实体属性的每一组取值代表一个具体的实体。例如,(983501011,张捷,女,1978年12月)是学生实体集中的一个实体,而(993520200,李纲,男,1978年8月)是另一个实体。在E-R模型中,一个实体集中的所有实体有相同的属性。

4.键

在描述实体集的所有属性中,可以唯一地标识每个实体的属性称为键(Key)或标识(Identifier)。首先,键是实体的属性;其次,这个属性可以唯一地标识实体集中每个实体。因此,作为键的属性取值必须唯一且不能“空置”。例如,在学生实体集中,用学号属性唯一地标识每个学生实体。在学生实体集中,学号属性取值唯一,而且每一位学生一定有一个学号(不存在没有学号的学生)。因此,学号是学生实体集的键。

5.实体型

具有相同的特征和性质的实体一定具有相同的属性。用实体名及其属性名集合来抽象和刻画同类实体,称为实体型(Entity Type)。实体型表示的格式是

实体名(属性1,属性2,……,属性n)

例如,学生(学号,姓名,性别,出生日期,所属院系,专业,入学时间)就是一个实体型,其中带有下画线的属性是键。

图1-6所示为学生实体集的图形表示。用矩形表示实体集,矩形框中写入实体集名称,用椭圆表示实体的属性。作为键的属性,用加下画线的方式表示。

图1-6 学生实体集的图形表示

在建立实体集时,应遵循的原则如下。

1)每个实体集只表现一个主题。例如,学生实体集中不能包含教师,它们所要描述的内容是有差异的,属性可能会有所不同。

2)每个实体集有一个键属性,其他属性只依赖键属性而存在。并且除键属性以外的其他属性之间没有相互依赖关系。例如,学生实体中,学号属性值决定了姓名、性别、出生日期等属性的取值(记为:学号→姓名 性别 出生日期),但反之不行。

6.联系

世界上任何事物都不是孤立存在的,事物内部和事物之间是有联系(Relationship)的。实体集内部的联系体现在描述实体的属性之间的联系;实体集外部的联系是指实体集之间的联系,并且这种联系可以拥有属性。

实体集之间的联系通常有3种类型:一对一联系(1∶1)、一对多联系(1∶n)和多对多联系(m∶n)。

1.5.2 实体集之间的联系形式

1.一对一联系

例1-1】考虑学校里的班和班长之间的联系问题。每个班只有一位班长,每位班长只在一个班里任职,班实体集与班长实体集之间的联系是一对一联系。用E-R图表示这种一对一的联系,如图1-7所示。用矩形表示实体集,用菱形表示实体集之间的联系,菱形中是联系的名称,菱形两侧是联系的类型。为了强调实体集之间的联系,本图中略去了实体集的属性。

图1-7 班实体集与班长实体集的联系

例1-2】某经济技术开发区需要对入驻其中的公司及其总经理信息进行管理。如果给定的需求分析如下,则建立此问题的概念模型。

(1)需求分析

1)每个公司有一名总经理,每位总经理只在一个公司任职。

2)需要存储和管理的公司数据有公司名称、地址、电话。

3)需要存储和管理的总经理数据有姓名、性别、出生日期、民族。

这个问题中有两个实体对象,即公司实体集和总经理实体集。描述公司实体集的属性是公司名称、地址和电话;描述总经理实体集的属性是姓名、性别、出生日期和民族。但两个实体集中没有适合作为键的属性,因此为每一个公司编号,使编号能唯一地标识每一个公司;为每一位总经理编号,使编号能唯一地标识每一个总经理。并且在两个实体集中增加“编号”属性作为实体的键。

(2)E-R模型

1)实体型。

公司(公司编号,公司名称,地址,电话)

总经理(经理编号,姓名,性别,出生日期,民族)

2)E-R图如图1-8所示。

图1-8 公司实体集与总经理实体集的E-R图

作为一个完整的数据库设计过程,还应该有数据库逻辑设计和数据库实现。

总结上面的两个例子,可以归纳出实体集之间一对一联系的定义,即对于实体集A中的每一个实体,实体集B中至多有一个实体与之联系,反之亦然,则称实体集A与实体集B具有一对一联系。记为1∶1。

2.一对多联系

例1-3】考虑学生与班之间的联系问题。一个班有多名学生,而每个学生只属于一个班。因此,班实体集与学生实体集之间的联系是一对多联系,如图1-9所示。

图1-9 班实体集与学生实体集的联系

例1-4】一家企业需要用计算机来管理它分布在全国各地的仓库和员工信息。如果给定的需求信息如下,则建立此问题的概念模型。

(1)需求分析

1)某公司有数个仓库分布在全国各地,每个仓库中有若干名员工,每名员工只在一个仓库中工作。

2)需要管理的仓库信息包括仓库名、地点、面积。

3)需要管理的仓库中员工信息包括姓名、性别、出生日期和工资。

4)此问题包含两个实体集:仓库和员工。仓库实体集与员工实体集之间的联系是一对多的联系。

5)需要为每个仓库编号,用以唯一地标识每个仓库,因此仓库实体的键是属性仓库号。

6)需要为每位员工编号,用以唯一地标识每名员工,因此员工实体的键是属性员工号。

(2)E-R模型

1)实体型。

仓库(仓库号,仓库名,地点,面积)

员工(员工号,姓名,性别,出生日期,工资)

2)E-R图如图1-10所示。

图1-10 仓库实体集与员工实体集的E-R图

实体集之间一对多联系是指,对于实体集A中的每一个实体,实体集B中至多有n个实体(n≥0)与之联系;反之,对于实体集B中的每一个实体,实体集A中至多只有一个实体与之联系,则称实体集A与实体集B具有一对多联系。记为1∶n。

实体集之间的一对多联系是实际问题中遇到最多的情况,同时也是最重要的一种联系形式。实体集之间更复杂的联系,例如下面的多对多联系是通过分解为一对多联系来解决的。

3.多对多联系

如果对于实体集A中的每一个实体,实体集B中有n个实体(n≥0)与之联系;反之,对于实体集B中的每一个实体,实体集A中也有m个实体(m≥0)与之联系,则称实体集A与实体集B具有多对多联系。记为m∶n。

例1-5】考虑学校中的学生与各类学生社团之间的情况。如果给定的需求分析如下,则为管理其信息建立E-R模型。

(1)需求分析

1)每名学生可以参加多个社团,每个社团中有多名学生。

2)需要管理的社团信息包括:社团名、地点、电话。

3)需要管理的学生信息包括:学号、姓名、性别、出生日期和所属院系。

4)需要为社团编号,用以唯一地标识每一个社团并作为社团实体集的键。

5)学生实体集的键属性是学号,它可以唯一地标识每一名学生。

(2)E-R模型

1)实体型。

社团(编号,名称,地点,电话)

学生(学号,姓名,性别,出生日期,所属院系)

2)E-R图如图1-11所示。

图1-11 社团实体集与学生实体集的E-R图

例1-6】考虑学生与课程之间的情况。学校需要对学生及其选课的信息进行管理。根据需求分析建立概念数据模型。

(1)需求分析

1)一位学生选修多门课程,每门课程也会有多个学生选择。学生实体集与课程实体集之间的联系是多对多的联系。

2)需要为课程编号,用“课程号”唯一地标识每一门课程并作为课程实体集的键。

3)学生实体集的键是属性学号。

(2)E-R模型

1)实体型。学生(学号,姓名,性别,出生日期,院系)课程(课程号,课程名,开课单位,学时数,学分)

2)E-R图如图1-12所示。

图1-12 学生实体集与课程实体集的E-R图

如果考虑学生的成绩属性,显然这个属性放在哪个实体中都不合适,前面说过联系可以拥有属性。因此,把成绩放入联系中,作为这个多对多联系的属性。

4.多元联系

以上讨论的问题均为两个实体集之间的联系,称为二元联系。在实际问题中经常会遇到多个实体集之间的联系问题,称为多元联系或n元联系(n为实体集的个数)。但无论一个问题中包含多少个实体集,实体集之间的联系类型只有3种:一对一联系、一对多联系和多对多联系。

例1-7】某企业需要对其仓库、员工、订单和供应商的信息进行管理。根据需求分析建立概念模型—E-R模型。

(1)需求分析

某公司有分布在全国各地的多个仓库。每个仓库中有多名员工。每张订单一定是与一名员工签订的。每张订单上的商品由一名供应商供货。

(2)E-R模型

1)实体型。

仓库(仓库号,仓库名,地点,面积)

员工(员工号,姓名,性别,出生日期,婚否,工资)

订单(订购单号,订购日期,金额)

供应商(供应商号,供应商名,地址)

2)E-R图(略去属性)如图1-13所示。

图1-13 多元联系E-R图

例1-8】产品销售数据管理。根据需求分析,建立E-R模型。

(1)需求分析

产品销售数据管理,需要管理的数据包括供应商信息、产品信息、客户信息、订单信息。

每个供应商提供多种产品;每个订单包含多种产品,每种产品可能出现在多个订单上;每个订单对应一个客户,每个客户可能有多个订单。

供应商(公司名称,联系人姓名,联系电话,地址,邮政编码,Email)

客户(姓名,性别,电话,省份,城市,区,详细地址,邮政编码,Email)

产品(名称,价格,当前库存量)

订单(订单编号,订单日期,产品,付款方式)

(2)E-R模型

E-R模型如图1-14所示。

图1-14 多元多对多联系E-R模型

实体集之间这种一对一、一对多和多对多联系不仅存在于两个实体集之间,同样存在于两个以上实体集之间。这个问题中涉及4个实体,实体之间的联系称为多元联系。

请为1.1引例中的A公司业务数据库进行数据库概念设计。同时考虑,如果A企业的产品还需要分类,应该如何设计E-R模型。

根据以上示例,对数据库概念设计过程进行归纳,数据库概念设计是建立在需求分析基础之上的,依据需求分析完成如下工作。

1)确定实体。

2)确定实体的属性。在讨论属性时,已经提出了两条确定属性的原则,此外还应注意以下两点:

●要避免在有联系的两个实体集或多个实体集中出现重复属性。例如,在公司实体集中有“公司名称”属性,在总经理实体集中就不要出现“公司名称”属性。

●要尽量避免出现需要经过计算推导出来的属性或需要从其他属性经过计算推导出来的属性。例如,在学生实体中尽量保留“出生日期”属性,而不要保留“年龄”属性

(有的数据库设计中,由于某种需要会违背这条原则)。

3)确定实体集的键。有的实体集本身已经具有可以作为键的属性,例如,学生实体集的“学号”属性;但有的实体集不具有可以作为键的属性,这时就要设立一个“编号”或“代码”之类的属性,作为该实体集的键属性,并且在建立数据库前为实体集中所有实体编码。

4)确定实体集之间的联系类型。

5)用E-R图和实体型表达概念模型设计结果。

数据库概念设计是一个承上启下的阶段,需要强调的是,概念模型是在理解需求分析的基础上建立的,对需求的理解不同,所建立的概念模型可能会有所不同。概念模型建立之后,需要与业务人员进行交流,以加深对需求的进一步理解,对概念模型反复推敲,以求不断完善,从而为数据库逻辑设计打下良好基础。