見た目を変える
シスアド: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{ ツイート : "投稿する"