Help us understand the problem. What is going on with this article?

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした