Mermaid.js ERD 語法指南

什麼是實體關係圖(ERD)?

一個實體關係圖(ERD)是一種結構藍圖,用於設計、記錄和分析關係型資料庫結構。它概述了應用程式內的特定資料表(實體),表內嵌套的欄位(屬性),以及將它們連結在一起的參考完整性規則。使用標準資訊工程(IE)符號,它使用清晰的烏鴉腳符號頭部來顯示資料約束和多表依賴關係。

使用Mermaid.js您可以使用乾淨、宣告式的文字區塊來定義生產環境資料表的索引、資料類型和外來鍵連接。引擎會自動處理多欄位版面容器的大小調整,並路由連接線,避免文字標籤重疊。

核心語法指南:元素與構造

在 Mermaid 中建立有效且可執行的資料庫結構,取決於結構化實體區塊、資料類型對應、索引標籤和基數運算子。

1. 聲明實體與資料表欄位

您可以在第一行使用erDiagram關鍵字來初始化 ERD 畫布。要定義資料表,請在實體名稱後面加上開括號,並在單獨的行上依序列出您的欄位設定:

2. 標記主鍵、外來鍵和註解

Mermaid 的 ERD 引擎允許您在欄位名稱和資料類型定義後直接指定結構化索引標籤。您也可以透過雙引號包覆來為欄位附加可選的文字註解:

  • PK — 明確標示欄位為資料表的主鍵。
  • FK — 標示欄位為連結至父資料表的外來鍵。
erDiagram
    ORDERS {
        int id PK
        int user_id FK "連結至 USERS.id"
        string coupon_code
    }

3. 掌握烏鴉足基數修飾符

為了連接表格並強制執行參考完整性規則,請使用專用的線段運算符來標示它們的關係。字元頭部形成視覺上的烏鴉足形狀,用以規定資料多樣性約束:

  • ||--|| **精確一對一:** 嚴格的、強制性的 1:1 映射。
  • ||--o| **精確一對零或一:** 可選的 1:1 依賴關係。
  • ||--|{ **精確一對一或多:** 強制性的 1:N 父級連結。
  • ||--o{ **精確一對零、一或多:** 標準的、可選的 1:N 關係。

關係型資料結構的最佳實務

  • 維持一致的表格大小寫: 保持實體名稱可預測。使用大寫字串(例如,USER_ACCOUNTS)或嚴格的小寫蛇形命名法(例如,user_accounts)以符合您實際的 SQL 基礎設施程式碼。
  • 始終包含資料類型: 避免在未指定類型的情況下直接宣告欄位文字。明確列出如 int, varchar,或 boolean 確保您的架構圖表能作為準確的技術參考。
  • 保持關係標籤為動詞: 在連結元素時,請在關係指派中提供一個簡短的、小寫的主動詞字串(例如,||--o{ : "包含") 以記錄業務邏輯的對應關係。

現實世界中的 Mermaid.js ERD 範例

範例 1:核心電子商務交易模型(鍵與對應關係)

此功能藍圖模擬了核心電子商務資料庫的交易循環,展示使用者、訂單與付款追蹤系統如何透過嚴格的烏鴉腳約束連結在一起。

erDiagram
    CUSTOMERS {
        int id PK
        string email
        string password_hash
    }

    ORDERS {
        int id PK
        int customer_id FK
        decimal total_amount
        string status
    }

    TRANSACTION_LEDGERS {
        int id PK
        int order_id FK
        string reference_token
        string gateway
    }

    CUSTOMERS ||--o{ ORDERS : "下訂單"
    ORDERS ||--|| TRANSACTION_LEDGERS : "產生"

語法解析: 此架構清晰地映射了交易邊界。對應規則規定,客戶在一段時間內可以下零筆或多筆訂單(||--o{),而單筆訂單記錄必須產生恰好一筆對應的交易帳本條目(||--||).

範例 2:企業內容管理系統架構(多對多交集)

此進階資料庫藍圖規劃了內容管理平台的架構。它詳細說明了如何透過引入明確的橋接對應實體來解決複雜的多對多配置。

erDiagram
    POSTS {
        int id PK
        string title
        string slug
        text body_content
    }

    CATEGORIES {
        int id PK
        string name
        string description
    }

    POST_CATEGORY_MAPPINGS {
        int post_id PK, FK
        int category_id PK, FK
        timestamp assigned_at
    }

    COMMENTS {
        int id PK
        int post_id FK
        string author_name
        text comment_body
    }

    POSTS ||--o{ POST_CATEGORY_MAPPINGS : "包含"
    CATEGORIES ||--o{ POST_CATEGORY_MAPPINGS : "分類"
    POSTS ||--o{ COMMENTS : "附加"

語法解析: 為處理 `POSTS` 與 `CATEGORIES` 之間的多對多關係,該腳本引入了一個交集表格(`POST_CATEGORY_MAPPINGS`)。此對應框使用複合鍵,同時作為主鍵與外鍵(PK FK),並使用標準的多對一烏鴉腳連接將外部節點連結在一起。

返回頂端