数据库系统(五)数据库设计
Published in:2023-12-05 | category: 数据库系统

参考

ER 图是什么?这一篇让你搞懂 ER 图! - 知乎 (zhihu.com)

数据库设计核心就是

1 理解用户需求

2 使用E-R关系模型,绘制E-R图

3 将E-R关系模型转换为数据库表

本节核心在第二部分到第三部分

1 实体关系模型 ER模型ER model

1.1 E-R模型结构

E-R模型实际上是由多个实体集(含有不同属性)和联系集组成

1.1.1 实体和实体集

实体 Entity 是一个物体,客观存在并且相互区别

​ 比如一个学生,一个公司

实体集合 Entity Sets 具有相同属性的实体的集合

​ 比如一群学生,一系列公司

1.1.2 属性

属性 Attributes

​ 比如ID,姓名,这些属性能够区别不同的实体

​ 就好比我们每个人都有自己的特征,这些特征区分了不同的实体

除了基本属性还有如下一些属性概念需要了解

简单属性 Simple 和复合属性 composite

  • 简单属性:不可再拆分,如数学成绩是一个简单属性
  • 复合属性:可以再拆分,即属性的嵌套组合,如名字这个属性可以拆分为姓这个属性和名这个属性

单值属性 Single-valued和多值属性 multi-valued

  • 单值属性:即只能是一个的属性,如一个人性别值只能是一个男或女 (排除个别特殊现象哈哈哈)
  • 多值属性:即可能有多个值的属性,如电话号码可以有多个

派生属性 Derived attributes

​ 可以从一个已知的属性的值推理出来,比如知道出生可以退出年龄

​ 所以年龄就是一个派生属性

描述属性 descriptive attributes

描述属性一般都是给关系集合的,

如学生实体集合Student和考试实体集合section通过take(参加)这一个关系集合联系起来,那么take这个关系集合可以用grade成绩这一属性来描述

1.1.3 关系集合

关系 Relationship 在一些实体中的关系

关系集合 Relationship Sets 相同类型的关系的集合

关系集合往往要建立多个实体集的关系

递归关系集合 Recursive relationship set

​ 同一实体集以不同的角色多次参与关系集。

二元关系

​ 只包含两个实体集的关系

非二元关系集合

​ 含超过两个实体集的关系

1.2 ER关系图绘制

E-R diagram ER关系图

1.2.1 实体集绘制

1 矩形表示一个实体集,矩形上方写实体集的名字

2 实体集的属性一个一个列在矩形框内,用下横线标识主键

举例如下 Student表的关系图绘制

image-20231221111215170

1.2.2 关系集绘制

1 用一个菱形方块代表关系集,连接多个实体集矩形

举例如下 advisor代表一个关系集

image-20231221111620929

2 上面讲到描述性属性,用虚线表示,如下

image-20231221112506608

上面我们讲完了实体集的一些初步介绍,接下来重点讲其中一些部分

2 映射基数 Mapping Cardinalities

Mapping Cardinalities 映射基数 表示另一个实体可以通过关系集与之关联的实体数。

有以下几种类型

一对一,一对多,多对一,多对多

image-20231217192825529

2.1 映射基数类型

2.1.1 一对一

一对一 one to one:一个导师最多指导一个学生,一个学生最多被一个导师指导。说明导师可以不指导学生,学生也可以单干。

绘制E-R图如下 左右各一个箭头

image-20231221113358521

2.1.2 一对多

一对多 one to many:一个导师可以指导任意多个学生,一个学生至多被一个导师指导。

绘制E-R图如下 只有one的那一侧有箭头

image-20231221113429002

2.1.3 多对一

多对一 many to one:一个导师至多指导一个学生,一个学生可以被任意个导师指导。

绘制E-R图如下 只有one的那一侧有箭头

image-20231221143036766

2.1.4 多对多

多对多 many to many:一个导师可以指导任意学生,一个学生可以被任意多个导师指导。
说明导师可以不指导学生,也可以指导好些个。学生可以单干,也可以多拜几个师傅

绘制E-R图如下两侧都没有箭头

image-20231221113506699

总结:one指向的那一侧是箭头->

对于以上的各种关系,每一个advisor关系集合的超键都由各个实体集合的主键并集组成

但是超键却不太一样,一般选择many那一侧的主键做关系集合的主键

多对多

  • 主键和超键相同

一对多

  • 多的那一侧,当做主键

一对一

  • 任何一侧都可以当做主键

2.2 全部或部分参与约束

Total and Partial Participation 全部或部分参与

如下图所示,绘制E-R图时候 双线代表全部,单线代表部分

image-20231221113951144

学生一侧是全部,含义代表每一个学生必须有一个指导老师

导师一侧是部分,含义代表有些老师指导学生,有些老师不指导学生

2.3 最小最大基数约束

在之前的基础上,可以加数量上的范围约束

E-R关系图上用双点表示, *表示无限制

格式

1
最小值..最大值

举例如下

image-20231221114723404

含义如下

左侧老师一侧:0..* 代表一个指导老师能够指导0个或者更多个学生,没有上限

右侧学生一侧:1..1 代表一个学生至少1 个老师,至多也只有1个指导老师

超键是都有的

但主键根据情况不同而不同

比如

+

3 弱实体集

他的存在依赖于另一个实体集(被依赖的那个称作标识实体集identifying entity sets)

比如 考试这个存在就是依赖于课程的存在,所以课程实体集叫做标识实体集identifying entity sets,考试这个实体集叫做弱实体集Weak Entity Sets

E-R图中,用双框矩形表示,关系集合由双框菱形组成,虚线代表辨别属性

如下图所示

image-20231221143918389

该关系集合sec_course 的主键由标识实体集的主键和弱实体集的辨别属性(即虚线画出来的)一起构成

弱实体集那一侧一定是全部total participation

4 ER模型转换为关系模式Relation Schema

初步解决

4.1 强实体集表示

对于强实体集而言有着简单的属性,直接转即可

举例如下

image-20231221145145498

对于强实体集有着复合属性,转换后成为一个一个简单属性(复合属性不会出现在其中)

举例如下

image-20231221145301321

对于多值属性而言如电话号码,我们再创建一个新的表

image-20231221145336791

派生属性不要出现在表中,直接计算得到

4.2 弱实体集表示

弱实体集形成新的表包含标识实体集的主键和它自己的属性

举例如下

image-20231221145718330

4.3 关系集合表示

多对多

两个实体集的主键+他自己的描述属性

image-20231221145851411

多对一

image-20231221151001627

优化如下

image-20231221151014043

一对一

image-20231221151038725

优化如下

image-20231221151058298

5 实体关系设计

问题一:假设一个部分可能有许多不同的分配。

解决:使用多值复合属性赋值

问题二:假设有关于作业的其他信息,例如最高分或截止日期

解决:将叶属性添加到分配属性

但是问题二有冗余问题

将赋值模型建模为由部分标识的弱实体集

6 扩展E-R特征

6.1 IS-A 继承

Person可以经过Specialization(特化)称为两个小的如学生也是雇员

实体集可以包括实体的子分组,这些实体在某种程度上与集中的其他实体不同。

较低级别的实体集继承(inheritance)了较高级别实体集的所有属性和关系参与。

多重继承 简单继承

例如 人员集包括子组——员工集和学生集

重叠(Overlapping)——一个实体可能属于多个专用实体集,约束要求一个实体可以属于多个较低级别的实体集如,一个人可能既是学生也是雇员

不相交(Disjointness)——一个实体最多必须属于一个专用实体集,约束要求一个实体只能属于一个较低级别的实体集,如一个人只能是雇员里的前台柜员或者秘书之一

通过架构表示 IS-A 关系

方式一

​ 建立一个高水平实体集的架构,建立一个低水平的架构。通过外键建立两个练习

缺点:获取有关的信息,一个员工需要访问两个关系(低级架构和高级架构)

方式二

​ 使用所有本地属性和继承属性为每个实体集形成架构

缺点:冗余

用聚合的方式

使用聚合 – 可以将聚合实体集视为单个单元,而不考虑其内部结构的细节。

聚合是一种抽象,通过该抽象,将关系视为更高级别的实体

Prev:
嵌入式系统(五)通信协议
Next:
嵌入式系统(四)嵌入式系统定时器