MySQL Workbench ER図作成

# MySQL Workbench ER図作成

## MySQL Workbnch 6.3 Linux版を対象
実際のテーブル連携等は使用せずに純粋にER図を作成する用途を対象に書いてます。![workbench.png](https://qiita-image-store.s3.amazonaws.com/0/18555/c3ece2fe-940a-482e-504c-73f154c68680.png)

## 設定

あらかじめ設定しておいた方がよい項目があるので、まず設定を行います。
![pref_diagram.png](https://qiita-image-store.s3.amazonaws.com/0/18555/df22d157-9604-01d6-fd64-2985ee39ebc0.png)

**[Edit] > [Preferences]** で設定ダイアログが現れます。
![pref_diagram.png](https://qiita-image-store.s3.amazonaws.com/0/18555/df22d157-9604-01d6-fd64-2985ee39ebc0.png)

### 色の設定

**[Modeling] > [Appearance] > [Color Presets]**

Color Presets は作成時に選択できる色リストを設定しておけます。ER図の色設定の例としては、**リソース系**、**イベント系**、**サマリー系**を大別して色分けするといったことがよくおこなわれているので、これらの色をあらかじめ決めて設定しておくと作成時に選択するだけでよくなります。

テーブルやレイヤーの色は後でも設定できるが、後からの設定では色選択ダイアログからの設定になるので先に決めておく方が良いでしょう。

### フォントの変更

**[Appearance] > [Configure Fonts For]** から
[Default(Western)] → [Japanese]に変更すると一括で変更できます。
([Japanese] ではLinuxの場合 VL Gothic が採用される様です。)

VL Gothic以外が使用したい場合は好みにより下のフォントを変更します。

例: 「TakaoGothic 11」

フォント設定は以下の項目があります。

* Text Figure Text
* Connection Caption
* Layer Title  
* Routine Group Figure Items
* Routine Group Figure Title
* Table Fegure Items
* Table Figure Section
* Table Figure Title
* View Figure Title

**Layer Title** や **Table Figure Title** を他よりも大きくしておくと全体を俯瞰した時に読み取れて便利な場合があるので大きくしておく方が好みです（実際にはそこまで極端にフォントを大きくしている例は無いようなのでほどほどに）。

![font.png](https://qiita-image-store.s3.amazonaws.com/0/18555/20780c47-08c9-5fed-26aa-57968ae8273e.png)

作ってしまった後でフォントサイズを変更するとレイヤーからはみ出してしまったり他と重なったりすることがあるので、最初に大きなフォントで設定しておくと良いです。

### 追加のフォント設定

フォント設定はさらに

**[Edit] > [Preferences] > [Fonts]**

にエディタのフォント指定があるので、これも日本語フォントに変えておくと良いでしょう。

### Diagramの設定

**[Modeling] > [Diagram]** で各種設定出来ます。

![pref_diagram.png](https://qiita-image-store.s3.amazonaws.com/0/18555/6b995a70-7cf9-f10e-8f2c-da4d2bccfcaf.png)


設定項目は以下の通りです。

* All Objects
 * **Expand New Objects** 作成するときにあらかじめ開いた状態で作成するか
 * **Propagate O bject Color Changes to All Diagrams** テーブル等の色変更を別のダイアグラムにも反映させるか
* Tables
 * **Show Column Types** Columnの型を表示するか
 * **Show Schema Name** スキーマをテーブル名の前に表示するか
 * **Max.Length of ENUMs and SETs to Display:** ENUM(列挙型)やSET型の最大長の指定ですが、どこに影響するのか不明
 * **Show Column Flags** Column名横に小さくフラグを表示させるか (反映させるには一度テーブルをRemoveして再度表示させる必要があった)
 * **Max. Number of Columns To Display:** Columnsの表示数。「Reset Object Size」したときに、この数分表示されます。
* Routines
 * **Trim Routine Names Longer Than** 不明
* Relationships/Connections
 * **Draw Line Crossings (slow in large diagrams)** ラインがクロスしたときにまたぐような表現にするか
 * **Show Captions** ラインのCaptionを表示するか
 * **Center Captions Over Line** Captionをラインの上にかかるように表示するか(Show Captionsにチェックが入っていないと意味がない)

## メニュー項目

### File

 * [New Model](#ER図を書くモードのはじめ方)
 * Open Model...（mwbファイルを開く）
 * Include Model...(今開いているModelに統合すす)
 * Open Recent（履歴から開く）
 * Close Tab（今選択しているタブを閉じる）
 * Save Model（保存）
 * Save Model As...（別名保存）
 * Import
 * Export （PNG,SVG,PDF,PostScript出力...）
 * Page Setup...（用紙選択、設定）
 * Print...（印刷）
 * Print to File...（印刷イメージをPDF,PostScriptで出力）
 * Document Properties...（ドキュメントの設定）
 * Exit

### Edit

 * Undo
 * Redo
 * Cut
 * Copy
 * Paste
 * Remove Figure
 * Delete
 * Edit Selected
 * Edit Selected in New Window
 * Select
 * Go to Next Selected
 * Go to Previous Selected
 * Find
 * [Preferences...](#設定)

### View

 * Home
 * Output（操作ログの表示）
 * Select Next Main Tab
 * Select Previous Main Tab
 * Zoom 100%
 * Zoom In
 * Zoom Out
 * [Set Marker](#前の選択地点への移動)
 * [Go To Marker](#前の選択地点への移動)
 * Toggle Grid (グリッドの表示有無)
 * Toggle Page Guides

### Arrange

 * [Align to Grid](#位置調整、再配置するには)
 * Bring to Front(重なった時に前にする)
 * Send to Back(重なった時に後ろにする)
 * [Center Diagram Contents](#置調整、再配置するには)
 * [Autolayout](#置調整、再配置するには)
 * [Reset Object Size](#置調整、再配置するには)
 * [Expand All](#Columnを非表示にしたい)
 * [Collapse All](#Columnを非表示にしたい)

### Model

 * [Add Diagram](#ER図を書くモードのはじめ方)
 * Create Diagram From Catalog Objects(定義してあるテーブルから新しくER図の作成)
 * User Defined Types
 * Table Templates...(テーブルテンプレートの編集)
 * [Object Notation](#ER形式の見た目の変更)
 * [Relationship Notation](#ER形式の見た目の変更)
 * [Diagram Properties and Size](#ダイアグラムを広げるには)
 * [Model Options...](#ER形式の見た目の変更)

### Database

 * Connect to Database...
 * Manage Connections...
 * Reverse Engineer...
 * Forward Engineer...
 * Schema Transfer Wizard...
 * Migration Wizard...
 * Migration Wizerd...
 * Edit Type Mappings fo Generic Migration...
 * Synchronize Model...
 * Synchronize with Any Source...
 * Compare Schemas...

### Tools

 * Configuration
 * Utilities
 * Catalog
 * Objects
 * Start Shell for MySQL Utilities

### Scripting

 * Scripting Shell
 * New Script...
 * Open Script...
 * Run Script File
 * Run Workbench Script File...
 * Install Plugin/Module...
 * Plugin Manager...

### Help

 * Help Index
 * MySQL.com Website
 * Workbench Product Page
 * System Info
 * Report a Bug
 * View Reported Bugs
 * Locate Log Files
 * Show Log File
 * Check for Updates
 * About Workbench


## ER図を書くモードのはじめ方

1. **[File] > [New Model]**  (CTRL+N)
で新しいモデルを開く 
![diagram1.png](https://qiita-image-store.s3.amazonaws.com/0/18555/e41eccd2-ca96-bb1c-9d6b-7155305214a5.png)

2. **[Add Diagram]**
で新しくダイアグラムを作成しER図のモードになります。

![diagram2.png](https://qiita-image-store.s3.amazonaws.com/0/18555/9d7e5104-a95d-e7ac-61d9-cf06827d724f.png)

ER図のメインページでは左右にペインがあり、右上のアイコンにより表示・非表示が切り替えられます。

![diagram3.png](https://qiita-image-store.s3.amazonaws.com/0/18555/d1f28bfe-457e-1af6-17cf-0367667f2d0c.png)

メインの左側のアイコンで新しいオブジェクトを作成します。「レイヤー」と「テーブル」を主に使用します。

## レイヤーの作成

レイヤーは単にDiagram上でグループ化するだけでテーブル定義には影響しないので、表示上わかりやすくするために使用します。設定できるのは、名前と色の変更程度です。

レイヤーのアイコンをクリックするかショートカットキーの「l」でレイヤーが作成出来ます。

そのとき左上に色選択のコンボボックスが現れるので、ここで色を選択して、マウスで範囲を指定するといレイヤーが作成出来ます。

![layer.png](https://qiita-image-store.s3.amazonaws.com/0/18555/2b38b30f-7888-4601-3a37-e7036636eda7.png)

## テーブルの作成

テーブルも同様にテーブルのアイコンをクリックするかショートカットキーの「t」でテーブルが作成出来ます。

![table.png](https://qiita-image-store.s3.amazonaws.com/0/18555/ceb77fbb-78cd-eb46-3350-52b405cf11d8.png)


そのとき上部にテーブルの設定項目がいくつか現れ、その右に色選択コンボボックスが現れます。ここで設定して、置きたい位置にマウスをクリックするとテーブルが作成されます。


## レイヤーの色の変更

1. レイヤーの色の変更をするには、レイヤーを選択肢て右クリックで 「Edit 'テーブル名'」を選択すると下部に設定が開きます。
![layercolor.png](https://qiita-image-store.s3.amazonaws.com/0/18555/2b8c960e-41f0-4ee4-8fd8-8c554132a9a3.png)

2. 「Color:」 にRGBを書くか、その右のアイコンをクリックすることで色選択ダイアログが表示されるので、そこで選択します。

左ペインの「Properties」の「Color」からも設定出来ます。

## テーブルの色変更
テーブルは選択すると左ペインの「Properties」で設定出来ます。

「Color」で設定するかクリックすると右にボタンが表示され押すと色選択ダイアログが表示されます。

![tablecolor.png](https://qiita-image-store.s3.amazonaws.com/0/18555/05df9731-10c3-936d-daa8-53b1e36ca22c.png)

ER図の色分けは、リソース(マスタ)系とイベント系で分ける例があります。さらに履歴等のサマリー系を分ける場合もあります。

![entity.png](https://qiita-image-store.s3.amazonaws.com/0/18555/6c4ec6f0-6b2f-7f66-6e28-7d9b35838edb.png)

例えば、

* リソース系 青(緑)
* イベント系 赤(ピンク)
* サマリー系 黄

のような分け方があります。

## ダイアグラムを広げるには

[Model] > [Diagram Properties and Size...]でサイズ変更出来ます。 この単位は通常 1つがA4縦の用紙サイズになります。

![diagram_size.png](https://qiita-image-store.s3.amazonaws.com/0/18555/588745d2-70eb-ad86-aff0-66d49df3fd8a.png)

(このダイアログ Cancel・OKの配置が逆だ...)

## 位置調整、再配置するには

* 微調整 [Arrange] > [Align To Grid] を有効にしてからドラッグします。

* 全体を中心に移動する CTRL+A で全部を選択してから[Arrange] > [ Center Diagram Contents]

* 複数重なってしまった場合 [Arrange] > [Autolayout] である程度重ならないように配置されます。ただ配置は満足いく結果には中々ならない...

* テーブルの大きさを戻したい場合、テーブルを選択して[Arrange] > [Reset Object Size] で出来ます。複数をいっぺんにリセットは出来ないようです。

## Columnを非表示にしたい

[Arrange] > [Collapse All] で全テーブルのColumnが非表示になります。俯瞰ダイアグラムの場合は、Collapseにして、詳細ダイアグラムの場合にExpandにするといったことが可能になります。

## ER形式(見た目)の変更

[Model] > [Object Notation]

ER図の形式を以下から選択でき出来ます。(ただClassic,IDEF1XはColumnの日本語が表示されないようです)

* Workbench (Default)
* Workbench (Simplified)
* Classic
* IDEF1X

[Model] > [Relationship Notation]

関係の接続表記方法を以下から選択出来ます。

| 項目名 | 表示 |
|:------|:-----|
| Crow's Foot(IE) | ![範囲を選択_058.png](https://qiita-image-store.s3.amazonaws.com/0/18555/199a6991-8d3f-6acf-e27b-960c8ff0d225.png) |
| Classic | ![範囲を選択_060.png](https://qiita-image-store.s3.amazonaws.com/0/18555/3c57ed3a-1581-caeb-95da-d12b7852d0b4.png) |
| Connect to Columns (Column同士を直線で結ぶ) | ![範囲を選択_061.png](https://qiita-image-store.s3.amazonaws.com/0/18555/09f0dc63-8564-c124-44d8-e4fadfaa9251.png) |
| UML | ![範囲を選択_062.png](https://qiita-image-store.s3.amazonaws.com/0/18555/5ff774b7-dd6a-0e84-4a24-583a62bb29d8.png) |
| IDEF1X  | ![範囲を選択_063.png](https://qiita-image-store.s3.amazonaws.com/0/18555/0e556ae1-6291-e743-bb3e-bfabd8787f69.png) |

## 一部分のみの関係を表示したい

MySQL Modelでテーブルと関係をきちんと定義してあれば、一部分のみのER図は簡単に作成することが出来ます。

1. 先にテーブルを作成し関係も定義します。

![alltable.png](https://qiita-image-store.s3.amazonaws.com/0/18555/9c89ca83-0154-17ee-55d3-044b404b2173.png)


2. [Model] > [Add Diagram]  (CTRL+T) で新しいダイアグラムを作ります。(MySQL Modelから[Add Diagram]をクリックしてもよい)
3. 左ペインのTablesから表示したいテーブルをドラッグアンドドロップします。
![parttable.png](https://qiita-image-store.s3.amazonaws.com/0/18555/6a8b5518-d6f8-af0b-8b01-a44b82cd43a5.png)

複数のテーブルを配置すれば、既に定義してあるRelationshipにより必要なラインが引かれます。

現在のタブで表示されているテーブルは左ペインのテーブルに●が付いて表しています。

逆に表示したくテーブルは、テーブルを右クリックして、[Remove Figure 'テーブル名'] で非表示に出来ます(Deleteを選択すると定義から削除されてしまうので注意)。

別の方法としては、表示されているダイアグラムで右クリックをして [Copy n Select Figure]によりコピーして、表示したいダイアグラムでペーストすることも出来ます。
レイヤーはモデルでは定義されていないため、そのままコピーしたい場合は、この方法しかありません。

一つの定義から複数のダイアグラムを作成しても定義側で変更していけば全てのダイアグラムに反映されます。

## Relationship を非表示にするには(非推奨)

Relationshipを選択すると [Relationship] > [Visibility]から選択出来ます。

Draw Splitは接続は残しつつ途中のラインのみ表示されなくなります(Hideにした後は選択するのが難しくなります)。

## Relationshipを破線にするには

MySQL Workbenchでは、依存関係にあるRelationshipを実線で表し、依存関係にないRelationshipを破線で表します。

Relationshipをダブルクリックした後 [Foreign key] > [Identifying relation(依存関係)] のチェックを外すと破線になります。
ただしForeign keyがColumnまできちんと定義されている必要があります。定義されていないと実線のままになります。

Identifying relation(依存関係)は、その名の通り、売上に対する売上明細のような親子関係が成り立っているような関係の場合にチェックするものです。

## Relationshipの線の位置を変更するには

テーブルが斜めに繋がるように配置するとRelationshipが２回曲がる状態になります。この場合は、Relationshipを選択すると真ん中に太い部分が現れるので、その部分をドラッグ出来ます。

![linemove.png](https://qiita-image-store.s3.amazonaws.com/0/18555/d6fa18f1-64bd-6460-8a31-31079c461243.png)


## 前の選択地点への移動

オブジェクトを選択した状態で、 [View] > [Set Maker] （ショートカットキーCTRL+SUPER+数字） でマークしておくと [View] > [Go Maker] （ショートカットキーCTRL+数字）でマークしていた位置に移動できます。

## よく落ちます

よく落ちますね。

[Edit] > [Preferences] > [Modeling] > [Auto-save model interval] が設定されていれば、落ちた後それまでのAuto-saveポイントに復帰できます。