写点什么

数据库原理及 MySQL 应用 | 实体联系模型

作者:TiAmo
  • 2022-12-21
    江苏
  • 本文字数:4857 字

    阅读完需:约 16 分钟

数据库原理及MySQL应用 | 实体联系模型

ER模型是数据库设计中被广泛用作数据建模的工具,通常用在“自顶向下”的设计方法中,是数据库应用的第一步。 

01、实体联系模型的要素

ER 模型中包括 3 个主要的要素,分别是实体(Entity)、联系(Relationship)和属性(Attribute),首先来看一下实体的概念和表示方法。

1. 实体

现实世界中客观存在并可以相互区别的事物称为实体。实体可以是物理存在的,如一本书或一名学生,也可以是概念性的,如一次销售行为或一次面试等。实体概念的关键之处在于一个实体能够与另一个实体相互区别。例如一个班里有 30 名学生,即使这些学生中有重名的情况,任何一名学生也都能与其他学生区别开来(例如,每个学生都拥有一个唯一学号)。

实体型表示具有相同属性的同一类实体。实体型可以刻画出全部同质实体的共同特征和性质。例如学生具有共同的属性(学号、姓名、入学日期等),则这些属性构成一个“学生”实体型。

同一类实体的集合称为实体集,例如某学校的全体学生就是一个“学生”实体集。实体型表示抽象的实体集,

例如实体型“学生”表示全体学生的概念,并不具体指学生甲或学生乙等。在不引起混淆的情况下,可以将实体型简称为实体。

在 ER 图中,使用矩形框来表示实体型,框内标注实体型的名称。如图 3-1 所示,分别表示 Books(图书)实体型和 Orders(订单)实体型。


■ 图 3-1 实体型的表示方法

2. 联系

现实世界中,事物内部以及事物之间通常存在着一定的联系,这些联系在信息世界中反映为实体型内部以及不同实体型之间的联系。

实体型之间全部联系的抽象称为联系型。在 ER 图中,联系型用菱形框表示,框内标注联系型的名称,并用连线将菱形框分别与对应的实体型相连接。联系型的名称通常为动词。在不引起混淆的情况下,可以将联系型简称为联系。如图 3-2 所示,由于订单中包含图书,所以在“订单”实体型和“图书”实体型之间存在着“包含”的联系。


■ 图 3-2 联系的表示方法

1) 联系的元(Degree)

联系的元是指参与联系的实体型的个数。在图 3-2 中,有两个实体型参与 Include(包含)联系,所以称该联系为二元联系。有时,参与某个联系的实体型的个数可能更多。如图 3-3 所示,每名学生选修的每门课程都有一个授课教师,所以这个 Study(选修)联系是一个三元联系。


■ 图 3-3 一个三元联系

2) 递归联系

同一实体型中的实体以不同的角色参与到一个联系上,这个联系被称为递归联系。Teachers(教师)实体型中的实体可以按角色分为教研室主任和普通教师,教研室主任管理(Supervise)教师。如图 3-4 所示,“教师”实体型以不同的角色两次参与到“管理”联系上,这个联系被称为递归联系。


图 3-4 递归联系

3) 实体在联系上的参与度

如果实体型中的每个实体都参与到一个联系上,则使用双线将该实体型与联系连接起来,称为完全参与。如果实体型中的实体不是全部参与到联系上,则使用单线将该实体型与联系连接起来,称为部分参与。

在图 3-5 中,因为所有的“订单”中都包含“图书”,但是并不是所有的“图书”都包含在“订单”中,所以 Orders 完全参与联系 Include,而 Books 部分参与该联系。


■ 图 3-5 完全参与和部分参与

4) 基数映射

基数映射是建立在联系上的一种约束机制,表示某个实体型通过联系与另一个实体型中的一个实体产生联系时,可能涉及该实体型中的实体个数。对于二元联系来说,两个实体型产生联系的类型可能是一对一联系(1∶1)、一对多联系(1∶n)或多对多联系(m∶n)三种情况。

(1) 一对一联系:设 A、B 为两个实体型,若 A 中的每个实体最多和 B 中的一个实体有联系,反之亦然,则称 A 与 B 之间是一对一联系,记作 1∶1。

图 3-6 是一个 1∶1 联系的例子。在 Locate(位于)联系中,一个 Bookstore(书店)只位于一个 City(城市),而且一个“城市”也只开办一家“书店”。


■ 图 3-61∶1 联系

(2) 一对多联系:设 A、B 为两个实体型,若 A 中的每个实体可以和 B 中的多个实体有联系,而 B 中的每个实体最多和 A 中的一个实体有联系,则称 A 与 B 之间是一对多联系,记作 1∶n。

图 3-7 中的 Produce(生成)联系是一个 1∶n 联系,因为一位 Customer(顾客)可以生成多张“订单”,但是一张“订单”只属于一位“顾客”。


■ 图 3-71∶n 联系

在一对多联系中,“一”的一方被称为父实体型,“多”的一方被称为子实体型。在如图 3-7 所示的例子中,“顾客”称为父实体型,“订单”被称为子实体型。

然而,在前面所讲到的一对一联系中,如果一方是部分参与,另一方是完全参与,那么可以将部分参与的一方视为父实体型,完全参与的一方视为子实体型。在如图 3-6 所示的例子中,“城市”可以被视为父实体型,“书店”可以被视为子实体型。

(3) 多对多联系:设 A、B 为两个实体型,若 A 中的每个实体可以和 B 中的多个实体有联系,反之亦然,则称 A 与 B 之间是 m∶n 联系。

图 3-8 中的 Include 联系是一个 m∶n 联系,因为一张“订单”可以包含多本“图书”,而且一本“图书”也可以包含在多张“订单”中。


5) 复杂联系的基数映射

二元联系基数映射的确定方法比较简单,如果参与一个联系的实体型的个数超过两个,那么确定其基数映射的过程稍微复杂一些。对于一个 n 元联系,可以首先确定 n-1 个实体型中的一组具体实体,然后分析第 n 个实体型的参与情况。再按照这个方法依次确定每个实体型在联系上的参与情况。

如图 3-9 所示,Study(选修)是一个三元联系。通过分析发现每名学生选修的每门课程有且仅有一位教师教授;每位教师可以教授每名学生 0 门或多门课程;每名教师教授的每门课程都会面对多名学生。


3. 属性

属性用来描述实体或联系的特性。例如,“图书”实体的属性包括“书号”“书名”“isbn”“单价”等。

在 ER 图中,用椭圆形表示属性,并用连线与实体型或联系型连接起来。如果属性较多,为使图形更加简明,有时也将属性另外单独用列表表示。


■ 图 3-10“图书”实体型的属性

联系也可以有属性。例如图 3-11 所示的“选修”联系描述了学生选修教师的课程,在该联系上包含选修的学期、选修的成绩以及选修标志属性。如果将这些属性放在学生、课程或教师实体型上都无法正确地表达其含义。


■ 图 3-11 选修联系的属性

实体或联系的属性通常都有一个取值范围,这个取值范围称为该属性的域。例如学生的性别属性的域应该是一个只包含元素“男”或“女”的集合,选修的成绩属性的域应该是 0~100 的实数,成绩标志的域应该是包含元素“缺考”“缓考”“免考”“作弊”“通过”的集合等。

1) 简单属性与复合属性

简单属性是原子的、不可再分的。复合属性可以细分为更小的部分。如图 3-12 所示,Customers(顾客)实体型的顾客编号、顾客姓名、邮编属性都是简单属性,而地址属性就是一个复合属性,因为地址还可以细分为城市、街道、门牌号等部分。

在设计 ER 图时,保持复合属性还是将复合属性分解为更小的属性取决于用户操作的需要。例如,在访问顾客的联系地址时,通常都使用完整的地址,这时就可以使用地址属性。如果还需要统计顾客所在城市的分布情况等信息,就可以选择将地址属性细分为城市、街道和门牌号三个属性。

2) 单值属性和多值属性

如果某个属性对于实体型中的任意一个实体只有一个值,则该属性为单值属性;如果某个属性对于实体型中的一个实体可能有多个值,则这个属性是多值属性。多值属性用双边椭圆形表示。

如图 3-13 所示,“顾客”实体型中的顾客编号、顾客姓名、邮编属性都是单值属性,因为每位顾客都只有一个顾客编号、一个姓名和一个邮编。而电话属性就是一个多值属性,因为一位顾客可以保留家庭电话、办公电话和移动电话等多个联系电话。


■ 图 3-13 单值属性与多值属性

在进行数据库逻辑结构设计时,由于多值属性无法表达为基本的关系,所以需要进行特殊的处理,例如将多值属性转换为单值属性或将多值属性去除并通过单独的关系来表示。

3) 派生属性

如果某个属性的值可以由其他属性导出,则称该属性为派生属性。派生属性用虚边椭圆形表示。如图 3-14 所示,因为顾客的年龄可以由其出生日期导出,所以顾客的年龄属性就是一个派生属性。


某些情况下,某个实体型的派生属性的值可能需要通过其他实体的属性值计算得出。有些实体型的派生属性的值可能需要计算实体型本身或其他实体型中实体的个数来导出,例如如果“班级”实体型中有一个班级人数属性,这个属性的值可以通过计算“学生”实体型中学生实体的个数来得出,这个属性就是一个派生属性。

02、码

码(Key)是实体型中用来标识每一个具体实体的重要工具。下面将介绍候选码和主码的概念。

1. 候选码

候选码(Candidate Key,CK)是实体型中的属性或最小属性组,可以用来唯一标识实体型中的每个具体的实体。

例如在“图书”实体型中,因为每册图书都有一个唯一的书号,所以可以通过指定一个书号来确定唯一的一册图书,因此书号属性就是该实体型的候选码。这个例子说明候选码具有唯一标识性。

2. 主码

主码(Primary Key,PK)是从候选码中选出的,用来唯一标识实体型中的每一个实体的一个候选码。在 ER 图中,可以使用下画线来标识主码,如图 3-15 所示。


■ 图 3-15 主码的表示方法

一个实体型中可能包含多个候选码,例如在“图书”实体型中,由于每本图书都有一个唯一的“书号”和唯一的 isbn 值,所以“书号”和 isbn 都是这个实体型的候选码。因为“书号”比 isbn 更简洁高效,所以可以选择“书号”作为“图书”实体型的主码。

3. 组合码

如果一个实体型中的两个或两个以上的属性共同组成实体型的候选码,则称该候选码为组合码。

假设有一个 Addresses(地址)实体型,该实体型中的每个实体表示一个联系地址,包括城市、街道和邮编 3 个属性。由于城市和街道两个属性组合的值能够唯一标识一个地址,所以城市和街道两个属性构成“地址”实体型的组合码,如图 3-16 所示。


■ 图 3-16 组合码

03、强实体型与弱实体型

1. 强实体型

如果一个实体型中实体的存在不依赖于其他实体型,则称该实体型为强实体型。强实体型的特性是它有候选码,实体型中的每个实体可以通过候选码被唯一标识。如图 3-17 所示,Courses(课程)实体型是一个强实体型,课程编号是其主码,每门课程都可以通过课程编号来唯一标识。


■ 图 3-17 强实体与弱实体

2. 弱实体型

弱实体型是指其实体的存在必须依赖于其他实体型。弱实体型的特性是它没有候选码。例如有一门课程“数据库开发”,需要分别在第 3 学期完成 60 学时,在第 4 学期完成 80 学时,则可以创建一个“课程提供”实体型,该实体型包含学期和学时两个属性,如图 3-17 所示。CourseOffering(课程提供)实体型就是一个弱实体型,因为该实体型中的属性不能构成候选码,也就是说学期、学时或这两个属性的组合都不能作为实体型的候选码。在 ER 图中,使用双边矩形来描述弱实体型。

如果要想标识出“课程提供”实体型中的实体,则必须借助于“课程”强实体型,使用“课程”强实体型中的课程编号属性以及“课程提供”弱实体型中的学期属性可以共同标识“课程提供”弱实体型中的每个实体。虽然弱实体型没有候选码,但是某个或某些属性可以结合强实体型中的属性来共同标识弱实体型中的实体,这样的属性或属性组称为分辨符,在 ER 图中使用虚线下画线来描述,如图 3-17 所示,“学期”属性就是一个分辨符。并不是所有的弱实体型都需要有分辨符,如果弱实体型中的每个实体都可以通过与其关联的强实体型来标识,则弱实体型不需要分辨符。

弱实体型所依赖的强实体型又称为标识实体型,每个弱实体型必须和标识实体型相关联,弱实体型与标识实体型之间的联系称为标识性联系。标识性联系是从弱实体型到标识实体型的多对一或一对一联系,并且弱实体型完全参与联系。在 ER 图中,使用双边菱形描述标识性联系。

弱实体型可以参与标识性联系以外的其他联系。弱实体型也可以作为标识实体型参与到与另一个弱实体型的标识性联系中。一个弱实体型也可能与不止一个标识实体型关联,这样一个特殊的弱实体型可以通过来自标识实体型的实体组合来标识。弱实体型的候选码可以由标识实体型的候选码的并集加上弱实体型的分辨符组成。

如果弱实体型只参与一个关联性联系,而且它的属性也不是很多,则建模时可以将其表述为强实体型的属性,如图 3-18 所示,将“课程提供”表述为“课程”实体型的一个多值复合属性。如果弱实体型参与到标识性联系以外的其他联系中,或其属性比较多时,则建模时将其表述为弱实体型更为恰当。


 ■ 图 3-18 将弱实体型表述为多值复合属性

 

发布于: 2022-12-21阅读数: 16
用户头像

TiAmo

关注

有能力爱自己,有余力爱别人! 2022-06-16 加入

CSDN全栈领域优质创作者;阿里云创作者社区专家博主、技术博主、星级博主;华为云享专家;

评论

发布
暂无评论
数据库原理及MySQL应用 | 实体联系模型_数据库_TiAmo_InfoQ写作社区