A5:SQL Mk-2(a5m2)はSQLクライアントとして知られていますが、ERエディタが最初から一緒に入っています。クエリを実行していたウィンドウのまま、既存データベースの構造をER図として取り出し、新しいスキーマを設計し、資料に貼る画像まで作れます。
A5:SQL Mk-2の使い方をER図に絞ります。既存DBはリバース生成で読み込み、新しい設計は空のER図から始めます。画像出力、DDL作成、テーブル定義書まで同じソフトで続けられ、メニュー名は画面の表示に合わせています。
A5:SQL Mk-2のER図まわりでできること
a5m2のERエディタが受け持つ作業は、次の三つです。
- 既存DBからER図を取り出す。 接続済みのデータベースからテーブルを選び、ダイアグラムを自動生成します。
- 新しいスキーマを設計する。 空のエディタにエンティティとリレーションシップを描き、その設計をCREATE TABLE文に変換します。
- 資料用に出力する。 仕上げたER図を画像として書き出し、テーブル定義書をExcelやCSVで作成します。
三つが同じソフトの中にあるので、接続、ER図、DDL、定義書までウィンドウを移らずに続けて処理できます。ER図を描けるフリーソフトを探している段階なら、まずこの一本で足りるかどうかを確かめてみてください。
準備:インストールとデータベース接続
A5:SQL Mk-2は公式サイトで配布されているWindows用のフリーソフトです。ダウンロードして展開すればすぐに使え、ER図の作成も追加インストールなしで始められます。
Oracle・PostgreSQL・MySQL・SQLiteには専用の接続方式があり、SQL ServerはOLE DB Providerで接続します。そのほかの互換データベースにはOLE DBまたはODBCドライバを利用できます。機能の対応範囲はDBMSによって異なります。既存DBからER図を取り出すつもりなら先に接続を一つ作っておき、設計から始めるなら接続なしで空のER図だけ開いても構いません。
接続を作ると、左のデータベースツリーにスキーマとテーブルが並びます。このツリーがリバース生成の出発点になります。
既存データベースからER図をリバース生成する
すでに動いているDBがあるなら、ER図は描くのではなく読み込みます。a5m2でER図を自動生成する手順はこうです。
- メニューから [データベース(D)] - [ER図のリバース生成(Y)...] を選びます。データベースツリーで接続を右クリックしても同じ項目が出ます。
- ダイアログにその接続のテーブル一覧が表示されます。すべて選んでも、いま見たいドメインのテーブルだけを選んでも構いません。
- 「リバースER生成」 を押すとER図が作られます。テーブルとカラム、参照のリレーションシップまで、読み取ったままの状態で描かれます。
引き継いだDBの構造を最初に把握するときは、この方法がいちばん速いです。テーブルが数百あるスキーマなら、一度に全部を呼び出すのではなく、会員・注文・精算のようにドメイン単位で分けて数枚作っておくほうが読みやすくなります。
リバース生成の直後に確認したい三つ
生成が終わったら、次の三つを確認しておくとよいです。リレーションシップの線が実際の外部キーと合っているか、インデックスが一緒に入ってきたか、データ型が元と同じかです。公式ヘルプも、データベースの種類によってはこのあたりが正しく生成されない可能性があると案内しているので、初めて扱うDBMSなら一度確認してから進めるほうが安全です。
線の端に付いた記号の読み方に自信がなければ、ER図の記号まとめを横に置いておくとよいです。カラスの足の記号は四つ覚えれば、どのER図でも関係を読み取れます。
ER図を新規に作成する
設計から始めるときは [ファイル(F)] - [新規] - [新規ER図] で空のエディタを開きます。ここでは掲示板を例に、会員・投稿・コメントの三つのテーブルを描いていきます。
エンティティを追加する。 ツールバーの(エンティティ追加モード)ボタンを押してから、エディタの好きな位置をクリックすると、空のエンティティが一つ置かれます。エンティティをダブルクリックするとプロパティ画面が開くので、ここでエンティティの論理名と物理名を入力します。会員テーブルなら論理名は「会員」、物理名はmembersになります。
フィールドを入力する。 同じプロパティ画面で、各フィールドの論理名・物理名・データ型・必須設定・キー情報・デフォルト式を指定し、インデックス情報も一緒に入れます。物理名として入力した名前がそのまま実際のカラム名になるので、この段階で命名規則を揃えておくと、DDLを作ったあとに直す手間が減ります。
リレーションシップをつなぐ。 (リレーション追加モード)ボタンを押し、親エンティティを先に、続けて子エンティティをクリックすると線が引かれます。掲示板なら会員が親、投稿が子です。配置したあとに親と子は変更できないので、向きを決めてからクリックするほうが確実です。どちらが親か迷ったときは、カーディナリティが1(あるいは0または1)になるほうが親だと考えるとだいたい合います。
カーディナリティを指定する。 リレーションシップをダブルクリックすると、プロパティ画面で両端の個数を選べます。0または1、1、0以上、1以上の四つで、会員と投稿なら会員側が1、投稿側が0以上です。記法はIE記法とIDEF1Xの両方に対応しているので、チームで使っているほうに合わせれば大丈夫です。
そのほかのオブジェクト。 同じエンティティを二度クリックすると自己参照のリレーションシップになります。コメントの親コメントのように、自分のテーブルを参照する構造を描くときに使います。ビューやサブタイプも別のオブジェクトとして置けて、サブタイプの子には親エンティティの主キーが自動で追加されます。
インデックスとデータ型を先に整えておく
エンティティのプロパティ画面には、フィールド一覧と一緒にインデックス情報を入れる欄があります。検索条件によく使うカラムは設計の段階でインデックスを書いておくと、DDL作成のときにCREATE INDEXまで一度に出てきます。掲示板なら、投稿の作成者と作成日時、コメントの投稿IDがこれにあたります。
データ型を毎回入力する代わりに、型ドメインを使う方法もあります。メールアドレスはVARCHAR(255)、金額はDECIMAL(15,2)のようによく使う形をドメインとして定義しておき、各フィールドではそこから選ぶやり方です。テーブルが増えても同じ項目が別々の桁数で散らばりにくくなります。命名規則とデータ型の規則を先に決めてから描き始めると、あとで定義書を作るときにも楽になります。
ER図を見やすく整える
エンティティはドラッグで移動でき、リレーションシップの線は親と子の位置関係で自動的に決まります。線がほかのエンティティの上を通って読みにくいときは、線をドラッグして位置を微調整できます。
図の上に説明を残したいときはコメントオブジェクトを使います。データベースには反映されないメモなので、このテーブルはバッチからのみ使用、といった補足を図の中に書いておくと、画像として書き出したときにその文脈まで一緒に伝わります。線分やシェイプ、画像も同じ手順で置けるので、ドメインの区切り線を引いたりタイトルを付けたりする程度はエディタの中で片づきます。
カラム数の多いテーブルが画面を占領してしまう場合は、[ER図(E)] - [ER図プロパティ(P)...] でエンティティの最大表示行数を調整します。既定値が1000なのですべてのカラムが描画されますが、20くらいまで下げるとカラムは20個までの表示になり、残りは省略の印に変わります。カラムが数十あるスキーマの全体像を見るときは、この設定ひとつで読みやすさが大きく変わります。同じ画面でプロジェクト名、対象RDBMS、フォント名とサイズ、各ページのヘッダとフッタも指定できます。
IE記法とIDEF1Xのどちらで描くか
a5m2はリレーションシップの記号をIE記法とIDEF1Xの二通りで描けます。どちらで描いても図に入る情報は同じで、変わるのは記号の形です。
IE記法は線の端にカラスの足の形で個数を表す方式で、Webサービスの設計やオンラインのツールでいちばんよく見る形です。初めてER図を描くチームならこちらが無難です。IDEF1Xは官公庁や大規模なSIの成果物で表記が指定されることがあるので、提出先の様式が決まっているならその規格に合わせます。
一つのプロジェクトの中では、どちらかに統一しておくほうがよいです。二つの記法が混ざると、同じ形の線が資料ごとに違う意味で読まれてしまいます。それぞれの記号が何を表すかはER図の記号まとめに記号ごとに整理してあります。
ER図を画像として出力する
a5m2で仕上げたER図は [編集(E)] - [ビットマップの生成(B)...] で書き出します。ビットマップのサイズと色数を選んでOKを押すとクリップボードにコピーされるので、ExcelやWordにそのまま貼り付けられます。設計書の中に構造の図を一枚入れたいときに使う方法です。
貼り付けた図を画像ファイルとして残したい場合は、文書側で図として保存します。社内WikiやIssueに載せるときも同じ手順で大丈夫です。
作業したER図そのものはER図ファイルとして保存されます。配置とプロパティがすべてこのファイルに入るので、続きを作業する予定があるならプロジェクトのフォルダにソースと一緒に置いておくとよいです。
印刷用に整えるとき
会議に紙で持っていくなら、ER図プロパティで各ページのヘッダとフッタを先に指定しておきます。プロジェクト名と作成者、ページ番号が各ページに入っていれば、複数枚に分かれても順番で迷いません。フォントサイズの既定値は6ポイントで、画面では十分でも印刷すると小さめに出るので、配布用に出すときは少し大きくしておくと読みやすくなります。
設計からDDLへ:CREATE TABLE文を作る
描いたER図は、そのまま実行できるSQLになります。[ER図(E)] - [DDLを作成する(D)...] を選び、対象のRDBMSの種類とオプションを決めて「DDL生成」を押すと、SQLエディタに結果が開きます。ここでデータベースを指定し、全て実行するモードで実行すれば実際のテーブルが作られます。
上で描いた掲示板の例は、こういう形になります。
CREATE TABLE members (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR(255) NOT NULL UNIQUE COMMENT 'メールアドレス',
nickname VARCHAR(50) NOT NULL COMMENT 'ニックネーム',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
) COMMENT='会員';
CREATE TABLE posts (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
member_id BIGINT NOT NULL COMMENT '作成者',
title VARCHAR(200) NOT NULL COMMENT 'タイトル',
content TEXT NULL COMMENT '本文',
created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP,
CONSTRAINT fk_posts_member FOREIGN KEY (member_id) REFERENCES members (id)
) COMMENT='投稿';
CREATE TABLE comments (
id BIGINT AUTO_INCREMENT PRIMARY KEY,
post_id BIGINT NOT NULL COMMENT '投稿',
member_id BIGINT NOT NULL COMMENT '作成者',
parent_id BIGINT NULL COMMENT '親コメント',
content TEXT NOT NULL,
CONSTRAINT fk_comments_post FOREIGN KEY (post_id) REFERENCES posts (id),
CONSTRAINT fk_comments_member FOREIGN KEY (member_id) REFERENCES members (id),
CONSTRAINT fk_comments_parent FOREIGN KEY (parent_id) REFERENCES comments (id)
) COMMENT='コメント';
対象のRDBMSを変えて生成し直すこともできます。同じ設計を開発用のMySQLと納品用のOracleの両方で出す必要があるとき、図を描き直さずにオプションだけ変えれば済みます。
テーブル定義書をExcel・CSVで出力する
テーブル定義書はERエディタではなく、テーブルメニュー側にあります。[テーブル(T)] - [テーブル定義書作成(Z)...] はExcel形式で出力し、この機能を使うにはMicrosoft Excel 2000以降が必要です。Excelを使わずデータだけ欲しい場合は [テーブル(T)] - [テーブル定義CSV出力(V)...] でCSVとして取り出し、決められた様式に移し替えます。
定義書に何の項目を入れるかから決める必要があるなら、テーブル定義書の作り方にカラム名・データ型・必須・デフォルト・説明まで、実務で使う構成をまとめてあります。
覚えておくと便利なこと
ER図をデータベースに割り当てておく。 作成したER図を接続に割り当てると、データベースツリーの各オブジェクトの右に論理名が表示されます。テーブルのコメントよりER図のほうが優先されるので、物理名だけでは何のテーブルか分かりにくいスキーマでは特に助かります。クエリを書きながらテーブル名を探してスキーマをたどる時間が減ります。
開発DBと本番DBを見比べる。 二つの接続をそれぞれリバース生成してER図を二枚作っておくと、構造の差を目で早く確認できます。リリース前にスキーマがずれていないかを見るときに便利です。
ドメインごとに分けて管理する。 スキーマ全体を一枚に詰め込むと、画面でも紙でも読みにくくなります。会員・注文・精算のようにドメイン単位で図を分けておき、ドメインをまたぐリレーションシップにはコメントで補足を添えておくと管理が楽になります。
作業パターン別の進め方
ここまでの機能を実際の業務の流れに合わせると、だいたい三つの形になります。
引き継いだDBを把握するとき。 接続を作り、ドメインごとにリバース生成をかけてER図を数枚作ります。各図にコメントで担当機能を書いておき、エンティティの最大表示行数を20程度に下げて全体構造が一目で入るようにします。ここまでで、どのテーブルが中心でどこにデータが集まるのかが図として見えてきます。
新しい機能を設計するとき。 空のER図にエンティティとリレーションシップを描き、型ドメインで形式を揃えてから、DDL作成でCREATE TABLE文を取り出して開発DBに適用します。レビューの場にはビットマップで出した図を一枚置いておくと話が早くなります。設計の順番自体にまだ慣れていないなら、ER図の書き方にエンティティとリレーションを決める順序が例と一緒にあります。
検収や納品の資料を作るとき。 リバース生成で現在の構造をそのまま読み込んでから、テーブル定義書をExcelで出力し、ER図は画像として貼り付けます。定義書と図が同じ時点のDBから出ていることが大事なので、スキーマが変わったら二つのファイルを一緒に作り直すのが安全です。
よくある質問
A5:SQL Mk-2は無料で使えますか?
無料で使えます。公式サイトから配布されているWindows用のフリーソフトで、ERエディタも最初から入っています。リバース生成もDDL作成も画像出力も、追加費用なしでそのまま使えます。
どのデータベースに接続できますか?
Oracle・PostgreSQL・MySQL・SQLiteには専用の接続方式があり、SQL ServerはOLE DB Providerで接続します。そのほかの互換データベースにはOLE DBまたはODBCドライバを利用できます。機能の対応範囲はDBMSによって異なります。
既存のデータベースからER図を自動生成できますか?
できます。メニューの[データベース(D)]-[ER図のリバース生成(Y)...]を選ぶとテーブルの一覧が表示され、必要なテーブルを選んで「リバースER生成」を押すとER図が作られます。データベースツリーで接続を右クリックしても同じメニューが出ます。
作成したER図を画像として保存するには?
メニューの[編集(E)]-[ビットマップの生成(B)...]を選び、サイズと色数を決めるとクリップボードにコピーされます。ExcelやWordにそのまま貼り付けられますし、画像ファイルとして残したい場合は貼り付けたあとに図として保存します。
既存DBを扱う場合は、接続、リバース生成、配置の調整、画像出力の順です。新規設計ではER図にエンティティとリレーションシップを描いてDDLを作成し、必要な定義書をテーブルメニューからExcelまたはCSVで出力します。
DDLをすでに取り出している状態なら、WorksCove ERDに貼り付けてダイアグラムとテーブル定義書を作る方法もあります。貼り付けから結果まではSQLからER図を自動生成するに画面付きでまとめてあり、ほかのツールを使っているならDBeaverとMySQL Workbenchの案内も同じ構成で用意しています。