Skip to content
难度基础(★)
建议时长45分钟

3.3.3 E-R图

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

E-R 图真正要读懂什么

E-R 图表面上是矩形、椭圆、菱形和连线,实质上是在表达三类信息:对象是什么、事实怎么发生、数量约束是什么。软件设计师考试很少只考“椭圆表示属性”这种记忆点,更多是给一个业务场景,让你判断联系类型、补全 E-R 图,或者把它转换为关系模式。

图形元素常见含义读图时要追问
矩形实体集它是否能独立存在和标识
椭圆属性属于实体还是属于联系
菱形联系连接哪些实体,是否有属性
连线旁的 1、n、m多重度方向是否与题目选项一致
双矩形/特殊线型弱实体或特殊化是否依赖强实体标识

多重度的方向不能偷懒

字幕里反复强调:考试选项经常同时出现 1:11:nn:1m:n。如果题干问“班级与学员之间”,答案可能是 1:n;如果问“学员与班级之间”,就变成 n:1。语义一样,但书写方向不同。

二元联系可以用“双向提问法”:

场景从 A 看 B从 B 看 A结论
班级-班长一个班级通常一个班长一个班长只属于一个班级1:1
班级-学员一个班级有多个学员一个学员属于一个班级1:n
学员-班级一个学员属于一个班级一个班级有多个学员n:1
学员-课程一个学员可选多门课一门课可被多名学员选m:n

更机械但很稳的分析方式是:选择一端作为核心实体,假设另一端只有一个实例,问“这个唯一的另一端能对应几个当前核心端”。然后换方向再问一次。两个方向都得到“多”,就是多对多。

mermaid
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. 先确认题干实体顺序,防止 1:nn:1 选反。
  2. 对二元联系用双向提问法:一个 A 对几个 B,一个 B 对几个 A。
  3. 对三元联系固定另外两端,只判断当前核心端能有几个。
  4. 检查属性归属:实体属性连实体,联系属性连联系。
  5. 遇到“依赖某实体存在、不能独立标识”的对象,考虑弱实体。

例题

单选
家属信息通常依赖职工信息存在,这类实体常称为:
单选
判断 E-R 图联系多重度时,更可靠的方法是:

自查要点

  1. E-R 图的基本元素有哪些?
  2. 多重度为什么要双向判断?
  3. 弱实体和普通实体有什么区别?