06 May 2014, 19:24

ER図作成ツール MySQL Workbench を使ってみる

表題の通りER図作成ツールというものを使ってみました。
現代では、WebアプリケーションのフレームワークにDBマイグレーションのような機能を持ち、スクリプト的にDB構造を管理することが多いかもしれません。しかし、時としてER図を管理したい場合もあるのではないでしょうか。
ER図とかテーブル構造はよくExcelでまとめて管理していましたが、規模が大きくなると辛いので試してみました。

試してみようと思ったきっかけは、ソフトウエアデザインを読んでいてER図作成ツールなるものがでてきたので、便利そうと思ったからです。
調べると主なフリーのER図作成ツールは以下があるようです。

  1. DBDesigner
  2. A5-SQLmk-2
  3. AmaterasERD
  4. MySQL Workbench
  5. ERMaster

(参考) http://treeapps.hatenablog.com/entry/20110505/p1

この中でMacで使えそうなのがMySQL Workbenchしかなかったのでこちらを利用してみます。
本当はMySQLといった製品に縛られないツールがよかったのだけど仕方ないですね。

優れている点

ざっと使ってみた感じ以下3つがよいと感じた点です。

1.ER図作成が容易

ER図作成ツールなのであたりまえなのだが、今までExcelの図形など使っていて書いていたので簡単さに驚きました。
属性についてもそれぞれ型やキー・制約などの設定も記述できます。

2.DDLにすぐにエクスポート可能

作成したER図についてはDDLにすぐにエクスポートできます。
なので、ツールでER図さえきちんと書けば実際のDB、テーブル構築はすぐに可能です。

3.イメージ図としてエクスポート可能

作成したER図をPNG形式にエクスポートできるので、メンバー等との共有が容易です。
また、ドキュメントとして残す際にもとても使えます。

試しにER図を作ってみる

実際にMySQL Workbenchを使って簡単にER図を作成してみます。 下記のような簡単なシステムと想定します。日本酒好きなのがばれましたね。

  • ユーザが飲んだお酒を記録していくWebシステムです。
  • 利用用するにはシステムへのユーザ登録が必要。
  • ユーザはお酒マスターから飲んだお酒を登録する。
    • 同じお酒を何度登録(飲んでも)よい
  • お酒には産地(都道府県)を記入する。
  • ユーーザは本システムへログイン後のアクセスログが取得される。

こんなざっくりとした感じ。

作成したER図はこんな感じに出来上がります(PNG)。
er

DDLの出力もこんな感じに可能です。

-- MySQL Script generated by MySQL Workbench
-- Tue May  6 19:16:11 2014
-- Model: New Model    Version: 1.0
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CH[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`User`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`User` (
  `user_id` INT NOT NULL AUTO_INCREMENT,
  `account` VARCHAR(45) NOT NULL,
  `password` VARCHAR(45) NOT NULL,
  `team_id` INT NOT NULL,
  `last_login` DATETIME NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE INDEX `account_UNIQUE` (`account` ASC))
ENGINE = InnoDB;

(以下省略)

まとめ

現代の環境ではあまり使う場面も少ないかもしれないですが、 使ってみた感想は、思ったよりも使い勝手がよくいいものでした。 プロジェクトやお客さんのニーズに合わせて選択肢の1つしてどのようなツールかだけでも知っておくと良いと思います。

関連する記事はこちら
  • 実装案を使って、DBのViewの使いどころを検討する (2016/03/16)
  • データベースの隔離性水準とはなにか (2014/03/30)
  • INNER JOIN とWHERE結合の違いについて理解する (2014/02/28)
  • comments powered by Disqus
    このエントリーをはてなブックマークに追加