6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Weekend EngineerAdvent Calendar 2019

Day 24

MySQL WorkbenchのForward EngineeringでER図から自動でデータベース構築

Last updated at Posted at 2019-12-28

何話す。

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図作成

スクリーンショット 2019-12-29 1.11.57.png まず起動したらメニューバー[File]から[New Model]へ。 スクリーンショット 2019-12-29 1.12.24.png [Add Diagram]をダブルクリックしてER図を新規作成します。 スクリーンショット 2019-12-29 1.15.54.png ER図の作業画面。左側コンテンツバーの表のアイコンをタッチしてから、方眼の上をタッチすると新しいテーブルを出せます。 スクリーンショット 2019-12-29 1.14.59.png 出したテーブルをダブルクリックすると下からテーブル名やカラムを編集するバーが登場するので、まあ色々編集します。 スクリーンショット 2019-12-29 1.22.59.png ちなみにテーブル同士を関連で繋ぐときもコンテンツバーの適切な関連アイコンをクリックし、繋げたいテーブルをそれぞれクリックすると関連を作成できます。 この際自動的に外部キーなどは必要なテーブルに生成されます。 スクリーンショット 2019-12-29 1.25.48.png 適当なER図が完成しました!

2.フォワードエンジニアリング

スクリーンショット 2019-12-29 1.30.58.png さて早速ER図からデータベースを生成したいところですが、まずデータベースの生成先であるインスタンスをMySQLと接続しておきましょう。 先ほどMySQLは起動したので、ホーム画面の右側メニューバー[MySQLマーク]から適当なインスタンス(記事ではデフォルトのやつを使用)をダブルクリックで接続できます。 スクリーンショット 2019-12-29 1.27.30.png 接続できたらER図のファイルに戻って、上部メニューバー[Database]から[Forward Engineer...]を選択。 スクリーンショット 2019-12-29 1.28.48.png 色々出てきますが全部[continue]でOKです。 あ、でもデフォルトのインスタンス使ってない人とかは適宜表示される設定で合わせてください。 スクリーンショット 2019-12-29 1.37.08.png そしてデータベーススキーマを定義する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;

スクリーンショット 2019-12-29 1.39.07.png あとはまた[continue]を押せばもうデータベースが自動生成されました。

このデータベースの生成先であるインスタンスを見に行ってみましょう。

スクリーンショット 2019-12-29 1.39.36.png ありましたね。右側のリストのmydbというやつです。ちゃんとテーブルも生成されています。

まとめ

以上MySQL Workbenchの便利な機能Forward Engineeringを紹介しました。
データベース構築の場面ではER図の作成は自分の頭を整理すためにも、人に説明するためにも有益なものです、この作業だけでデータベースが完成しちゃうのは効率が爆上がりですね。
本番用のデータベース設計をこれで済ませるのはやばそうですが、たたき台を作るという意味ではやはり効率をUPさせてくれるでしょう!

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?