はじめに
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
描画結果
このサンプルでは不要な水平線が入っています。この水平線はクラス図の「プロパティ(フィールド)」と「メソッド」を分ける「区切り線」ですが、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