write ahead log

ロールフォワード用

テキストでER図を作る記法と処理系を作った

作りました.

実装は正規表現ゴリゴリでアレですが, とりあえず動きます.

github.com

サンプル

こんなのを書いて.

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

こんなのが出ます.

f:id:twinbird_htn:20171109004509p:plain

  • 主キーは区切り線より上です
  • 外部キーは斜体で[FK]がつきます.
  • ユニーク制約付きのカラムは下線がつきます
  • NULL許可項目は赤字になります

この辺, 割と雑に決めたのでそのうち変更した方がいいのかも.
(意見とかPRほしい...)

作った経緯

ER図の作成は業務ではいつもA5SQL-M2を使っています.

これは本当に素晴らしいツールで, 大抵のDBMSに対して大抵の事が出来てしまいます.
(これでフリーなんだから頭が下がります)

しかしまぁ, 私は自宅ではメインLinuxですし(A5SQL-M2もWineで動く様ですが)プレーンテキストでER図を起こしたいという欲は常々ありました.

調べてみると色々ツールはあるみたいですが, 面白そうなので自分で作ってみました.

重視したのは以下です.

  • インストールを楽に
  • テーブルやカラムに論理名を付けたい
  • 日本語に対応
  • dotファイルを生成してくれればそれでいい

インストールは非常に重要です.
面倒なのです.

論理名や日本語対応は私の英語力がしょぼいのでほぼ必須でした.

最後のdotさえ生成すればよいというのは, ほとんどのツールが最終的にはGraphvizを利用しているように見えたからです.

であれば最初からdotファイルへのトランスレータとして作れば十分だろうと思いました.
Graphvizの呼び出しまでやるのは私の感覚としてはやりすぎです.
(レイアウトのアルゴリズムを変えられますし, GraphvizはほとんどのOSで動きます)

参考