Skip to content

シスアド:Mermaid.jsを使ってER図を書く

IPAなどが利用するER図の記法と、Mermaid.jsのER図の記法は若干異なりますが、言わんとしていることは同じです。

リレーションの表記

リレーションは、以下のように表記します。

30秒でわかる

ここまでの表記例をまとめましょう。
もちろん、逆の表記をすれば、逆のリレーションを表すこともできます。

  • ||--||:1対1のリレーション
  • ||--o{:1対多のリレーション(0..*)
  • ||-|{:1対多のリレーション(1..*)
  • }o--o{:多対多のリレーション

1. 1対1

||--||が1対1のリレーションを表します。

例として、携帯電話契約と電話番号の関係性があります。(1契約で2回線以上の電話番号を持つことはないと仮定します)
お察しの通り、1契約につき1つの電話番号が関連付けられます。電話番号には必ず契約が存在しますし、逆もまた然りです。

mermaid-plain
erDiagram 
    "携帯電話契約" ||--|| "電話番号" : "関連付け"

2. 1対多

||--o{が1対多のリレーションを表します。

例では、Twitterなどでユーザとツイートの関係を表しています。
各ツイートは一人のユーザに必ず紐付き、一人のユーザは複数のツイートできます。

また、ユーザはツイートをしないこともあるため、0..*の関係としています。

mermaid-plain
erDiagram
    "ユーザ" ||--o{ "ツイート" : "投稿する"

3. 多対多

}o--o{ が多対多のリレーションを表します。

例では、Netflixなどのサービスにおいて、ユーザが作品を視聴する関係を表しています。
それぞれのユーザは複数の作品を視聴でき、また作品は複数のユーザに視聴されます。

先のTwitterの例と同様に、ユーザが一切作品を視聴しないこともあるため、0..*の関係としています。今回の事例については、逆も同様に0..*の関係です。

mermaid-plain
erDiagram
    "ユーザ" }o--o{ "作品" : "視聴する"

テーブルの表記

Mermaid.jsでは、テーブルの表記も可能です。
例えば、先の例ででてきたユーザとツイートの関係を表すテーブルは以下のようになります。(実例を考慮し、カラムと制約を追加しています)

実際の型や制約はDBごとに若干異なります。例えば、MySQLではVARCHAR、PostgreSQLではCHARACTER VARYINGなどです。

mermaid-plain
erDiagram
    USERS {
        int user_id PK "ユーザID"
        string name "名前"
        string email "メールアドレス"
    }
    TWEETS {
        int tweet_id PK "ツイートID" 
        string tweet "ツイート内容"
        datetime created_at "投稿日時"
    }
    ユーザ ||--o{ ツイート : "投稿する"