MySQL WorkBenchでデータベースのモデルを作る

MySQL WorkBenchでデータベースのモデルを作る

author potpro(ぼとぷろ)
2016/12/14

MySQL WorkBenchでデータベースのモデルを作る

potproject.net Advent Calendar 201615日目の記事です。

今回はかなり珍しいけれど、データベースの話です。


うまいことE-R図が書ける書けるソフトウェアを探していて、 普段MySQLサーバーを操作するときに使用していたMySQL Workbenchに、 モデル作成機能があるとわかり、使ってみたらかなり使いやすく便利だったのでブログでの紹介です。

MySQL Workbenchは、MySQLに関する統合管理ソフトウェアです。Windows/Mac/Linuxのマルチプラットフォームかつ、無償です。 MySQLの開発元であるOracleが開発しています。

大体はデータベースを管理していろいろ情報を見たり、挿入したり削除したりがGUIで出来るのでそれだけでかなり便利なんですが、 モデル作成機能もついてるようです。 バージョンは6.3.8です。

ダイアグラムを立ち上げる

** File -> New Model ** で、新しいモデルを作ります。 その後、 ** Add Diagram ** をクリックするともうE-R図の作成画面が出てきます。

pic1 基本的に、書くだけだったらそんなに難しくないです。左側のタブの真ん中あたりにあるのがテーブル追加ボタン。これでテーブルを追加。 左側にあるのはテンプレートです。ここをクリックすることで用意されたテンプレートを使用できます。 今回は一から作らず、このテンプレートを使って簡単にいきます。 userテーブル、categoryテーブルが出来ました。

テーブルを編集する

pic2 テーブルはダブルクリックすることで編集が出来ます。 テンプレートはカラムのデータ型が設定されてないようなので、編集して設定します。 主キーやデータ型などを付け加えるとこんな感じです。

関係(リレーション)を設定

E-R図なので、外部キーなどの関係を設定します。 編集状態で、 ** Foreign keys ** を選び、外部キーの名前、参照するテーブル、参照するカラムなどを設定。 今回はuser.usernameを参照するようにcategory.nameに外部キー制約を設定します。

pic3 このような感じになります。また、自動的に指定された表記法で関係が表されます。 初期状態だとIE (Information Engineering)記法となっています。自分は一番なじみのあるUML記法で表示するため、 ** Model -> Relationship Notation **で、UMLを指定。記法が変えられるというのもかなり嬉しいポイントじゃないでしょうか。

SQLで出力

モデル機能も優秀ですが、MySQL Workbenchは作ったモデルをSQLで出力することが出来る機能があり、これが本当に使えます。 E-R図を見ながらSQLを組み立てていく時間が削減されるので、すごく便利。

** File -> Export -> Forward Engineer SQL CREATE Script ** を選択。 途中何を出力するか聞かれるので、 ** Export MySQL Table Objects ** にチェック。 他にもViewやroleまで出力できるようです。すげー。

CREATE TABLE IF NOT EXISTS `mydb`.`user` (
  `username` VARCHAR(20) NOT NULL,
  `email` VARCHAR(255) NULL,
  `password` CHAR(64) NOT NULL,
  `create_time` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP,
  PRIMARY KEY (`username`));

CREATE TABLE IF NOT EXISTS `mydb`.`category` (
  `category_id` INT NOT NULL,
  `name` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`category_id`),
  INDEX `name_idx` (`name` ASC),
  CONSTRAINT `name`
    FOREIGN KEY (`name`)
    REFERENCES `mydb`.`user` (`username`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

組みあがったSQL文がこれ。SQL文全く分からなくてもいけるわけですよ。 自分はこれくらいならSQLを書けないことはないですが、外部キーやインデックスなどまで含めて書くとなると、ちょっときつい。というかめんどくさい。 後はこれをSQLにインポートで完了ですよ。

データベースメインのひとでもかなり使えるのでは?自分は多すぎて全容把握できてないです。 欠点は、MySQL Workbenchがすぐクラッシュするくらいですね。本当に多いのよね。自動保存機能はあるらしいけれど。 まあ、なんでもそうですが、こういったソフトウェアは定期的に保存っすなあ。