設計穩健的資料庫結構,不僅僅需要知道哪些資料表儲存哪些資料。它還需要一種清晰且通用的語言,以向利害關係人、開發人員以及未來的維護者傳達結構、約束條件與關係。實體關係圖(ERD)正是這種結構的藍圖。然而,並非所有藍圖都長得一樣。數十年來,出現了多種記號系統,每種都有其獨特的視覺語法與特定用途。
現代資料模型中的三大主流標準分別是陳氏記號、鴿子腳記號與UML類圖。選擇合適的記號,高度取決於您的技術棧、審查設計的對象,以及系統架構的具體需求。理解每種記號的細微差異,可避免誤解,並確保最終的實作與預期的資料邏輯一致。

🏛️ 陳氏記號:歷史基礎
由彼得·陳於1976年提出,陳氏記號是ER建模的鼻祖。它專為業務分析師與非技術利害關係人設計,具有直覺性。其視覺語言獨特,大量依賴幾何形狀來呈現資料庫理論的核心概念。
核心語法與視覺元素
-
實體:以矩形表示。矩形內包含主鍵與屬性。
-
屬性:以連接到實體矩形的橢圓表示。主鍵通常會加上底線。
-
關係:以連接兩個實體的菱形表示。
-
基數:以連接菱形與實體的線條表示,通常以數字或字母標示(1, N, M)。
-
弱實體:以雙重矩形表示,表示其存在依賴於父實體。
-
識別關係:以雙線連接弱實體與其父實體來表示。
優勢與應用情境
陳氏記號在需要向不寫SQL的人解釋資料庫設計時表現出色。其使用橢圓與菱形,能清楚區分「事物」(實體)與「動作」(關係)。
-
遺留系統文件: 許多舊系統都是以此標準設計的。維持與歷史圖示的一致性至關重要。
-
高階業務分析: 在與產品經理討論資料需求時,菱形形狀能清楚地表示兩個業務概念之間的連結。
-
學術與理論情境: 電腦科學課程通常先教授陳氏記號,以建立理論基礎,再轉向特定實作風格。
然而,當關係複雜時,此記號可能變得混亂。三元關係(三個實體之間的關係)在陳氏記號中容易視覺化,但若無額外解釋,很難直接映射到關係資料庫的約束條件。
🦵 鴿子腳記號:關係式標準
也稱為IE(資訊工程)記號,鴿子腳記號在20世紀後期成為關係式資料庫設計的實際標準。對資料庫管理員與後端工程師而言極具實用性。其名稱來自於用以表示關係中「多」端的形狀,形似鴿子的腳。
核心語法與視覺元素
-
實體:以矩形表示(在現代工具中,通常僅為表格名稱)。
-
關係:以直線連接表格來表示。
-
基數(「烏鴉腳」):一個三叉符號(類似烏鴉腳)表示關係的「多」端。
-
參與性:一條橫線(|)表示強制參與(必須存在),而圓圈(o)表示可選參與(可為空)。
-
主鍵:通常以鑰匙圖示或位於屬性旁的特定文字註解表示。
優勢與使用情境
烏鴉腳符號是針對直接映射至 SQL DDL 語句而優化。如果你正在撰寫資料庫結構,這很可能是你使用的視覺語言。
-
關聯式資料庫設計: 它能清晰地對應至 PostgreSQL、MySQL 或 SQL Server 等 SQL 資料庫中的外鍵與主鍵。
-
結構文件: 它是工程團隊內部技術文件的業界標準。
-
資料完整性清晰度: 使用橫線與圓圈可明確定義空值約束,這對後端邏輯至關重要。
此符號比陳氏符號更不抽象。它假設觀眾理解表格與外鍵的概念。這使得它不適合高階業務會議,但非常適合技術性 Sprint 規劃。
📐 UML 類圖:物件導向的橋樑
統一塑模語言(UML)是為了在各種設計範式中標準化軟體設計而開發的。雖然 UML 涵蓋多種圖表類型,但類圖是在物件導向環境中用於資料庫建模最常見的圖表。它彌補了程式碼結構與資料結構之間的差距。
核心語法與視覺元素
-
類別: 分為三個部分的矩形:名稱、屬性與操作(方法)。
-
關係: 以帶有特定箭頭的線連接類別,用以表示方向與類型。
-
關聯: 一條簡單的線。表示關係存在。
-
聚合: 一端為空心菱形。表示「整體-部分」關係,其中部分可獨立存在。
-
組成:實心菱形。表示嚴格的生命週期依賴關係;如果整體消亡,部分也會隨之消亡。
-
多重性:數字放置於線條末端附近(例如 0..1、1..*、0..*)。這在功能上類似於烏鴉足符號,但使用數學符號表示。
優勢與使用情境
當資料庫並非唯一重點時,UML 類圖至關重要。它們是後端程式碼與持久化儲存層之間的連結組件。
-
ORM 映射:物件關聯映射器(ORM)高度依賴 UML 風格的關係,以理解如何將類別對應到資料表。
-
全棧架構: 當前端、後端與資料庫團隊需要在資料結構上達成共識時,UML 提供了共同的術語。
-
複雜關係: UML 在處理繼承、泛化與介面實作方面,優於純粹的關係式表示法。
缺點是冗長。Crow’s Foot 中一個簡單的資料表關係,可能在 UML 中需要複雜的類別定義,包含對資料庫本身無關的方法與屬性。若僅用於結構圖生成,這可能導致混淆。
📊 側邊對比
為使決策更簡單,以下是這些符號在處理特定建模情境時的分析。
|
功能 |
陳氏符號 |
烏鴉足符號 |
UML 類圖 |
|---|---|---|---|
|
主要使用者 |
業務分析師、學術界人士 |
資料庫管理員、後端工程師 |
全棧開發者、架構師 |
|
實體表示 |
矩形 |
矩形(資料表) |
類別方框(名稱/屬性/方法) |
|
關係表示 |
菱形 |
帶符號的線條 |
帶箭頭/菱形的線條 |
|
基數表示法 |
標籤(1, N, M) |
烏鴉足 + 橫線/圓圈 |
數學表示法(0..1, *) |
|
可空性指示 |
隱含或文字 |
明確(圓圈 = 可選) |
明確(多重性) |
|
最適合 |
概念模型 |
邏輯/物理模型 |
實現模型 |
|
複雜度 |
三元連結時複雜度高 |
中等 |
繼承時複雜度高 |
🔍 為您的技術棧選擇合適的表示法
並沒有單一的「最佳」表示法。正確的選擇取決於專案的生命周期階段以及所涉及的技術。
情境 1:純關係型資料倉儲
如果您正在設計一個資料倉儲或交易系統,且重點完全放在 SQL 表格和查詢效能上,烏鴉足表示法是最有效率的選擇。它能最小化與物件概念相關的認知負荷,並最大化對約束條件的清晰度。當開發人員查看烏鴉足圖時,他們會清楚知道該寫下哪個外鍵。
-
重點: 資料完整性和查詢速度。
-
建議: 在物理結構層使用烏鴉足表示法。
情境 2:微服務與領域驅動設計
在微服務架構中,團隊通常在有界上下文中運作。UML 類圖在此非常有用,可用來定義服務之間的界限。它們有助於視覺化一個服務中的實體如何與另一個服務中的實體相關聯,通常透過 API 合約而非直接的資料庫連結。
-
重點: 服務界限與物件對應。
-
建議: 使用UML建立領域模型,然後轉換為烏鴉足符號以適用於特定服務資料庫。
情境 3:遺留系統遷移與審計
在審計現有系統或從遺留平台遷移時,文件中可能會出現陳氏符號。理解它對於準確遷移至關重要。你必須能夠將菱形與橢圓重新轉換為現代化的資料表結構。
-
重點: 保留業務邏輯。
-
建議: 將陳氏符號轉換為烏鴉足符號以供實作,並保留原始陳氏符號作為參考。
🛠️ 資料模型設計的最佳實務
無論選擇哪種符號系統,某些原則都普遍適用,以確保系統具備可維護性與可擴展性。
-
一致性至關重要: 不要在同一文件中混用不同符號系統。若從烏鴉足符號開始,就應以烏鴉足符號結束。中途切換會導致對特定符號意義產生混淆。
-
命名慣例: 確保實體與屬性名稱在整個圖表中遵循一致的蛇形命名法(snake_case)或駝峰命名法(camelCase)。像「Data」或「Info」這類模糊的名稱是警示信號。
-
正規化: 在最終確定圖表前,應先套用正規化規則(至多到第三正規化形式或博爾-科德正規化形式)。未正規化的圖表將導致資料冗餘與更新異常。
-
記錄約束條件: 明確記錄唯一性約束與檢查約束。視覺符號僅顯示關係,但文字註解通常能更清楚地闡明業務規則。
-
版本控制: 將實體關係圖視為程式碼。將其儲存在你的版本控制系統中。資料結構的變更應如同程式碼變更一樣經過審查。
🚫 應避免的常見陷阱
即使經驗豐富的架構師在視覺化資料結構時也會犯錯。了解這些常見錯誤可大幅節省開發期間的時間。
1. 忽略可空性
沒有圓圈或橫線的關係線表示預設值,而此預設值依工具而異。務必明確指出外鍵是否可為空值。在烏鴉足符號中,這是一個圓圈;在UML中,則是 0..1 的多重性。假設是極具危險的習慣。
2. 過度建模三元關係
雖然陳氏符號能良好處理三元關係,但關係型資料庫並未原生支援此類關係。三張表格之間的關係通常需要拆解為二元關係或建立關聯實體。直接建模三向連結可能導致實作上的困擾。
3. 混淆聚合與組合
在UML中,空心菱形與實心菱形的差異至關重要。空心菱形表示子物件可獨立於父物件存在;實心菱形則表示子物件無法獨立存在。混淆兩者可能導致資料孤兒問題,使子記錄被錯誤刪除或未正確持久化。
4. 順向依賴
當資料表A引用資料表B,而資料表B又引用資料表A時,就會產生循環引用。雖然有時是合理的(例如階層結構),但這會使備份與還原變得複雜。務必確保圖表明確標示依賴方向,以避免建立順序錯誤。
5. 忽略軟刪除
現代系統通常需要使用軟刪除(將某一行標記為非活躍狀態,而非直接移除)。圖表應明確標示 `deleted_at` 或 `is_active` 欄位的位置。這是一種邏輯上的變更,會影響到物理資料結構。
🔄 不同符號系統之間的轉換
專案通常會以陳氏符號進行高階規劃,並以烏鴉足符號完成實作。理解兩者之間的對應關係,可確保在轉換過程中資料完整性得以維持。
-
陳氏符號轉換為烏鴉足符號:將菱形轉換為直線。將標籤(1, N)轉換為烏鴉足符號。根據原始設計所隱含的業務規則,加上模態條狀/圓形符號。
-
UML 轉換為烏鴉足符號:移除類別的操作(方法)。將聚合/組合的線條簡化為標準的外鍵。調整多重性符號,使其與烏鴉足符號一致。
-
烏鴉足符號轉換為 UML:新增類別框結構。將關係線轉換為關聯箭頭。根據資料的生命周期,判斷該關係是聚合還是組合。
📝 資料模型設計的最終思考
符號的選擇不僅僅是美學問題;它是一種溝通工具,決定了資料庫如何被理解與建構。陳氏符號提供概念上的清晰性,烏鴉足符號帶來關係式的精確性,而 UML 則實現物件導向的整合。
透過選擇符合團隊專業能力與系統架構的符號,可降低溝通誤解的風險。一份良好的文件化資料結構,即是資料與應用程式之間的契約。無論你繪製的是菱形、烏鴉足,還是類別框,目標始終一致:為你的資料建立穩固的基礎。
投入時間於模型設計階段。與重新設計已部署的資料庫相比,修改圖表的成本幾乎可以忽略不計。明智地選擇你的視覺語言,並確保每位利害關係人都使用相同的語彙。












