LoginSignup
23
19

More than 5 years have passed since last update.

PlantUML で ER 図を描く(似非)

Last updated at Posted at 2017-02-25

PlantUMLのクラス図を使って 無理矢理 ER図を作ります。オススメはしません。自分の備忘録・チートシートです。タイトルを「PlantUML で ER 図を描く」にしてしまうと怒られそうなので「似非」を入れました。

追記:2017/07/27

バージョン 1.2017.08 が「2017年の08月にリリースが予定されているバージョン」と勘違いしてしまいました↓。「2017年の8回目のリリース」のようで、既に3月に出ています。

こちら の冒頭のコードがエラーになったので未サポートだと思っていました。投稿の流れを全部読んだら「カーディナリティは最終的に『>o--o<』じゃなくて『}o--o{』で書けるようにします」との記述がありました。サンプルのコードを、そのように直すと、ちゃんと鳥足が描画されました。

現在のバージョンは 1.2017.15 です。

新しい記事に書き直しましたので、そちらをご覧ください。

追記

2017年 8月リリース予定の新しいバージョンで ER 図に対応するようです。
@shida さんコメントありがとうございます。

以下、2017年 2月の投稿です。

はじめに

かつてはA5:SQL Mk-2のER図機能を使っていて、その出力ファイルはテキストだったので、同じく Git などでバージョン管理出来るメリットがあったのですが、Mac 版がないのは厳しく...。

テキストベースでER図を描けるメリットは...

  • ファイルが軽い。
  • Git などでバージョン管理しやすい。
  • (プログラマは往々にしてドキュメントを作るのが嫌いだが)プログラム組んでいるようで楽しく作れる(モチベーションは大事だよね)。

...などがあります。

PlantUMLではER図を(まだ)サポートしていません。テキストベースでは他にもGraphviz(Dot言語)や、そのままズバリERD(BurntSushi/erd)という選択肢があるのですが以下の理由でPlantUMLのクラス図を使っています。

  • メインドライブの容量が枯渇し、あまり多くのツールを入れたくない。
  • セットアップが多いと 布教する時につらい
  • 思ったより良かった。

参考

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

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

サンプル

下記のページからテーブル構成を参考にしました。
若手プログラマー必読!5分で理解できるER図の書き方5ステップ

サンプル
@startuml

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

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

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

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

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

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

customer      "0,1"--ri--"0..*"     order
order           "1"--ri--"1..*"     order_detail
order_detail    "*" -do- "1"        sku
sku             "*"--le--"1"        product
product      "0..*"--le--"1"        vendor


@enduml

結果

plantuml_erd.png

その他

本当はカーディナリティはこんな風に書きたい。

   ------ :1
   -----+ :1
   ----++ :1 and only 1
   ----+0 :0 or 1
   -----{ :many
   ----+{ :1 or more
   ----0{ :0 or many
23
19
1

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
  3. You can use dark theme
What you can do with signing up
23
19