3.3.3 E-R图
E-R 图真正要读懂什么
E-R 图表面上是矩形、椭圆、菱形和连线,实质上是在表达三类信息:对象是什么、事实怎么发生、数量约束是什么。软件设计师考试很少只考“椭圆表示属性”这种记忆点,更多是给一个业务场景,让你判断联系类型、补全 E-R 图,或者把它转换为关系模式。
| 图形元素 | 常见含义 | 读图时要追问 |
|---|---|---|
| 矩形 | 实体集 | 它是否能独立存在和标识 |
| 椭圆 | 属性 | 属于实体还是属于联系 |
| 菱形 | 联系 | 连接哪些实体,是否有属性 |
| 连线旁的 1、n、m | 多重度 | 方向是否与题目选项一致 |
| 双矩形/特殊线型 | 弱实体或特殊化 | 是否依赖强实体标识 |
多重度的方向不能偷懒
字幕里反复强调:考试选项经常同时出现 1:1、1:n、n:1、m:n。如果题干问“班级与学员之间”,答案可能是 1:n;如果问“学员与班级之间”,就变成 n:1。语义一样,但书写方向不同。
二元联系可以用“双向提问法”:
| 场景 | 从 A 看 B | 从 B 看 A | 结论 |
|---|---|---|---|
| 班级-班长 | 一个班级通常一个班长 | 一个班长只属于一个班级 | 1:1 |
| 班级-学员 | 一个班级有多个学员 | 一个学员属于一个班级 | 1:n |
| 学员-班级 | 一个学员属于一个班级 | 一个班级有多个学员 | n:1 |
| 学员-课程 | 一个学员可选多门课 | 一门课可被多名学员选 | m:n |
更机械但很稳的分析方式是:选择一端作为核心实体,假设另一端只有一个实例,问“这个唯一的另一端能对应几个当前核心端”。然后换方向再问一次。两个方向都得到“多”,就是多对多。
flowchart LR
A["选一个核心实体 A"] --> B["假设另一端 B 只有一个实例"]
B --> C{"一个 B 能对应几个 A?"}
C -->|一个| D["A 端多重度为 1"]
C -->|多个| E["A 端多重度为 n/m"]
D --> F["换 B 为核心再判断"]
E --> F二元联系的典型语义
一对一:双方都只能对应一个
例如“班级-班长”:若题干默认一个班级只有一个正班长,一个班长也只管理一个班级,则为 1:1。这类联系在关系模式转换时有多种实现,可以把任一方主键放到另一方,也可以单独成表;考试会结合题目要求判断。
一对多/多对一:同一语义的两个方向
例如“班级-学员”:一个班级有多个学员,一个学员只属于一个班级。从“班级到学员”写是 1:n,从“学员到班级”写是 n:1。题目选项若同时给出这两个,必须看题干实体顺序。
多对多:双方都可对应多个
例如“学员-课程”:一个学员可选多门课程,一门课程也可被多个学员选修。多对多在关系数据库中不能只靠单边外键表达,后续通常要拆成独立关系,如 选课(学号, 课程号, 成绩)。
三元联系要按“固定另外两端”判断
三元联系是两个以上实体共同参与的联系。它不是简单地把三个二元联系相加,因为业务事实可能必须由三方一起才能确定。
例如“供应商向项目供应零件”涉及供应商、项目、零件三个实体。供应数量 依赖的是“某供应商、某项目、某零件”这个三元事实,而不是任意两个实体即可决定。
判断三元联系多重度时,字幕给出的办法是:选择一个实体作为核心,假设另外两个实体都固定为唯一实例,再问核心实体能有几个。
| 核心实体 | 固定另外两端后提问 | 得到的核心端多重度 |
|---|---|---|
| 供应商 | 对固定项目和固定零件,可由几个供应商供应 | 可能为多 |
| 项目 | 对固定供应商和固定零件,可供应给几个项目 | 可能为多 |
| 零件 | 对固定供应商和固定项目,可供应几种零件 | 可能为多 |
题干也可能直接给语义约束,此时优先按题干判断。不要把三元联系强行拆成三个二元联系,否则会丢失“三方共同决定一个业务事实”的约束。
弱实体与特殊化
弱实体不能完全依靠自身属性独立标识,通常依赖某个强实体存在。例如“职工家属”往往依赖“职工”:离开职工,家属记录在该系统中没有独立管理意义。弱实体转换关系模式时常需要把强实体主键作为自己主键的一部分。
特殊化/泛化表达的是“父类-子类”结构。例如“职工”可以特殊化为“教师”“行政人员”;子类继承父类公共属性,同时拥有自己的专有属性。它和普通联系不同,不是两个平级实体之间发生业务关系,而是同一类对象的分类层次。
做题路线
- 先确认题干实体顺序,防止
1:n和n:1选反。 - 对二元联系用双向提问法:一个 A 对几个 B,一个 B 对几个 A。
- 对三元联系固定另外两端,只判断当前核心端能有几个。
- 检查属性归属:实体属性连实体,联系属性连联系。
- 遇到“依赖某实体存在、不能独立标识”的对象,考虑弱实体。
例题
自查要点
- E-R 图的基本元素有哪些?
- 多重度为什么要双向判断?
- 弱实体和普通实体有什么区别?