MySQL Workbenchの存在を初めて知って衝撃

    制作部の里山です。
    システム開発案件の場合、
    必ず発生するデータベース設計の作業なのですが、
    従来はExcelなんかの設計書でちまちま書いていました。

    ER図などを手作りするのが中々に面倒だったんですが、
    ある時、MySQL Workbenchに出会いました。

    MySQLのオフィシャルツールなのですが、中々使いやすいです。
    GUIベースでER図を作れるうえ、そこからCREATE文を生成できたりするので、
    Excelに特別な思い入れが無ければ使うべきツールと言えます。
    ということで、非常に便利なデータモデリングの部分について、
    ほんの少しだけ紹介します。

    起動画面にあるModels付近の「+」ボタンをクリックします。

    Add Diagramを選択します。

    テーブルを作ります。

    フィールドを編集します。

    リレーションを張ることもできます。
    こんな感じで色んな色々と定義していきます。

    ここから、CREATE文も一発で作れます。

    -- MySQL Script generated by MySQL Workbench
    -- 04/18/14 17:09:42
    -- Model: New Model    Version: 1.0
    SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
    SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
    SET @OLD_SQL_MODE=@@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`.`tbl_user`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`tbl_user` (
      `user_id` INT NOT NULL,
      `user_name` VARCHAR(45) NOT NULL,
      `birth_date` DATETIME NOT NULL,
      `mail_address` VARCHAR(256) NULL,
      `del_flg` TINYINT NOT NULL,
      `insert_date` DATETIME NOT NULL,
      `update_date` DATETIME NOT NULL,
      PRIMARY KEY (`user_id`),
      UNIQUE INDEX `user_name_UNIQUE` (`user_name` ASC),
      UNIQUE INDEX `mail_address_UNIQUE` (`mail_address` ASC))
    ENGINE = InnoDB;
    
    -- -----------------------------------------------------
    -- Table `mydb`.`tbl_diary`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`tbl_diary` (
      `diary_id` INT NOT NULL,
      `user_id` INT NOT NULL,
      `title` VARCHAR(30) NOT NULL,
      `text` TEXT NOT NULL,
      PRIMARY KEY (`diary_id`),
      INDEX `fk_tbl_diary_tbl_user_idx` (`user_id` ASC),
      CONSTRAINT `fk_tbl_diary_tbl_user`
        FOREIGN KEY (`user_id`)
        REFERENCES `mydb`.`tbl_user` (`user_id`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
    
    SET SQL_MODE=@OLD_SQL_MODE;
    SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
    SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;

    スクリーンショットを取る時間を除けば、
    ここまで一連の作業が約10分でした。
    GUIベースなので操作に慣れれば全く問題ないです。
    ER図はPDFなどの形式でドキュメント化することも可能です。
    フィールドリストを何らかの形でエクスポートできればパーフェクトなんですが、
    その辺の機能があるかは確認中。

    ちなみに、既存のMySQLデータベースが既にある場合、
    DB構造をSQL形式でエクスポートすれば、
    そこに入っているCREATE文をリバースして自動でER図を作ってくれます。

    もちろん、リモートサーバー(公開鍵認証や踏み台アクセスもOK)に対して、
    データの中身をブラウジングしたりもできるので、
    phpMyAdminみたいなツールも不要です。
    こんな便利なツールが、なんとタダですよ。
    すばらしい。