PlantUML ERD 語法指南

什麼是實體關係圖(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),其中兩個欄位皆作為複合主鍵。烏鴉腳指示器明確地將級聯關係映射至評論層。

返回頂端