Edited at

PlantUML で ER 図(ERD)を描く(似非ではないです)

More than 1 year has passed since last update.


はじめに

PlantUML ではバージョン 1.2017.08 から ER 図に対応しています。1

以前の「 PlantUML で ER 図を描く(似非) - Qiita 」の記事ではクラス図を流用しましたが、こちらの記事はそうではありません。

しかしどうやらクラス図のキーワード "class" に "entity" というエイリアスをかぶせて実現しているようで、クラス図とほとんど同じように書けます。23


カーディナリティ

カーディナリティにはこんな種類があります。


カーディナリティ

    ------   :1

----|| :1 and only 1
----o| :0 or 1
-----{ :many
----|{ :1 or more
----o{ :0 or many


描画結果

test.png

このサンプルでは不要な水平線が入っています。この水平線はクラス図の「プロパティ(フィールド)」と「メソッド」を分ける「区切り線」ですが、hide empty members を最初に書いておくと非表示に出来ます。

参考:http://plantuml.com/class-diagram#Hide


ER 図とは

ER図そのものについては下記のサイトが詳しいです。

ER図 (Entity Relationship Diagram)

また、書き方については下記の書籍が詳しいです。オススメです。

楽々ERDレッスン


サンプル

前回 同様、下記のページからテーブル構成を参考にして、PlantUML で ER 図を書いてみます。

若手プログラマー必読!5分で理解できるER図の書き方5ステップ


サンプル

@startuml

/'
図の中で目立たせたいエンティティに着色するための
色の名前(定数)を定義します。
'/
!define MAIN_ENTITY #E2EFDA-C6E0B4
!define MAIN_ENTITY_2 #FCE4D6-F8CBAD

/' 他の色も、用途が分りやすいように名前をつけます。 '/
!define METAL #F2F2F2-D9D9D9
!define MASTER_MARK_COLOR AAFFAA
!define TRANSACTION_MARK_COLOR FFAA00

/'
デフォルトのスタイルを設定します。
この場合の指定は class です。entity ではエラーになります。
'/
skinparam class {
BackgroundColor METAL
BorderColor Black
ArrowColor Black
}

package "外部データベース" as ext <<Database>> {
entity "顧客マスタ" as customer <<M,MASTER_MARK_COLOR>> {
+ 顧客ID [PK]
--
顧客名
郵便番号
住所
電話番号
FAX
}
}

package "開発対象システム" as target_system {
/'
マスターテーブルを M、トランザクションを T などと安直にしていますが、
チーム内でルールを決めればなんでも良いと思います。交差テーブルは "I" とか。
角丸四角形が描けない代替です。
1文字なら "主" とか "従" とか日本語でも OK だったのが受ける。
'/
entity "注文テーブル" as order <<主,TRANSACTION_MARK_COLOR>> MAIN_ENTITY {
+ 注文ID [PK]
--
# 顧客ID [FK]
注文日時
配送希望日
配送方法
お届け先名
お届け先住所
決済方法
合計金額
消費税額
}

entity "注文明細テーブル" as order_detail <<T,TRANSACTION_MARK_COLOR>> MAIN_ENTITY_2 {
+ 注文ID [PK]
+ 明細番号 [PK]
--
# SKU [FK]
注文数
税抜価格
税込価格
}

entity "SKUマスタ" as sku <<M,MASTER_MARK_COLOR>> {
+ SKU [PK]
--
# 商品ID [FK]
カラー
サイズ
重量
販売単価
仕入単価
}

entity "商品マスタ" as product <<M,MASTER_MARK_COLOR>> {
+ 商品ID [PK]
--
商品名
原産国
# 仕入先ID [FK]
商品カテゴリ
配送必要日数
}

entity "仕入先マスタ" as vendor <<M,MASTER_MARK_COLOR>> {
+ 仕入先ID [PK]
--
仕入れ先名
郵便番号
住所
電話番号
FAX番号
}
}

customer |o-ri-o{ order
order ||-ri-|{ order_detail
order_detail }-do-|| sku
sku }-le-|| product
product }o-le-|| vendor

note bottom of customer : 別プロジェクト\nDB-Linkで参照する

@enduml



結果

newpumlTemplate.png





  1. 初め、1.2017.08 が「2017年の08月にリリースが予定されているバージョン」と勘違いしてしまいました。「2017年の8回目のリリース」のようで、3月に出ています。 こちら の冒頭のコードがエラーになったので未サポートだと思っていました。現在のバージョンは 1.2017.15 です。 



  2. その所為なのかリリースノートにも書かれていないなど、あまりおおっぴらに「ERD サポート!」と言っていませんね。ひょっとして ER 図の需要は少ないのでしょうか。 



  3. デフォルトのスタイルを設定する skinparam 構文では class を指定するなど、名残が見られます。