uml
plantuml
erd

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

はじめに

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 を指定するなど、名残が見られます。