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 規範化