先日の仕事中にちょっとした思いつきで, データベースのテーブル構造を可視化させる方法について考えを巡らしており, 実際にそれっぽいものがアウトプットできた(図1)ので, その方法なども含めて紹介することに. 今回, 可視化させたのは, データベース上のテーブルと, テーブル間のリレーション構造でこれを, グラフを用いて可視化させています. ここで言うグラフとは, 円グラフとか棒グラフ, 折れ線グラフといった類いのものではなく, 離散数学などで定義されている無向グラフとか有向グラフ, ネットワーク・グラフなどに分類されるタイプのグラフです.
図1
使用環境
- データベース・ソフト
- SQL Server 2005, SQL Server 2008 R2
- クライアントOS
- Windows 7, Cent OS(さくらVPS 512プラン), その他多数
- 使用ソフトウェア
- Graphviz, SQL Management Studio
Graphvizとは何か
上の使用ソフトウェアであるGraphvizについては, 知っている人も少ないかと思いますので簡単に紹介します. Graphvizは, AT&T研究所が開発したオープンソースのパッケージであり, DOT言語と呼ばれるスクリプトをもとにグラフを描画するソフトウェアです. 詳細やインストール方法は, Graphvizの公式ページ(http://graphviz.org/)などをご覧下さい.
可視化の手順
テーブル一覧, リレーション一覧の取得
まずは, データベースSQL Serverから, 可視化するテーブルの一覧とテーブル間のリレーションの一覧を取得する必要があります. このテーブルの一覧については, sysobjectsなどを参照すればすぐに手に入ります. リレーションについては少しやっかいなのですが, 少しググってみるとhttp://ja.w3support.net/index.php?db=so&id=925738のページが見つかり, このクエリを参考にすれば簡単に手に入ります.
グラフデータをDOT言語で記述
ここまでの段階で, グラフの元になるテーブルの一覧とテーブル間のリレーションの一覧が手に入ります. これをDOT言語で記述する必要があるのですが, これもまとめてSQLのクエリ内で行うことにします. DOT言語は非常に単純な言語なので, 難しく感じることはほとんど何もないかと思います. ということで, テーブル一覧とリレーション一覧を取得し, DOT言語を吐き出すSQLのクエリを下のリンクからダウンロードできるようにしておきました. 厳密には, このクエリでは, DOT言語のスクリプトをSELECTで吐き出しているだけなので, 出力結果をコピーしテキストファイルに貼付ける作業が必要になります.
Graphvizを実行
Graphvizをインストールしたマシンのコマンドプロンプト(Linux/UNIX系ならターミナル)から,
dot -Tgif (DOT言語で書かれたファイルのパス) -o sample.gif
または
dot -Tgif (DOT言語で書かれたファイルのパス) > sample.gif
とすることで, dotと呼ばれる描画方式で, グラフを生成し, sample.gifというファイル名で保存されます. dotという描画方式以外にも, neatoやtwopi, circoといった描画方式もあるので, 作成された画像の配置が気に入らなければ, 他の描画方式を試してみるのもありかと思います. 個人的には, dotよりもneatoやtwopiで出力した結果が気に入っています.
感想
仕事で使用しているシステムのデータベース(テーブル数が約600個?)を全て可視化しようとすると、図1のように、カオス状態になり、読むことができないのですが、対象とするテーブル数を目的別などで削ったりすることで、グラフは簡素化され、テーブル構成をパッと掴むのが容易になるかと思います。
SQLスクリプト
参考リンク
- http://www.graphviz.org/
- http://homepage3.nifty.com/kaku-chan/graphviz/index.html
- http://www.drk7.jp/MT/archives/001526.html
関連記事