ちょっと気が早い気がしますが、そろそろ年度末に向けてさまざまな準備を考えはじめる時期だと思います。異動や入退社に備えて、ちゃんとドキュメントを整えていますか。
特にデータベースを使用しているプログラムに関しては、データベース内の情報を正しく活用するためにはどのようなデータ構造があって、どのようなデータが入力されているのかを正しく理解する必要があります。正しく理解ができていないと新規にプログラムを適切に追加したり、今までのプログラムを適切に修正することが難しくなります。
また、CREATE TABLE文やCREATE INDEX文などといった、DDL(Data Definition Language)と呼ばれるデータ構造を定義するために使われるSQLが残っているから大丈夫、という方もいらっしゃると思いますが、普段触っている環境ではなく、別のデータベースをコードやDDLを眺めながら、関連を考えて読み解いていくのは非常に難しいです。
そこで今回はMySQL WorkbenchというMySQL公式のツールを使い、ER図と呼ばれるデータベースの構造と関連を表す図を、データベースにある情報から出力してみようと思います。
デモンストレーション環境について
今回は「第5回 Dockerで複数バージョンのMySQLを開発環境に用意する」で使用したMySQLのDockerイメージの最新版(2016/1/12現在5.7.10)を使い、新たにテーブルを作成していきます。
以上のようなSQLを用意しました。イメージ的には、ユーザが複数人いるblogアプリケーションのデータベースのテーブルのモックです。
Dockerのインスタンス上に建てたMySQLサーバに対して用意したSQLを実行します。実際に試す場合には、hostのIPアドレス(-hオプション)やポート番号(-Pオプション)の値を必要に応じて変更してから試してみてください。
上記の結果を確認してみます。
次に、データベースへの登録が成功したかを確認します。
以上のような結果が得られれば問題ありません。うまくいかなかった場合は、一度blogのdatabaseをdropしてから再度登録を行ってみてください。
MySQL Workbenchのインストール
ここではMySQL Workbenchのインストールを進めていきます。まず最初にMySQL Workbenchのダウンロードページから使用しているOSのバイナリをダウンロードします。
ここで選択するプラットフォームはMySQLの動いているサーバのプラットフォームではなく、MySQL Workbenchを動かす環境と同じものをダウンロードしてください。大抵の場合は自動で選択されていると思いますので、そのままダウンロードしてください。
Windowsの場合は、MySQL Installerを利用してインストールする方法とMySQL Workbenchを利用してインストールする方法の2種類の方法がありますが、どちらの場合でもインストールするにはVisual Studio 2013 の Visual C++ 再頒布可能パッケージが必要になるのでご注意ください。
Macの場合はダウンロードした.dmgファイルを展開して、表示されるMySQL Workbenchをアプリケーションディレクトリ配下に配置するだけでインストールが完了します。
MySQL Workbenchをデータベースに接続する
MySQL Workbenchを使うにあたっての設定を行いましょう。MySQL WorkbenchではER図をSQLや直接記述することもできますが、今回は既存のデータベースからの出力を行いたいので、まず最初に既存のデータベースに接続する方法を紹介します。
MySQL Workbenchを起動した時の画面は図1のようになります。
大きく分けて3つの画面構成になっていることがわかると思います。
左上のMySQL Connections(図2)は接続先の候補を示しています。今後新しくデータベースへの接続方法を登録した場合はここに表示されます。
左下のModels(図3)は作成したモデルが表示されます。デフォルト状態ではsakilla_fullというサンプルモデルが表示されています。
右のShortcuts(図4)には各種ツールやフォーラムへのリンクが表示されています。
それでは接続をしてみましょう。MySQL Connectionsの右隣にある+ボタンをクリックします。すると図5のようなウィンドウが表示されます。
そこに今回接続するDockerインスタンスの設定と揃えて入力します。各項目への入力するものは以下の表のようになります。
項目名 | 入力するもの |
Connection Name | MySQL Connectionsに表示される接続先の名前 |
Hostname | 接続先したいMySQLが動いているサーバの情報 |
Port | MySQLが待ち受けているPort番号 |
Username | MySQLで使用できるユーザ名 |
Password | MySQLのユーザに対応するパスワード |
Default Schema | 接続した際にデフォルトで使用するデータベース(空にしておいて後で指定することもできます) |
SSLやAdvancedは環境に応じて必要な場合は設定してください。
その後Test Connectionをしてみましょう。
ここで図7のような画面が表示されれば問題なく接続ができます。OKを押して設定を保存をしましょう。
もう一度起動画面に戻ってくると、MySQL Connectionsに新しくmichibushinという接続プロファイルが作成されていることがわかると思います(図8)。
これでデータベースに接続できるようになりました。
ER図を出力する
それでは今まで作成したプロファイルを元に、ER図を出力してみましょう。Modelsの「 〉」ボタンをクリックし、Create EER Models from Databaseをクリックしましょう(図9)。
次にReverse Engineer Databaseというウィンドウが表示されるので、Stored Connectionから先ほど設定した接続方法を選択して、Continueをクリックします。今回はmichibushinと名前を付けたので、michibushinを選択します(図10)。
その後接続が始まり、問題なく接続ができることが確認されます。
接続に問題がなければ、Continueを押して次へと進んでいきます。
次に、どのデータベースの情報を取得するか確認されるので、今回作成したblogデータベースを選択し、continueを押してどんどん進めていきます。
図13のようなER図が得られました。このように既存のデータベースからER図を取得することができました。
また、今回はER図では自動的に関連が定義されていますが、外部キーを定義していない場合にはこれらの関連性は自分で定義する必要があるのでご注意ください。
まとめ
今回はMySQL Workbenchを使ってER図を出力してみました。使っている言語やフレームワークによっては、コード上の情報からデータの関連性を補完しより詳細なER図を出力してくれるものも一部あります。また、MySQL WorkbenchはMySQLクライアントとしての機能も充実しているので、MySQLに関わる業務のほとんどを行うことができます。今回はER図を出力するだけでしたが、それ以外にも有用なツールが揃っているので今後紹介していく予定です。
また、MySQL Workbenchを使用すると、言語やフレームワークによらず、ER図を作成することができます。MySQLを使用している場合は、さらにER図を自動生成することが可能なのでとても便利です。ドキュメントの作成を行う際にぜひ一度試してみてください。