AIGC标识 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端主键的联合主键

核心原则:

  1. 明确了有多少个关系模式,就知道有多少张表
  2. 每张表的属性也随之确定
  3. 关键判断点:联系是作为单独的表,还是作为某个实体的属性?
    • 如果是属性,它是哪张表的属性?
    • 如果是表,它的主键如何构成?

六、快速记忆口诀

内容 口诀
数据模型三要素 结构、操作、约束
E-R图符号 矩形实体、椭圆属性、菱形联系
联系类型 一对一、一对多、多对多
属性分类 简单/复合、单值/多值、空值、派生
1:1转换 放任意端,做外键
1:N转换 N端加外键,或单独成表
M:N转换 必须单独成表,联合主键

总结:E-R模型是数据库设计的基石。掌握E-R图的三种基本符号、三种联系类型、属性的四种分类方式,以及E-R模型向关系模型的转换规则,就能为设计高效、规范的数据库打下坚实基础。记住核心原则:M:N必须单独建表,1:N灵活处理,1:1放任意端,在实际设计中根据查询需求和数据一致性要求选择最优方案。

posted @ 2026-10-28 16:44  渡solong~  阅读(6)  评论(0)    收藏  举报