Mermaid.js ERD構文ガイド

エンティティ関係図(ERD)とは何ですか?

一種のエンティティ関係図(ERD)は、関係データベーススキーマの設計、文書化、分析に使用される構造的なブループリントです。アプリケーション内の特定のデータテーブル(エンティティ)、そのテーブル内にネストされたカラム(属性)、そしてそれらを結びつける参照整合性ルールを示します。標準の情報工学(IE)表記法を使用して、明確なクロウズフット表記法の頭部を用いて、データ制約および複数テーブル間の依存関係を示します。

使用することでMermaid.js、生産用テーブルのインデックス、データ型、外部キー接続を、明確で宣言的なテキストブロックを使って定義できます。エンジンは複数カラムレイアウトコンテナのサイズ調整を自動的に行い、テキストラベルが重複しないように接続線をルーティングします。

コア構文ガイド:要素と構造

Mermaidで有効で完全に実行可能なデータベーススキーマを構築するには、構造的エンティティブロック、データ型マッピング、インデックスタグ、および基数演算子に依存します。

1. エンティティとテーブルカラムの宣言

1行目にerDiagramキーワードを使用してERDキャンバスを初期化します。テーブルを定義するには、エンティティ名の後に開き波かっこを記述し、カラム設定を個別の行に順番に記述します:

erDiagram
    USERS {
        int id
        string email
        timestamp created_at
    }

2. 主キー、外部キー、コメントのマーク

MermaidのERDエンジンでは、カラム名とデータ型定義の直後に構造的インデックスタグを割り当てることができます。また、ダブルクォーテーションで囲むことで、カラムにオプションのテキストコメントを追加することもできます:

  • PK — カラムをテーブルの主キーとして明示的にマークします。
  • FK — カラムを親テーブルにリンクする外部キーとしてマークします。
erDiagram
    ORDERS {
        int id PK
        int user_id FK "USERS.idにリンクする"
        string coupon_code
    }

3. クロウズフットの基数修飾子の習得

テーブルを接続し、参照整合性ルールを適用するため、専用の線演算子を使用して関係をマッピングします。文字の頭部が視覚的なクロウズフットの形状を形成し、データの多重性制約を規定します:

  • ||--|| **厳密に1対1:** 厳密で必須の1:1マッピング。
  • ||--o| **1対0または1:** オプションの1:1依存関係。
  • ||--|{ **1対1または複数:** 必須の1:N親子リンク。
  • ||--o{ **1対0、1、または複数:** 標準的でオプションの1:N関係。

関係データスキーマのベストプラクティス

  • テーブルのキャメルケースを統一する:エンティティ名を予測可能に保つ。大文字文字列(例:USER_ACCOUNTS)または厳密な小文字スネークケース(例:user_accounts)を用いて、実世界のSQLインフラストラクチャコードと一致させる。
  • 常にデータ型を含める:型なしで単なるカラムテキストを宣言しない。明示的に以下のような定義を記載する:int, varchar、またはboolean アーキテクチャチャートが正確な技術的参照として機能することを保証します。
  • 関係ラベルを動詞のままにしてください: 要素をリンクする際は、関係の割り当て内に簡潔で小文字の動詞文字列を記述してください(例:||--o{ : "contains")として、ビジネスロジックのマッピングを文書化します。

実世界のMermaid.js ERDの例

例1:コアECトランザクションモデル(キーとマッピング)

この機能的ブループリントは、コアECデータベースのトランザクションループをモデル化しており、ユーザー、注文、支払い追跡システムが厳密なクロウズフット制約を使ってどのようにリンクしているかを示しています。

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 : "places"
    ORDERS ||--|| TRANSACTION_LEDGERS : "generates" 

構文の分解: このスキーマはトランザクションの境界を明確にマッピングしています。マッピングルールにより、顧客は時間の経過とともにゼロ個または複数の注文を出すことができます(||--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 : "contains"
    CATEGORIES ||--o{ POST_CATEGORY_MAPPINGS : "classifies"
    POSTS ||--o{ COMMENTS : "attaches" 

構文の分解: `POSTS` と `CATEGORIES` の多対多関係を処理するため、スクリプトは交差テーブル(`POST_CATEGORY_MAPPINGS`)を導入します。このマッピングボックスは、複合キーを用いて同時に主キーおよび外部キーとして機能させます(PK FK)、標準の1対多のクロウズフット接続を使って外側のノードを結びつけています。

上部へスクロール