はじめに
こんばんは。
久々のブログです。
前回tblsの記事をあげたところ、開発者の方からこんな意見をもらいました。
おお!お試しいただきありがとうございますー!
— k1LoW (@k1LoW) 2019年7月15日
コメントやリレーションなどは .tbls.yml側で論理的に追加もできますので是非ー https://t.co/zEWAsb3DXC https://t.co/suFk2XigSP
ちなみに以前の記事はこちら
早速やってみます。
本題
1. サンプルテーブル群作成
サンプルで使用するテーブル群は前回と同様ですが、リレーションやらコメントやらをすべて取っ払ったテーブル設計にしてみました。
CREATE TABLE `master_categories` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(256) NOT NULL DEFAULT '', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `master_items` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `category_id` int(11) unsigned NOT NULL, `name` varchar(256) NOT NULL DEFAULT '', `price` int(11) unsigned NOT NULL DEFAULT 0, `delivery_cost` int(11) unsigned NOT NULL DEFAULT 0, `stock` int(11) unsigned NOT NULL DEFAULT 0, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `userId` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `master_tags` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL, `short_name` varchar(64) NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `modified` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (`id`), UNIQUE KEY `name` (`name`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE `master_tag_relations` ( `tag_id` int(11) unsigned NOT NULL, `item_id` int(11) unsigned NOT NULL, `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`tag_id`,`item_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
このテーブル群を、論理値設定で前回のテーブル設計と同じ情報を作り出したいと思います。
2. .tbls.ymlの設定
今回の .tbls.yml の設定は以下。
dsn: mysql://local_user:1qazxcvb@127.0.0.1:3306/local_test_db
docPath: schema
comments:
-
table: master_categories
tableComment: カテゴリ管理テーブル
columnComments:
id: PrimaryKey
name: カテゴリ名
created: 登録日
modified: 更新日
-
table: master_items
tableComment: アイテム管理テーブル
columnComments:
id: PrimaryKey
category_id: カテゴリID
name: アイテム名
price: 価格
delivery_cost: 配送料
stock: 在庫
created: 登録日
modified: 更新日
-
table: master_tags
tableComment: タグ管理テーブル
columnComments:
id: PrimaryKey
name: タグ名
short_name: ふりがな
created: 登録日
modified: 更新日
-
table: master_tag_relations
tableComment: タグ中間テーブル
columnComments:
tag_id: タグID
item_id: アイテムID
created: 登録日
relations:
-
table: master_items
columns:
- category_id
parentTable: master_categories
parentColumns:
- id
def: master_items->master_categories
-
table: master_tag_relations
columns:
- tag_id
parentTable: master_tags
parentColumns:
- id
def: master_tag_relations->master_tags
-
table: master_tag_relations
columns:
- item_id
parentTable: master_items
parentColumns:
- id
def: master_tag_relations->master_items
3. 結果確認
実行してみます。
$ tbls doc schema/schema.png schema/master_categories.png schema/master_items.png schema/master_tag_relations.png schema/master_tags.png schema/README.md schema/master_categories.md schema/master_items.md schema/master_tag_relations.md schema/master_tags.md

問題なく作成されています!
実際の情報を確認してみます。

リレーションは問題なさそうです。

コメントも問題なさそうです!
終わりに
実際に試してみましたが、設定も簡単でとても使いやすかったです。
ymlでテーブルごとに設定できるので、設計的に足りてないものだけ論理値設定してあげるなど柔軟なこともできると思います。
PlantUMLでもoutput出来るようなので試してみました。

問題なく作成されました。が、情報量的にやはり markdown で出力したほうが良さそうかな?と思いました。
現場からは以上です。