LoginSignup
46

More than 1 year has passed since last update.

posted at

updated at

Organization

PlantUMLでER図を書くときのコツ

概要

PlantUMLでER図を書くことがあったのですが、
その時線がごちゃごちゃになって苦しんだのでTipsを残します。

  • PlantUMLを使ったことがないけどER図を書く必要がある
  • エンティティの箱がどんどん右側に増えていって困る
  • リレーションの線の長さを変えたい

このような悩みを持つ初心者の方向けの内容です。

事前準備

今回使うテーブルについて

  • 今回使うテーブルは下記のような感じです。
    (RailsアプリケーションのテーブルのER図を書いていたので、
    テーブルの命名などはActiveRecordのやり方に沿っています。)
  • エンティティの中身については触れません。

tables.png

エンティティをまとめたPlantUML
tables.pu
@startuml tables
entity companies as "companies\n会社" {
  + id [PK]
  --
  name [会社名]
  created_at [作成日]
  updated_at [更新日]
}

entity positions as "positions\n役職マスタ" {
  + id [PK]
  --
  company_id
  name [役職名]
  created_at [作成日]
  updated_at [更新日]
}

entity user_positions as "user_positions\nユーザー役職マスタ関連" {
  + id [PK]
  --
  user_id
  position_id
  created_at [作成日]
  updated_at [更新日]
}

entity users as "users\nユーザー" {
  + id [PK]
  --
  company_id
  login_id [ログインID]
  password [パスワード]
  created_at [作成日]
  updated_at [更新日]
}

entity user_profiles as "user_profiles\nユーザー詳細" {
  + id [PK]
  --
  user_id
  birthday[生年月日]
  name [ユーザー名]
  created_at [作成日]
  updated_at [更新日]
}

entity user_subordinate_users as "user_subordinate_users\nユーザー部下ユーザー関連" {
  + id [PK]
  --
  user_id
  subordinate_user_id [部下ユーザーID]
  password [パスワード]
  created_at [作成日]
  updated_at [更新日]
}

@enduml

初期状態のER図

特に何も工夫していない状態では下記のような感じです。

erd.pu
@startuml erd
' tables.pu はこのファイルと同じディレクトリに存在している想定です。
!include tables.pu

companies ||-o{ users
companies ||-o{ positions
users ||-o| user_profiles
users ||-o{ user_subordinate_users
users ||-o{ user_positions
positions ||-o{ user_positions
@enduml

ここから出力される図はこんな感じになります。

erd_初期段階.png

うーん、読めないですよね。いっそ存在しない方がましなER図・・・。
この図をいくつかの修正でまあまあ見やすい図にしていきたいと思います。

ER図を書くコツ一覧

エンティティを表示する方向を決める

エンティティを表示する方向を、
上下左右で指定したいと思います。

erd.pu
 @startuml erd
 !include tables.pu

-companies ||-o{ users
+companies ||-d-o{ users
 companies ||-o{ positions
-users ||-o| user_profiles
-users ||-o{ user_subordinate_users
+users ||-l-o| user_profiles
+users ||-d-o{ user_subordinate_users
 users ||-o{ user_positions
 positions ||-o{ user_positions
 @enduml

指定するとこんな感じになります。

erd_方向指定.png

かなり見やすさが改善されました。

指定の仕方

companies ||-d-o{ users の意味は、
companiesの下に向かって(down)users を表示する」ということです。

-r--u- のように指定することで、
上下左右のどこにエンティティを表示するかを変更できます。

  • 指定できる方向
    • l: left
    • r: right
    • u: up
    • d: down

使わなくてもいい感じに表示される時はわざわざ指定する必要はないですが、
今回のER図のような場合には有用です。

リレーションの線の長さを変える

リレーションの線の長さを変えることができます。

erd.pu
 @startuml erd
 !include tables.pu

-companies ||-d-o{ users
+companies ||-d--o{ users
 companies ||-o{ positions
 users ||-l-o| user_profiles
 users ||-d-o{ user_subordinate_users
 users ||-o{ user_positions
 positions ||-o{ user_positions
 @enduml

変更点は - を1個追加しただけです。
ER図は下記のようになります。

erd_最終.png

少しの変更で、かなりリレーションの流れが分かりやすくなりました。

どういう時に便利?

上記の図だとそこまでありがたみが感じられないのですが、
下記のように、線が交差してしまった時などに力を発揮します。

線が交差してしまう

下記の図は、erd.puのエンティティの表示方向などを
少しアレンジした図です。
この図では、リレーションの線が交差してしまっています。

another_erd.pu
@startuml erd
!include tables.pu

companies ||-r-o{ users
companies ||-u-o{ positions
users ||-u-o| user_profiles
users ||-d-o{ user_subordinate_users
users ||-o{ user_positions
positions ||-o{ user_positions
@enduml

erd_線が交差.png

線を伸ばすことで交差を解消

下記のように修正することで、線の交差を解消することができます。

another_erd.pu
 @startuml erd
 !include tables.pu

 companies ||-r-o{ users
-companies ||-u-o{ positions
+companies ||-u--o{ positions
 users ||-u-o| user_profiles
 users ||-d-o{ user_subordinate_users
 users ||-o{ user_positions
 positions ||-o{ user_positions
@enduml

erd_線の交差を解消.png

出来上がったER図

出来上がった図はこんな感じです。
そんなに複雑なことはしていない割りに、結構スッキリしました。

erd_最終.png

erd.pu
@startuml tables
!include tables.pu

companies ||-d--o{ users
companies ||-o{ positions
users ||-l-o| user_profiles
users ||-d-o{ user_subordinate_users
users ||-o{ user_positions
positions ||-o{ user_positions
@enduml

おわりに

最初のうちは「もう Excel とか Draw.io で描けばええやん・・・?」と思っていたのですが、
コツさえ掴めばなんとなく見やすく描けるなと思いました。
他にもTipsを見つけたら追記していきます。

参考サイト・記事

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
What you can do with signing up
46