什麼是實體關係圖(ERD)?
一個實體關係圖(ERD)是一種結構藍圖,用於設計、文件化和分析關係型資料庫。它可視化系統內的資料表(實體)、其所包含的特定欄位(屬性),以及這些資料表之間的連結方式。在 PlantUML 中,ERD 使用資訊工程(IE)符號,採用標準烏鴉足符號來表示關係約束。
無論您是設計微服務資料儲存、優化 SQL 連接路徑,還是規劃企業級資料倉儲架構,以文字為導向的 UML ERD 都能確保您的資料庫結構清晰明確。透過VPasCode,您可以使用乾淨且宣告式的語法來定義資料庫資料表、索引鍵與邏輯關係。引擎會自動處理資料表框的大小調整,並路由您的外鍵連接字串,不會產生任何重疊的佈局線條。
核心語法指南:元素與構造
在 PlantUML 中建立穩健的 IE 風格 ERD,取決於結構化的實體區塊、明確的鍵標示,以及烏鴉足基數修飾符。
1. 聲明實體(資料庫資料表)
您可使用entity關鍵字,後接資料表名稱與一對大括號。在大括號內,列出您的資料表欄位。為使您的結構清晰易讀,請使用水平線分隔符(--)來分隔您的主要/外來鍵與一般資料屬性:
entity "users" as users_table {
id : INT [PK]
--
email : VARCHAR(255)
created_at : TIMESTAMP
} 
2. 指定主要鍵與外來鍵
雖然像 `[PK]` 或 `[FK]` 這樣的文字指示符效果良好,但 PlantUML 的 IE 引擎也支援視覺鍵圖示。在屬性前方放置星號(*)可將其標示為**必要(非空)**欄位,而乾淨的文字字串或標籤則可提供明確的索引上下文:
實體 "orders" {
* id : INT <<PK>>
--
* user_id : INT <<FK>>
折扣代碼 : VARCHAR(50)
} 
3. 映射烏鴉足的基數與關係
為了連接表格並強制執行參考完整性約束,請使用連字符、方括號和管道字符的組合。在 IE 表示法中,這些符號會形成獨特的 **烏鴉足** 頭部,用以表示資料庫關係:
||--||**精確一個對精確一個:** 一種嚴格的、強制性的 1:1 映射。||--o|**精確一個對零個或一個:** 一種可選的 1:1 映射。||--|{**精確一個對一個或多個:** 一種強制性的 1:N 依賴關係。||--o{**精確一個對零個、一個或多個:** 一種標準的、可選的 1:N 關係。

建立乾淨資料庫結構的最佳實務
- 維持大小寫慣例: 保持實體宣告的可預測性。使用小寫蛇形命名法(例如,
order_items)來表示實際的 SQL 映射表格,或對概念性的領域模型使用大寫駝峰命名法。 - 始終記錄外鍵: 在連結兩個表格時,請始終在子表格區塊內指定外鍵欄位。這能為工程團隊在資料遷移期間提供明確的參考上下文。
- 控制烏鴉足的間距: 包含數十個表格的複雜資料庫結構可能迅速變得擁擠。如果您的關係線開始不自然地交叉,請將雙連字符連接器(
--)替換為三條或四條連字符(---),以將表格分開,並讓佈局引擎有更多空間來組織網格。
現實世界中的 PlantUML ERD 範例
範例 1:核心電商關聯模型(金鑰與對應)
此功能藍圖模擬了核心電商資料庫交易循環,展示使用者、訂單與付款明細如何透過嚴格的烏鴉腳關係連結在一起。
@startuml
' 固定實體框的渲染為清晰的現代方形
hide circle
skinparam LINETYPE ortho
entity "使用者" as user {
* id : INT <<PK>>
--
* email : VARCHAR(100)
* password_hash : VARCHAR(255)
phone : VARCHAR(20)
}
entity "訂單" as order {
* id : INT <<PK>>
--
* user_id : INT <<FK>>
* total_amount : DECIMAL(10,2)
status : VARCHAR(50)
}
entity "付款明細" as ledger {
* id : INT <<PK>>
--
* order_id : INT <<FK>>
* transaction_reference : VARCHAR(100)
gateway : VARCHAR(50)
}
' 定義關聯模式綁定
user ||--o{ order : "下訂單"
order ||--|| ledger : "產生"
@enduml 
語法解析: 指令 hide circle 會停用預設的 UML 類別標籤氣泡,而 skinparam LINETYPE ortho 會強制關係路徑呈現為乾淨的 90 度直角。此結構清楚顯示使用者可以下零筆或多筆訂單(||--o{),而訂單必須恰好關聯一筆付款明細記錄(||--||).
範例 2:進階內容管理系統結構(多對多交集)
此進階企業藍圖繪製了完整的內容管理系統(CMS)拓撲結構。它展示了如何透過使用中間對應表,乾淨地處理多對多架構。
@startuml
hide circle
skinparam LINETYPE ortho
entity "文章" as post {
* id : INT <<PK>>
--
* author_id : INT <<FK>>
* title : VARCHAR(255)
slug : VARCHAR(255)
body : TEXT
}
entity "分類" as category {
* id : INT <<PK>>
--
* name : VARCHAR(100)
description : VARCHAR(255)
}
entity "文章-分類對應" as mapping {
* post_id : INT <<PK>><<FK>>
* category_id : INT <<PK>><<FK>>
--
assigned_at : TIMESTAMP
}
entity "評論" as comment {
* id : INT <<PK>>
--
* post_id : INT <<FK>>
author_name : VARCHAR(100)
* content : TEXT
}
' 關聯連結結構
post ||--o{ mapping : "包含"
category ||--o{ mapping : "分類"
post ||--o{ comment : "附加"
@enduml 
語法解析: 此範本模擬了文章與分類之間的經典多對多關係。而非直接連接,它引入了一個中間表格(post_category_mappings),其中兩個欄位皆作為複合主鍵。烏鴉腳指示器明確地將級聯關係映射至評論層。