作りました.
実装は正規表現ゴリゴリでアレですが, とりあえず動きます.
サンプル
こんなのを書いて.
system.erdot
// estimate print system # Tables // master customers (顧客) id (ID) INTEGER PRIMARY KEY name (顧客名) VARCHAR(100) NOT NULL offices (自社事業所) id (ID) INTEGER PRIMARY KEY name (事業所名) VARCHAR(100) NOT NULL address1 (住所1) VARCHAR(100) NOT NULL address2 (住所2) VARCHAR(100) NOT NULL tel (電話番号) VARCHAR(30) NOT NULL products (商品) id (ID) INTEGER PRIMARY KEY name (品名) VARCHAR(100) NOT NULL price (単価) DECIMAL(8) NOT NULL employees (従業員) id (ID) INTEGER PRIMARY KEY last_name (姓) VARCHAR(30) NOT NULL first_name (姓) VARCHAR(30) NOT NULL belong_office_id (所属事業所ID) INTEGER NOT NULL // transaction estimates (見積) id (ID) INTEGER PRIMARY KEY title (件名) VARCHAR(100) NOT NULL UNIQUE customer_id (顧客ID) INTEGER NOT NULL pic_employees_id (担当従業員ID) INTEGER NOT NULL issued_date (発行日) DATE due_date (納期) DATE NOT NULL delivery_location (納入場所) VARCHAR(50) NOT NULL payment_term (支払条件) VARCHAR(50) NOT NULL effective_date (見積有効期限) VARCHAR(50) NOT NULL remarks (摘要) VARCHAR(1000) NOT NULL estimates_detail (見積明細) estimate_id (見積ID) INTEGER PRIMARY KEY display_no (表示NO) INTEGER PRIMARY KEY product_id (商品ID) INTEGER NOT NULL quantity (数量) DECIMAL(5) NOT NULL # Relations employees.belong_office_id *-1 offices.id estimates.pic_employees_id *-1 employees.id estimates.customer_id *-1 customers.id estimates_detail.estimate_id *-1 estimates.id estimates_detail.product_id *-1 products.id
こんな感じでコマンドを入れると.
$ erdot system.erdot | dot -Tpng -o output.png
こんなのが出ます.
- 主キーは区切り線より上です
- 外部キーは斜体で[FK]がつきます.
- ユニーク制約付きのカラムは下線がつきます
- NULL許可項目は赤字になります
この辺, 割と雑に決めたのでそのうち変更した方がいいのかも.
(意見とかPRほしい...)
作った経緯
ER図の作成は業務ではいつもA5SQL-M2を使っています.
これは本当に素晴らしいツールで, 大抵のDBMSに対して大抵の事が出来てしまいます.
(これでフリーなんだから頭が下がります)
しかしまぁ, 私は自宅ではメインLinuxですし(A5SQL-M2もWineで動く様ですが)プレーンテキストでER図を起こしたいという欲は常々ありました.
調べてみると色々ツールはあるみたいですが, 面白そうなので自分で作ってみました.
重視したのは以下です.
- インストールを楽に
- テーブルやカラムに論理名を付けたい
- 日本語に対応
- dotファイルを生成してくれればそれでいい
インストールは非常に重要です.
面倒なのです.
論理名や日本語対応は私の英語力がしょぼいのでほぼ必須でした.
最後のdotさえ生成すればよいというのは, ほとんどのツールが最終的にはGraphvizを利用しているように見えたからです.
であれば最初からdotファイルへのトランスレータとして作れば十分だろうと思いました.
Graphvizの呼び出しまでやるのは私の感覚としてはやりすぎです.
(レイアウトのアルゴリズムを変えられますし, GraphvizはほとんどのOSで動きます)
参考
-
- オンラインで正規表現を試せるテスター.逐次試せるのが正規表現力の低い僕にとっては最高だった.
-
- Graphvizで色々な図を作成する例が記載された資料.ER図の項が参考になった.
-
- いつもお世話になっております.な状態のA5:SQL Mk-2のページ.
- ER図の書き方が親切だったのでカーディナリティの図をどんなものにするかで参考にさせてもらいました.
-
- レイアウトが気に食わなくなったらレイアウトアルゴリズムをGraphviz側で変えればよいと気づいた.