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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: ER模型是数据库设计中被广泛用作数据建模的工具,通常用在“自顶向下”的设计方法中,是数据库应用的第一步。

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

  1. 实体

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

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

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

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

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

  1. 联系

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

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

1) 联系的元(Degree)

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

2) 递归联系

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

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

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

在图3-5中,因为所有的“订单”中都包含“图书”,但是并不是所有的“图书”都包含在“订单”中,所以Orders完全参与联系Include,而Books部分参与该联系。
image.png
■ 图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(城市),而且一个“城市”也只开办一家“书店”。
image.png
■ 图3-61∶1联系

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

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

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

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

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

图3-8中的Include联系是一个m∶n联系,因为一张“订单”可以包含多本“图书”,而且一本“图书”也可以包含在多张“订单”中。
image.png
5) 复杂联系的基数映射

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

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

  1. 属性

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

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

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

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

■ 图3-12简单属性与复合属性

1) 简单属性与复合属性

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

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

2) 单值属性和多值属性

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

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

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

3) 派生属性

如果某个属性的值可以由其他属性导出,则称该属性为派生属性。派生属性用虚边椭圆形表示。如图3-14所示,因为顾客的年龄可以由其出生日期导出,所以顾客的年龄属性就是一个派生属性。
image.png
某些情况下,某个实体型的派生属性的值可能需要通过其他实体的属性值计算得出。有些实体型的派生属性的值可能需要计算实体型本身或其他实体型中实体的个数来导出,例如如果“班级”实体型中有一个班级人数属性,这个属性的值可以通过计算“学生”实体型中学生实体的个数来得出,这个属性就是一个派生属性。

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

  1. 候选码

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

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

  1. 主码

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

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

  1. 组合码

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

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

03、强实体型与弱实体型

  1. 强实体型

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

  1. 弱实体型

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

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

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

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

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

image.png

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
13天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
27 1
|
15天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
22天前
|
监控 关系型数据库 MySQL
数据库优化:MySQL索引策略与查询性能调优实战
【10月更文挑战第27天】本文深入探讨了MySQL的索引策略和查询性能调优技巧。通过介绍B-Tree索引、哈希索引和全文索引等不同类型,以及如何创建和维护索引,结合实战案例分析查询执行计划,帮助读者掌握提升查询性能的方法。定期优化索引和调整查询语句是提高数据库性能的关键。
108 1
|
10天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
99 0
|
1月前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
131 6
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
63 3
Mysql(4)—数据库索引
|
1月前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
71 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
24天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,包括准备工作、下载源码、编译安装、配置 MySQL 服务、登录设置等。同时,文章还对比了编译源码安装与使用 RPM 包安装的优缺点,帮助读者根据需求选择最合适的方法。通过具体案例,展示了编译源码安装的灵活性和定制性。
73 2
|
27天前
|
存储 关系型数据库 MySQL
MySQL vs. PostgreSQL:选择适合你的开源数据库
在众多开源数据库中,MySQL和PostgreSQL无疑是最受欢迎的两个。它们都有着强大的功能、广泛的社区支持和丰富的生态系统。然而,它们在设计理念、性能特点、功能特性等方面存在着显著的差异。本文将从这三个方面对MySQL和PostgreSQL进行比较,以帮助您选择更适合您需求的开源数据库。
102 4
|
1月前
|
存储 关系型数据库 MySQL
如何在MySQL中创建数据库?
【10月更文挑战第16天】如何在MySQL中创建数据库?
下一篇
无影云桌面