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-4 】 一家企业需要用计算机来管理它分布在全国各地的仓库和员工信息。如果给定的需求信息如下,则建立此问题的概念模型。
图1-9 班实体集与学生实体集的联系
(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-6 】 考虑学生与课程之间的情况。学校需要对学生及其选课的信息进行管理。根据需求分析建立概念数据模型。
(1)需求分析
1)一位学生选修多门课程,每门课程也会有多个学生选择。学生实体集与课程实体集之间的联系是多对多的联系。
2)需要为课程编号,用“课程号”唯一地标识每一门课程并作为课程实体集的键。
图1-11 社团实体集与学生实体集的E-R图
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图和实体型表达概念模型设计结果。
数据库概念设计是一个承上启下的阶段,需要强调的是,概念模型是在理解需求分析的基础上建立的,对需求的理解不同,所建立的概念模型可能会有所不同。概念模型建立之后,需要与业务人员进行交流,以加深对需求的进一步理解,对概念模型反复推敲,以求不断完善,从而为数据库逻辑设计打下良好基础。