3.4 E-R模型
E-R模型详解:从概念到关系模式的完整指南
一、数据模型的三要素
数据模型是描述数据及其联系的工具体系,任何数据模型都包含以下三个核心要素:
| 要素 | 说明 | 通俗理解 |
|---|---|---|
| 数据结构 | 描述数据的类型、内容、性质及数据之间的联系 | 数据的"骨架"长什么样 |
| 数据操作 | 对数据执行的操作,如查询、插入、删除、修改 | 能对数据做什么事情 |
| 数据的约束条件 | 数据及其联系必须满足的语义约束 | 数据必须遵守的"规则" |
举例说明:
以"学校管理系统"为例:
- 数据结构:学生(学号、姓名、年龄)、课程(课程号、课程名、学分)、选修(学号、课程号、成绩)
- 数据操作:查询某学生的所有课程、插入一条新选课记录、修改某门课的成绩
- 约束条件:学号不能重复、成绩必须在0-100之间、一个学生选修某门课后不能重复选
二、E-R模型的基本符号
E-R模型(Entity-Relationship Model,实体-联系模型)是数据库设计的核心工具,它用三种基本图形符号来描述现实世界:
| 符号 | 表示含义 | 说明 |
|---|---|---|
| 矩形(长方形) | 实体(Entity) | 表示客观存在并可相互区别的事物,如"学生"、"课程" |
| 椭圆 | 属性(Attribute) | 表示实体或联系所具有的某一特性,如学生的"姓名"、"学号" |
| 菱形 | 联系(Relationship) | 表示实体之间的关联关系,如学生"选修"课程 |
注意:实体用矩形(长方形)表示,而非"长方体"。在平面绘图中,我们使用二维的矩形来代表实体。
联系的两端需要填写联系类型(如 1、N、M),用于说明两端实体之间的数量对应关系。
举例说明:
画一个"学生-选修-课程"的E-R图:
- 矩形"学生" —— 椭圆"学号"、"姓名"、"年龄"
- 矩形"课程" —— 椭圆"课程号"、"课程名"、"学分"
- 菱形"选修" —— 连接学生和课程,学生端标"1",课程端标"N"
三、联系的类型
实体之间的联系有三种基本类型:
| 联系类型 | 符号 | 含义 |
|---|---|---|
| 一对一 | 1:1 | 实体A的一个实例最多与实体B的一个实例相联系 |
| 一对多 | 1:N | 实体A的一个实例可以与实体B的多个实例相联系,但实体B的一个实例最多与实体A的一个实例相联系 |
| 多对多 | M:N | 实体A的一个实例可以与实体B的多个实例相联系,反之亦然 |
3.1 一对一(1:1)
定义:一个实体A的实例,最多只与实体B的一个实例相关联,反之亦然。
通俗样例:
- 一个部门只有一个经理,一个经理只管理一个部门
- 一个公民只有一个身份证号,一个身份证号只对应一个公民
- 一张身份证只属于一个人,一个人只拥有一张身份证
3.2 一对多(1:N)
定义:一个实体A的实例可以与实体B的多个实例相关联,但实体B的一个实例最多只能与实体A的一个实例相关联。
通俗样例:
- 一个部门可以有多个员工,但一个员工只属于一个部门
- 一个班级可以有多个学生,但一个学生只属于一个班级
- 一部手机可以拨打多个电话号码(副号),但一个电话号码只属于一部手机
3.3 多对多(M:N)
定义:一个实体A的实例可以与实体B的多个实例相关联,同时实体B的一个实例也可以与实体A的多个实例相关联。
通俗样例:
- 一个学生可以选修多门课程,一门课程也可以被多个学生选修
- 一个工人可以操作多台机器,一台机器也可以被多个工人操作
- 一个作者可以写多本书,一本书也可以有多个作者合著
四、属性的分类
属性是实体或联系所具有的特征。根据性质的不同,属性可以分为以下几类:
4.1 简单属性 vs 复合属性
| 分类 | 定义 | 样例 |
|---|---|---|
| 简单属性 | 不可再分的属性(原子属性) | 学生的"学号"、"年龄" |
| 复合属性 | 可以进一步分解为多个子属性的属性 | 学生的"姓名"可分解为"姓"和"名";"地址"可分解为"省"、"市"、"区"、"街道" |
通俗理解:简单属性就像一颗完整的葡萄,不能再分;复合属性就像一个果篮,里面包含多个小水果。
4.2 单值属性 vs 多值属性
| 分类 | 定义 | 样例 |
|---|---|---|
| 单值属性 | 一个实体实例只能取一个值的属性 | 学生的"学号"只能有一个 |
| 多值属性 | 一个实体实例可以有多个取值的属性 | 学生的"电话号码"可以有多个(手机、家庭电话) |
通俗理解:单值属性就像你只能有一个身份证号;多值属性就像你可以有多个电话号码。
注意:多值属性在E-R图中通常用双椭圆表示。
4.3 NULL属性(空值属性)
定义:某些属性对于某些实体实例可能没有值,即为空(NULL)。这表示该属性在该实例中无意义或未知。
样例:
- 学生的"父母姓名"属性——对于孤儿或尚未填写信息的学生的该属性为NULL
- 员工的"配偶姓名"属性——对于未婚员工的该属性为NULL
4.4 派生属性
定义:可以从其他属性计算或推导出来的属性,不需要单独存储。
样例:
- 学生的"年龄"可以从"出生日期"派生计算出来
- 商品的"总价"可以从"单价 x 数量"派生出来
- 员工的"工龄"可以从"入职日期"与当前日期推导出来
注意:派生属性在数据库中通常不物理存储,而是通过查询时实时计算,以避免数据不一致问题。
五、E-R模型转换为关系模型
将E-R模型转换为关系模型(即关系数据库中的表)是数据库设计的关键步骤。转换规则如下:
5.1 实体的转换
规则:每个实体都对应一个关系模式(即一张表)。
- 实体的属性就是表的列
- 实体的主键就是表的主键
样例:
实体"学生(学号,姓名,年龄,系名)" -> 关系表:
| 学号 | 姓名 | 年龄 | 系名 |
|---|---|---|---|
| 2024001 | 张三 | 20 | 计算机系 |
| 2024002 | 李四 | 21 | 数学系 |
5.2 联系的转换
联系需要根据其类型(1:1、1:N、M:N)采用不同的转换策略:
(1)1:1联系的转换
规则:联系可以放到任意一端的实体中,作为一个属性(外键)来存储,但必须保证1:1的两端关联关系不被破坏。
样例:
实体"部门(部门号,部门名)"与实体"经理(经理号,姓名)"之间存在1:1联系"管理"。
转换方式一:在"部门"表中加入"经理号"作为外键:
| 部门号 | 部门名 | 经理号 |
|---|---|---|
| D001 | 财务部 | M001 |
| D002 | 技术部 | M002 |
转换方式二:在"经理"表中加入"部门号"作为外键,效果相同。
关键:无论放在哪一端,都要确保一个部门只能有一个经理,一个经理只能管理一个部门。
(2)1:N联系的转换
规则:有两种处理方式:
- 方式一:联系可单独作为一个关系模式(表)
- 方式二:在N端(多端)实体中加入1端(一端)实体的主键作为外键
样例:
实体"部门(部门号,部门名)"与实体"员工(工号,姓名,部门号)"之间存在1:N联系"拥有"。
方式一(在N端加外键):在"员工"表中加入"部门号":
| 工号 | 姓名 | 部门号 |
|---|---|---|
| E001 | 张三 | D001 |
| E002 | 李四 | D001 |
| E003 | 王五 | D002 |
方式二(联系单独成表):新建一张"部门_拥有_员工"表:
| 部门号 | 工号 |
|---|---|
| D001 | E001 |
| D001 | E002 |
| D002 | E003 |
实际应用中,方式一更为常见,因为它减少了表的数量,查询也更直接。
(3)M:N联系的转换
规则:联系必须作为一个单独的关系模式(表),其主键是M端和N端实体主键的联合主键(即组合主键)。
样例:
实体"学生(学号,姓名)"与实体"课程(课程号,课程名)"之间存在M:N联系"选修"。
必须新建一张"选修"表:
| 学号 | 课程号 | 成绩 |
|---|---|---|
| 2024001 | C001 | 90 |
| 2024001 | C002 | 85 |
| 2024002 | C001 | 78 |
| 2024002 | C003 | 92 |
关键:M:N联系不能简单地放到某一端实体中,否则会导致数据冗余和更新异常。必须单独建表,且该表的主键由两端的原主键组合而成。
5.3 转换总结
| 联系类型 | 转换策略 | 主键确定 |
|---|---|---|
| 1:1 | 放到任一端实体中作为外键属性 | 保持原实体主键 |
| 1:N | 在N端加入1端的主键作为外键,或单独成表 | N端主键 或 两端主键组合 |
| M:N | 必须单独作为一个关系模式(表) | M端和N端主键的联合主键 |
核心原则:
- 明确了有多少个关系模式,就知道有多少张表
- 每张表的属性也随之确定
- 关键判断点:联系是作为单独的表,还是作为某个实体的属性?
- 如果是属性,它是哪张表的属性?
- 如果是表,它的主键如何构成?
六、快速记忆口诀
| 内容 | 口诀 |
|---|---|
| 数据模型三要素 | 结构、操作、约束 |
| E-R图符号 | 矩形实体、椭圆属性、菱形联系 |
| 联系类型 | 一对一、一对多、多对多 |
| 属性分类 | 简单/复合、单值/多值、空值、派生 |
| 1:1转换 | 放任意端,做外键 |
| 1:N转换 | N端加外键,或单独成表 |
| M:N转换 | 必须单独成表,联合主键 |
总结:E-R模型是数据库设计的基石。掌握E-R图的三种基本符号、三种联系类型、属性的四种分类方式,以及E-R模型向关系模型的转换规则,就能为设计高效、规范的数据库打下坚实基础。记住核心原则:M:N必须单独建表,1:N灵活处理,1:1放任意端,在实际设计中根据查询需求和数据一致性要求选择最优方案。

浙公网安备 33010602011771号