運用考えておいた方が混乱しないで済みます〜
DB関連の仕事をしていて、ermasterを使った効率のいい運用方法を考える。
- ermasterのファイルを複数用意する
- 複数人同時にER図を書く
- antでDDL・DB設計書の出力を自動化する
- ermasterでインデックス・ユニークキーを設定しない
- excelVBA等でテストデータ作成の仕組みを用意
ermasterのファイルを複数用意する
これは最近気づきました。。。
複数ファイルに分割して複数人同時作業を可能にする事ができます。
単純な事なのに以外と盲点でした。ER図のお絵かきは1回の作業で結構時間を喰うので、単一ファイルだと先に作業をしている人が終わるまで、そのファイルを触れなくなるという罠。
分割する事で1ファイルに大量のテーブルがあると重くなる現象を回避する事もできます。
ファイル分割は、ファイル毎にテーブルの関連が薄くなるようにするといいです。
このファイルのこのテーブルを直す場合、あのファイルのそのテーブルも修正・・・という状態は避ける。
ermasterのファイル名は「XXX_master.er」等、ファイル名に意味を持たせない方がいいです。
XXX_1.er等、自動採番的なファイル名の方が、各ファイルに色々なテーブルをもたせられます。
ER図というのは大抵徐々に膨らんでいき、ふと気づくと大樹のような図になります。
そうなってしまうと、当初は hoge_master.er というファイル名で問題なかったのに、あれこれ追加されてファイル名と内容が噛みあわなくなる可能性大です。
(例)
- table_1.er
- table_2.er
- master_1.er
- master_2.er
- report.er
ファイル分割にはデメリットもあります。ER図の画像とDB設計書のファイルも分割される点に注意です。
複数人同時にER図を書く
前述の複数ファイル化によって複数人同時作業が可能なので非常に効率がいいです。
但し同時作業はer図作成までに留めておきます。理由は、DDL出力等は責任者のみが行う方が、バージョン管理等で競合が起きにくくなる為です。
特にs2jdbc-gen等を使って、
ermasterでDDL出力 → DBに取り込み → s2jdbc-genでentity・service等を自動生成
とする場合、この作業の間に別の人に割り込まれると、誰の自動生成ソースが最新なのか解らなくなってしまいます。
この問題を回避するため、責任者以外はer図作成までに留めておき、責任者が以降の処理を担当するのが望ましいと思います。
antでDDL・DB設計書の出力を自動化する
antを使って、DDL出力・DB設計書出力・ER図の画象出力が可能です。
複数のerファイルに対してそれらを設定し、常に全ファイル出力する形にする。
手動出力だと、古いファイルで新しいファイルを上書き、等というつまらないミスも起きるので、常に全ファイルを対象に自動出力できるようbuild.xmlを書いておく。
antなので、圧縮したりサーバにscpできたり、結構色々できてしまうので便利です。
例えば、html形式のDB設計書を出力→scpで開発サーバのhtdocs以下に配置、等とすれば、ブラウザからDB設計書が閲覧できちゃいます。
ermasterでインデックス・ユニークキーを設定しない
私はermasterの機能を使ってインデックス・ユニークキーを設定しません。
ermaster上だとそれらキーの設定がなされている事を見つけ難いためです。
alter_table.sqlを作っておき、ermasterで出力したDDLを実行した後に、alter_table.sqlを実行する。
excelVBA等でテストデータ作成の仕組みを用意
vbaでなくてもよいですが、テスターがデータを作れる事も考慮し、excel+VBAで作ると便利です。
vbaであればWindowsのバッチファイルからも実行可能です。
つまり、
- DDL・DB設計書出力。
- 出力した複数のDDL取り込むバッチを実行。(mysql -uroot -Dhoge < ddl.sql的なもの)
- alter_table.sqlを実行。
- s2jdbc-gen-build.xmlでgen-entityタスク等を実行。(s2jdbc-genで自動生成するファイルをカスタマイズする - 文系プログラマによるTIPSブログ)
- テストデータ出力バッチファイル実行(vbaを実行)。
- テストデータ取り込みバッチ実行(load data等を実行するsqlを実行)。
という面倒で短調な一連の作業を、antのビルド一発で済ます事も可能です。
これはローカルの場合なので、サーバの場合はバッチをシェルスクリプトに置き換えるだけかと思います。
色々改善点はありますが、もっと効率良く、楽できるようにフローを改善したいですね。