end0tknr's kipple - 新web写経開発

http://d.hatena.ne.jp/end0tknr/ から移転します

mysqlのWorkbenchで実DBからER図を自動生成

http://d.hatena.ne.jp/end0tknr/20100603/1275557645

以前、SQL::Translator に関するエントリを書いていますが、ある程度の規模のDBでは、テーブル間の関係をER図等で把握したいケースがあると思います。
私の周りでは、「1) visioでER図, excelでテーブル定義書」を作成し、更に「2)エディタでDDL(sql)」を作成しているので、「この1と2をまとめて作業できないかなぁ」なんて思っていたら、mysql.comが出しているんですね。

http://www-jp.mysql.com/products/workbench/
機能一覧 http://www-jp.mysql.com/products/workbench/features.html

install (.netが必要かも)

先程のurlからダウンロードして、インストーラを実行するだけです。
※私の場合、mysql-workbench-gpl-5.2.33b-win32.msi を使用しましたが、「.NET Framework 4 Client Profile」も必要のようです。

実データベースからER図を自動生成

まず、サンプルとして次のようなDDLを用意し、mysqlに作成しました。
(後述のER図でリレーションを表示する為、私には珍しく、FOREIGN KEYを指定してます)

CREATE DATABASE bookmark CHARACTER SET utf8;

grant all privileges on bookmark.* to bmadm@'%' identified by 'ないしょ';

CREATE TABLE user (
id              varchar(32)     comment 'user id',
name            varchar(32)     comment '表示名',
update_time     datetime        default '0000-00-00 00:00:00',
primary key(id)
)
COMMENT='blog記事本体';

CREATE TABLE url (
id              int AUTO_INCREMENT,
url             varchar(200) unique not null,
title           varchar(50),
update_time     datetime        default '0000-00-00 00:00:00',
primary key(id)
)
COMMENT='全userが共有するURL';

CREATE TABLE bookmark (
user_id         varchar(32),
url_id          int,
user_comment    text,
update_time     datetime        default '0000-00-00 00:00:00',
primary key(user_id,url_id),
FOREIGN KEY (user_id) REFERENCES user(id),
FOREIGN KEY (url_id)  REFERENCES url(id)
)
COMMENT='userが登録したbookmark';

次にWorkbenchの「ホーム画面?」にある「Create EER Model from Existing Database」を選択し、接続先のhostnameやdbname、user等を入力後、実行すると、きれいなER図が作成されます。インポート直後のER図は当然シンプルですが、まるで、visioを使うかのようにテキストやグルーピング、画像等のコメントも追加できるようです。

すごい

実DBとの差分出力

メニューのDatabase -> Generate Catalog Diff Report を選択すると、次のような差分出力もできます。

※更にWorkbenchの変更内容を実DBに反映することもできるようです。

+--------------------------------------------+
| Catalog Diff Report                        |
+--------------------------------------------+
Table `bookmark`.`user` was modified
Table `bookmark`.`user` was modified
  columns:
  - added column create_time of type DATETIME
  __
----------------------------------------------
End of MySQL Workbench Report

保存ファイル(mwb)はzip形式

Workbenchの編集内容は、mwbというzip形式で保存されます(下記)。その他、sql形式でのexportも可能です。

mwbファイルの内容

@db
  data.db
document.mwb.xml
lock

DBドキュメント出力は商用版のみなので、そこはSQL::Translator を利用

DBドキュメント出力は商用版でのみ提供されているので、テーブル定義書を仕様書として出力する部分はSQL::Translatorを利用してよいと思います。

http://d.hatena.ne.jp/end0tknr/20100603/1275557645

使用するDBが専らmysqlであれば、Workbenchっていいかも