MySQL道普請便り

第13回 MySQL Workbenchを使ってER図を編集する

この記事を読むのに必要な時間:およそ 3 分

前々回第11回 MySQL Workbenchを使って既存のデータベースからER図を作成するでは,現在DBにある情報からER図を作成しする方法を紹介しました。しかし,第11回でも少し説明した通り,ER図を出力した際にテーブル間の関係を自動的に定義できるのは外部キーが指定されている場合だけです。

近年採用されているWebアプリケーションフレームワークの一部では,外部キーを定義せずアプリケーションの内部でテーブル間の関係を定義するものもあり,外部キーを適切に定義していないこともあると思います。

今回はそういった外部キーが設定されていない場合に,MySQL Workbenchを使ってER図上のテーブル間の関係を定義する方法をお伝えしていきたいと思います。

デモンストレーション環境について

今回は第11回で使用したDocker上のMySQLを利用して,新しいテーブルを定義していきます。

$ cat test2.sql
CREATE DATABASE `blog2`;

USE `blog2`;

CREATE TABLE `users`(
        `user_id` int,
        `e_mail` text,
   `password` text,
   PRIMARY KEY(`user_id`)
)engine=InnoDB;

CREATE TABLE `blogs`(
        `user_id` int,
    `blog_id` int,
    `body` text
)engine=InnoDB;

第11回で定義したSQLとの違いを見るためにdiffを取ってみました。diffを行った結果は以下のとおりになります。

$ diff test.sql test2.sql
1c1
< CREATE DATABASE `blog`;
---
> CREATE DATABASE `blog2`;
3c3
< USE `blog`;
---
> USE `blog2`;
15,18c15
<     `body` text,
<     CONSTRAINT `fk_user_id`
<     FOREIGN KEY (`user_id`)
<     REFERENCES `users`(`user_id`)
---
>     `body` text

簡単に差分について説明しますと,データベース名がblogからblog2になっている,usersとblogsのテーブル間に外部キーが宣言されていないという違いがあります。

第11回の手順と同様にSQLを実行して,MySQL Workbenchで上記で作成したblog2のER図を出力した結果が図1になります。

図1 blog2のER図

図1 blog2のER図

今回作成したテーブルのER図との比較のため,第11回で作成したER図を図2として掲載します。

図2 blogのER図

図2 blogのER図

前回の外部キーが指定されているテーブルと違い,テーブル間の関係性がER図上でも定義されていないことがわかると思います。

今回は,新しく作成したblog2のER図(図1)に対して,テーブル間の関係を定義したり,新しくテーブルを追加していきたいと思います。

著者プロフィール

木村浩一郎(きむらこういちろう)

GMOメディア株式会社 技術推進室所属のWebアプリケーションエンジニア。最近はミドルウェア・インフラ周りのことも少しずつ学習しています。趣味は将棋。好きな戦法は四間飛車。

Twitter:@kk2170

コメント

コメントの記入