8.4 資料關係、基數與選擇性
資料分析與資料建模
8.4.1 資料關係
資料關係表示兩個實體的實例如何連結。例如,一筆報名由一個團隊提出,並隸屬一場競賽。關係名稱應使用具體動詞,讓讀者可以組成完整句子閱讀。
8.4.2 基數
基數(Cardinality)說明一個實體最多可與另一實體的多少實例連結,常見為一對一、一對多及多對多。
基數必須來自業務事實,不能以資料庫實作習慣取代需求確認。基數要在實體關係圖決定,而不是留給程式設計師自行決定。
8.4.3 選擇性
選擇性說明關係是否必須存在。最小值為零代表可以沒有,最小值為一代表至少必須有一個。例如,報名建立後可能尚未產生競賽結果,因此「報名—競賽結果」在結果端可能是選擇性的。
8.4.4 鴉爪標記法(Crow's Foot)
鴉爪標記法(Crow's Foot notation)是一種常見的實體關係圖表示法,用來呈現實體之間的基數與選擇性。名稱來自表示「多」的一端所使用的三叉形符號。分析階段的圖形描述的是業務資料實體及其關係,不能直接把實體等同於資料庫資料表。
鴉爪標記法透過在連接線兩端的不同形狀,來表示資料之間的對應限制,例如一對一、一對多、零或多等:
- 三叉形(鴉爪):代表「多個」(Many,通常大於或等於 1)。
- 垂直短線(
|):代表「一個」。 - 圓圈(
o):代表「零個」,表示具有選擇性。 - 雙垂直短線:代表「剛好一個」(1 and only 1)。
透過符號組合,領域人員、系統分析人員與後續設計人員可以共同檢查關係是否必須存在,以及可以連結多少個實例。這項表示法能把文字需求轉為可檢查的資料結構,但不會自行證明基數正確;每個符號仍須回到需求與業務規則確認。
在Case M01中,||表示恰好一個,o{表示零個以上。這張候選圖表示每筆報名屬於一場競賽及一個團隊;一場競賽或一個團隊可連結零筆以上報名。若系統範圍限定單一競賽,或團隊跨競賽的定義不同,就要重新確認關係。
erDiagram
COMPETITION ||--o{ REGISTRATION : 接受
TEAM ||--o{ REGISTRATION : 提出查看並複製 Mermaid 程式碼
erDiagram
COMPETITION ||--o{ REGISTRATION : 接受
TEAM ||--o{ REGISTRATION : 提出8.4.5 不能精確表達的規則
Crow's Foot常用符號無法直接表達BR-01的「3~5名學生」,如果要限制最多5人一組,最少3人一組,則要在圖上可先表達團隊與學生的多對多候選關係,再以規則註記補充精確限制。圖形無法表達的規則仍必須保留在需求規格與資料字典中。
是否把3~5人的限制設計成可調整參數,屬於後續設計決策。分析階段應先忠實記錄BR-01、確認規則適用範圍,並說明圖形無法單獨表達這項限制;不能因預期規則可能改變,就預先授權系統管理者修改。