MySQL道普請便り

第11回MySQL Workbenchを使って既存のデータベースからER図を作成する

ちょっと気が早い気がしますが、そろそろ年度末に向けてさまざまな準備を考えはじめる時期だと思います。異動や入退社に備えて、ちゃんとドキュメントを整えていますか。

特にデータベースを使用しているプログラムに関しては、データベース内の情報を正しく活用するためにはどのようなデータ構造があって、どのようなデータが入力されているのかを正しく理解する必要があります。正しく理解ができていないと新規にプログラムを適切に追加したり、今までのプログラムを適切に修正することが難しくなります。

また、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)を使い、新たにテーブルを作成していきます。

$ cat test.sql
CREATE DATABASE `blog`;

USE `blog`;

CREATE TABLE `users`(
        `user_id` int,
        `e_mail` text,
   `password` text,
   PRIMARY KEY(`user_id`)
)engine=InnoDB;

CREATE TABLE `blogs`(
        `user_id` int,
    `blog_id` int,
    `body` text,
    CONSTRAINT `fk_user_id`
    FOREIGN KEY (`user_id`)
    REFERENCES `users`(`user_id`)
)engine=InnoDB;

以上のようなSQLを用意しました。イメージ的には、ユーザが複数人いるblogアプリケーションのデータベースのテーブルのモックです。

Dockerのインスタンス上に建てたMySQLサーバに対して用意したSQLを実行します。実際に試す場合には、hostのIPアドレス(-hオプション)やポート番号(-Pオプション)の値を必要に応じて変更してから試してみてください。

$ mysql  -uroot -p -h 192.168.99.100 -P 32773 < test.sql
Enter password:

上記の結果を確認してみます。

次に、データベースへの登録が成功したかを確認します。

$ mysql -uroot -p -h 192.168.99.100 -P 32773
Enter password:
 ―中略―
mysql> SHOW databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| blog               | 
| mydb               |
| mysql              |
| performance_schema |
| sys                |    
+--------------------+
6 rows in set (0.00 sec)

mysql> use blog
mysql> SHOW tables;
+----------------+
| Tables_in_blog |
+----------------+
| blogs          |
| users          |
+----------------+
2 rows in set (0.01 sec)

以上のような結果が得られれば問題ありません。うまくいかなかった場合は、一度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のようになります。

図1 初回起動画面
図1 初回起動画面

大きく分けて3つの画面構成になっていることがわかると思います。

図2 MySQL Connections
図2 MySQL Connections

左上のMySQL Connections図2は接続先の候補を示しています。今後新しくデータベースへの接続方法を登録した場合はここに表示されます。

図3 Models
図3 Models

左下のModels図3は作成したモデルが表示されます。デフォルト状態ではsakilla_fullというサンプルモデルが表示されています。

図4 Shortcuts
図4 Shortcuts

右のShortcuts図4には各種ツールやフォーラムへのリンクが表示されています。

それでは接続をしてみましょう。MySQL Connectionsの右隣にある+ボタンをクリックします。すると図5のようなウィンドウが表示されます。

図5 接続セットアップ画面
図5 接続セットアップ画面

そこに今回接続するDockerインスタンスの設定と揃えて入力します。各項目への入力するものは以下の表のようになります。

項目名入力するもの
Connection NameMySQL Connectionsに表示される接続先の名前
Hostname接続先したいMySQLが動いているサーバの情報
PortMySQLが待ち受けているPort番号
UsernameMySQLで使用できるユーザ名
PasswordMySQLのユーザに対応するパスワード
Default Schema接続した際にデフォルトで使用するデータベース(空にしておいて後で指定することもできます)

SSLやAdvancedは環境に応じて必要な場合は設定してください。

図6 設定後のセットアップ画面
図6 設定後のセットアップ画面

その後Test Connectionをしてみましょう。

図7 success
図7 success

ここで図7のような画面が表示されれば問題なく接続ができます。OKを押して設定を保存をしましょう。

もう一度起動画面に戻ってくると、MySQL Connectionsに新しくmichibushinという接続プロファイルが作成されていることがわかると思います図8⁠。

図8 設定完了
図8 設定完了

これでデータベースに接続できるようになりました。

ER図を出力する

それでは今まで作成したプロファイルを元に、ER図を出力してみましょう。Modelsの「 〉」ボタンをクリックし、Create EER Models from Databaseをクリックしましょう図9⁠。

図9 Create EER Model
図9 Create EER Model

次にReverse Engineer Databaseというウィンドウが表示されるので、Stored Connectionから先ほど設定した接続方法を選択して、Continueをクリックします。今回はmichibushinと名前を付けたので、michibushinを選択します図10⁠。

図10 Reverse Enginner Database
図10 Reverse Enginner Database

その後接続が始まり、問題なく接続ができることが確認されます。

図11 確認
図11 確認

接続に問題がなければ、Continueを押して次へと進んでいきます。

図12 取得
図12 取得

次に、どのデータベースの情報を取得するか確認されるので、今回作成したblogデータベースを選択し、continueを押してどんどん進めていきます。

図13 ER図
図13 ER図

図13のようなER図が得られました。このように既存のデータベースからER図を取得することができました。

また、今回はER図では自動的に関連が定義されていますが、外部キーを定義していない場合にはこれらの関連性は自分で定義する必要があるのでご注意ください。

まとめ

今回はMySQL Workbenchを使ってER図を出力してみました。使っている言語やフレームワークによっては、コード上の情報からデータの関連性を補完しより詳細なER図を出力してくれるものも一部あります。また、MySQL WorkbenchはMySQLクライアントとしての機能も充実しているので、MySQLに関わる業務のほとんどを行うことができます。今回はER図を出力するだけでしたが、それ以外にも有用なツールが揃っているので今後紹介していく予定です。

また、MySQL Workbenchを使用すると、言語やフレームワークによらず、ER図を作成することができます。MySQLを使用している場合は、さらにER図を自動生成することが可能なのでとても便利です。ドキュメントの作成を行う際にぜひ一度試してみてください。

おすすめ記事

記事・ニュース一覧