何話す。
MySQL WorkbenchはGUIでMySQLを操作できる公式ツールです。
公式サイト・ダウンロード👉https://www.mysql.com/jp/products/workbench/
これがうんちっち便利でして、このソフト内でER図を作成でき、それをそのまま自動でいい感じにデータベースにしてくれます。この機能をフォワードエンジニアリングと言います。Create Tabeleとか一切書かなくていいんです。
Postgresから浮気しよ
環境
- macOS Mojave バーション10.14.6
- MySQL Workbench version8.0.18
前提
- MySQLをインストール済み
- MySQL Workbenchをインストール済み
この記事はMySQL Workbenchの使い方記事ではないので、フォワードエンジニアリング以外の使い方は他の記事を参考にしてください。
本題
その前に、コマンドラインからMySQLを起動させておいてください。
mysql.server start
1.ER図作成
まず起動したらメニューバー[File]から[New Model]へ。 [Add Diagram]をダブルクリックしてER図を新規作成します。 ER図の作業画面。左側コンテンツバーの表のアイコンをタッチしてから、方眼の上をタッチすると新しいテーブルを出せます。 出したテーブルをダブルクリックすると下からテーブル名やカラムを編集するバーが登場するので、まあ色々編集します。 ちなみにテーブル同士を関連で繋ぐときもコンテンツバーの適切な関連アイコンをクリックし、繋げたいテーブルをそれぞれクリックすると関連を作成できます。 この際自動的に外部キーなどは必要なテーブルに生成されます。 適当なER図が完成しました!2.フォワードエンジニアリング
さて早速ER図からデータベースを生成したいところですが、まずデータベースの生成先であるインスタンスをMySQLと接続しておきましょう。 先ほどMySQLは起動したので、ホーム画面の右側メニューバー[MySQLマーク]から適当なインスタンス(記事ではデフォルトのやつを使用)をダブルクリックで接続できます。 接続できたらER図のファイルに戻って、上部メニューバー[Database]から[Forward Engineer...]を選択。 色々出てきますが全部[continue]でOKです。 あ、でもデフォルトのインスタンス使ってない人とかは適宜表示される設定で合わせてください。 そしてデータベーススキーマを定義するSQLスクリプトが自動生成されました! 以下実際に自動生成されたもの。-- MySQL Workbench Forward Engineering
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='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`students`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`students` (
`id` VARCHAR(36) NOT NULL,
`name` VARCHAR(45) NOT NULL,
`gender` VARCHAR(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`teachers`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`teachers` (
`id` VARCHAR(36) NOT NULL,
`name` VARCHAR(45) NOT NULL,
`gender` VARCHAR(1) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`classes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`classes` (
`id` VARCHAR(36) NOT NULL,
`name` VARCHAR(45) NOT NULL,
`day_of_week` VARCHAR(1) NOT NULL,
`period` INT NOT NULL,
`year` INT NOT NULL,
`semester` VARCHAR(1) NOT NULL,
`teachers_id` VARCHAR(36) NOT NULL,
PRIMARY KEY (`id`, `teachers_id`),
UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE,
INDEX `fk_classes_teachers1_idx` (`teachers_id` ASC) VISIBLE,
CONSTRAINT `fk_classes_teachers1`
FOREIGN KEY (`teachers_id`)
REFERENCES `mydb`.`teachers` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`students_classes`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`students_classes` (
`classes_id` VARCHAR(36) NOT NULL,
`students_id` VARCHAR(36) NOT NULL,
PRIMARY KEY (`classes_id`, `students_id`),
INDEX `fk_table1_students1_idx` (`students_id` ASC) VISIBLE,
CONSTRAINT `fk_table1_classes`
FOREIGN KEY (`classes_id`)
REFERENCES `mydb`.`classes` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_table1_students1`
FOREIGN KEY (`students_id`)
REFERENCES `mydb`.`students` (`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;
このデータベースの生成先であるインスタンスを見に行ってみましょう。
ありましたね。右側のリストのmydbというやつです。ちゃんとテーブルも生成されています。まとめ
以上MySQL Workbenchの便利な機能Forward Engineeringを紹介しました。
データベース構築の場面ではER図の作成は自分の頭を整理すためにも、人に説明するためにも有益なものです、この作業だけでデータベースが完成しちゃうのは効率が爆上がりですね。
本番用のデータベース設計をこれで済ませるのはやばそうですが、たたき台を作るという意味ではやはり効率をUPさせてくれるでしょう!