3.2 · 基数与参与度
目标: 精确描述关系。
基数 —— 每侧「多少」
| 基数 | 说明 |
|---|---|
| 1 : 1(一对一) | A 的每个实例对应至多一个 B,反之亦然 |
| 1 : M(一对多) | 每个 A 对应多个 B;每个 B 对应一个 A |
| M : N(多对多) | 多 A 对多 B |
例子
| 关系 | 基数 |
|---|---|
| Person — has — Passport | 1 : 1 |
| Department — employs — Staff | 1 : M |
| Student — enrols in — Course | M : N |
HKEAA 符号(课程指引重现)
1 ────── 1 关系 一对一
1 ────── M 关系 一对多
M ────── N 关系 多对多1
2
3
2
3
参与度 —— 「必须 / 可选」
| 参与度 | 记号 | 含义 |
|---|---|---|
| 全部 / 强制 | 双线 ══ | 每实例都须参与 |
| 部分 / 可选 | 单线 ── | 实例可参与可不参与 |
例子
| 关系 | 参与度 |
|---|---|
| Loan 必须引用 Member | Loan 侧:强制 |
| Member 可有或无当前 Loan | Member 侧:可选 |
基数 + 参与度组合
例:Member borrows Book
Member ──── < borrows > ════ Book
(M) optional ─║║══ mandatory (N)1
2
2
这里:
- M:N 基数(需关联实体)。
- Member 参与可选(部分会员从未借)。
- Loan 参与强制(每条借阅记录须引用一本书)。
化解 M:N —— 与 3.1 相同
Member ───< Loan >─── Book1
Loan 自成实体,含两侧的 FK。
实践中决定基数
问:
- A 能脱离 B 存在吗?→ 可选参与。
- 一个 A 能关联多个 B 吗?→ 多侧。
- 一个 B 能关联多个 A 吗?→ 多侧。
两侧都「多」 → 引入关联实体。
学生常见错误
- 混淆基数(数字)与参与度(强制 / 可选)。
- 忘把强制侧画为双线。
- 把每个关系都当 M:N。
考试式题目
题(5 分): 各情境陈述基数与参与度:
(a) 银行账户属恰好一位顾客;顾客可有多账户。 (b) 学生修多门课;每门课有多名学生;两侧皆强制。
参考答案:
(a) 基数:1 : M(Customer 到 Account)。参与度:Customer 侧可选(顾客可在开户前存在);Account 侧强制(每账户须有持有人)。
(b) 基数:M : N(Student 到 Course)。参与度:两侧强制(每位学生须至少修一门;每门课须至少一名学生)。实现需关联实体,如 Enrolment(student_id, course_id, semester, grade)。
关键要点
- 基数 = 数字(1、M、N)。
- 参与度 = 是否强制。
- 设表前两者都钉死。
➡️ 下一节:3.3 规范化