plantuml

テーブルの設計にPlantUMLを使うと便利

概要

  • テーブル設計のラフスケッチをPlantUMLでやったら便利だったので紹介
  • テーブルの関連(1対多, 多対多など)を表現できる
  • entity{}-{package{} の3つをおぼえれば、設計がはかどる

alt

環境

使い方

概要

  • テーブル項目の表現: entity{}
  • テーブル間の関連の表現: -{
  • テーブルのまとまりの表現: package{}

テーブル項目を表現する

テーブル名と登録されているカラムを表現する。
例えば、テーブル名をusers、登録されているカラム名をidnameの場合のPlanUMLは以下の通り。

entity users {
id
name
}

http://www.plantuml.com/plantuml/uml/IyqhoIofL2WjJYqgLgZcoapXoalCJUMg1G00

alt

テーブル間の関連を表現する

2つのテーブル間の関連を表現する。
その前に、復習も含めてchatsテーブルを作成してみる。chatsテーブルはiduser_idmessageカラムを持つのでPlanUMLで表現すると以下のようになる。

entity chats {
id
user_id
message
}

http://www.plantuml.com/plantuml/uml/IyqhoIofL4ZEI2mfLgZcoapXAYrEBOe7qhcfnSM9wQbSjG00

alt

まず、2つのテーブルをならべてみる

entity users {
id
name
}

entity chats {
id
user_id
message
}

http://www.plantuml.com/plantuml/uml/IyqhoIofL2WjJYqgLgZcoapXoalCJUMgvUA2oYHd99P0PK2Aue5qRcfnSM8wK140

alt

chatsテーブルとusersテーブル間が結びついている場合はPlanUMLで表現すると以下のようになる。

entity users {
id
name
}

entity chats {
id
user_id
message
}

users - chats

テーブル名1とテーブル名2が結びついていることを示すには、-をつかいます。具体的には、テーブル名1 - テーブル名2と書きますので上記ではusers - chatsと書きます。

http://www.plantuml.com/plantuml/uml/IyqhoIofL2WjJYqgLgZcoapXoalCJUMgvUA2oYHd99P0PK2Aue5qRcfnSM8wM154dov45G00

alt

さらに、詳細に説明したい場合は{を使います。今回の例ではchatsテーブルにはuser_idがあることからわかるように、usersテーブルとchatsテーブル間は1対多の関係であることがわかります。これを表現するには、users -{ chatsとします。重要なのは{です。

entity users {
id
name
}

entity chats {
id
user_id
message
}

users -{ chats

http://www.plantuml.com/plantuml/uml/SoWkIImgAStDuKhDAyaigLGeBKujAbQevifCuSfBp4tbgkM2oIHd99P0PK2Aue5qRcfnSM8wM154dsurH1cNGsfU2j1K0000

alt

テーブルのまとまりを表現する

テーブル数が2つの場合は不要ですが、3つ以上になると複数のテーブルをまとめて表現するとわかりやすくなる場合があります。
そのとき使うのはpackage{}です。

まず、chatsテーブルと1対1の関係にあるimagesというテーブルを追加します。

entity users {
id
name
}

entity chats {
id
user_id
message
}

entity images {
id
image_url
}

users -{ chats
chats - images

http://www.plantuml.com/plantuml/uml/IyqhoIofL2WjJYqgLgZcoapXoalCJUMgvUA2oYHd99P0PK2Aue5qRcfnSM8wigBCN20VgWhCZYyjoW79GypLhOOOmmKnJ1Ug7W00

alt

ここに、chatsテーブルとimagesテーブルはchat_screenで使われるという意味でグループ化して表現する場合はいかのように書きます。

entity users {
id
name
}

package chat_screen {
entity chats {
id
user_id
message
}

entity images {
id
image_url
}
}

users -{ chats
chats - images

http://www.plantuml.com/plantuml/uml/BSrB3e0W30JGVK_11JWJQN2YH266mi8GxswHhlZqpHIbfVQuBgZY1gMD2cVGItHpF7c7YmUt8B42HO7v-Mb-HeEU6IBgPzHGoleszTz3hvVELQnzVgmYMdNU4Xy0

alt

さらに応用

これまでの情報でも十分ですが、もうちょっと装飾します。

entity users {
id
--
name
}

package chat_screen {
entity chats {
id
user_id
--
message
}

entity images {
id
--
image_url
}
}

users --{ chats
chats - images : has_one

http://www.plantuml.com/plantuml/uml/HSt13SCW30NG-v-21LYWfso2B68bgDYjC1mgbDrRGg8Ul_NVzsALIcsImLfJ_RXcNCnrf1NUGqaO1_2c-AIDNTof1ek5MLs_o7cyoD1XKc4pseQ-Uqb--Rzznj1AnZ5Ayx7tVUvXhlfRFTnE5bxAM5ZN9laB

alt

  • 区切り

区切りを表現するには、--を使います。僕は、idとそれ以外を区別して表現するのに使っています。

entity chats {
id
user_id
--
message
}
  • 関連の線を長くする

関連の線は-を使うと説明しましたが、このハイフンは複数重ねると線を長くして見やすくする事ができます。

users --{ chats
  • 関連にコメントをつける

関連にコメントをつける場合は__ : コメント__を使います。頻度は多くないですが、たまに使います。

chats - images : has_one

これだけあればテーブルのラフスケッチは十分!

所感

PlantUMLがもっと広まるといいですね。