MySQL Workbenchを使ってデータモデリングを学んでみよう
リレーションの設定
先ほどまでの作業でER図のE(Entity)としてのテーブルを作成しました。今度はR(Relation)を設定してみましょう。
Diagramペインで数字の6を押す、もしくは1:nのピックアップつき実線アイコン(アイコンメニューの一番下のアイコン)を押すと、ポインタが指の形になり、既存のカラムを利用したリレーションシップ設定アイコンと共に表示されます(当該アイコンが見えず選択できない場合、Workbench自体のウィンドウサイズを広げるか、アイコンメニューの一番下の右向き三角部分をクリック・表示して選択)ので、社員テーブルの会社コードカラム→会社テーブルの会社コードカラムの順にクリックすると図4のようにリレーションが設定されます。設定モードから抜けるにはESCキーを押すか、アイコンメニューの矢印アイコンをクリックしてください。
EntityとRelationの表記方法はIEに準拠したものですが、もう一つの代表的な表皮方法であるIDEF1X(アイデフワンエックス)で表記することも可能です。メニューのModelからObject NotationおよびRelationship NotationにてIDEF1Xを指定してください。
ただし現状Object NotationをIDEF1Xにすると日本語がうまく表記できません。また変更は当該モデル(mwbファイル)のみで有効です。
フォワードエンジニアリング
作成したデータモデルは実際にデータベースに適用(DDLとして)できます。これをフォワードエンジニアリングといいます。
DatabaseメニューからForward Engineer...を選択しForward Engineer to Databaseウイザードで各種指定を行います。Connection OptionsのStored Connectionから前回の記事で設定した接続(Local5614)を指定して、後はNextボタンを押していき、Review SQL Scriptまで進みます。ここでは実際にモデルから生成されたクエリが図5.のように確認できます。そのままCommit Progressまで進むと実際にデータベースに適用されます。
第二正規系から第三正規系に変更
実は先ほど作成したモデルは第二正規化されたものでしたが、ここではそれを第三正規化してみましょう。
第三正規化するには社員テーブルから部署名(と部署コード)を分割した部署テーブルを作成します。部署コードをCHAR(3) PK、部署名をVARCHAR(45)で設定した部署テーブルをこれまでと同じ手順で作成します。そして先ほどの手順と同様に社員テーブルの部署コードカラム→部署テーブルの部署コードカラムの順にリレーションを設定します。こうなると社員テーブルの部署名カラムは不要になりますので、社員テーブルを右クリックしてEdit '社員' in New Tab...を選択し、社員-Tableタブで部署名を選択し、右クリックメニューからDelete Selectedを選びカラムを削除します。結果として図6のようになります。
シンクロナイゼーション
モデルを第二正規形から第三正規形にしたため、実際のMySQLの定義とはズレができてしまいましたので、ここで同期をとってみましょう。
DatabaseメニューからSyncronize Model...を選択し、ウイザードを進めていくとSelect Changes to Applyでモデルと実際のズレが図7.のように表示されます。進めていくとReview DB Changeで実際に発行するDDLが確認できますので、問題ないならそのまま進めてFinishします。
ここまで作成したモデルは任意のタイミングでセーブすることができます。FileメニューのSave Modelからセーブしておきましょう。ここではSample3NF.mwbとしてセーブしておきます。セーブした内容はWBのホームからModelsとして確認できます。
リバースエンジニアリング
本記事の内容と参考文献(今回の第二正規形→第三正規形はミックさんの書籍p.93~101に準拠したものです)を元にいろいろとモデリングを試行錯誤することも勉強になりますが、実務で一からデータモデルを作成する機会はなかなかないのではないかと思います。そのような場合、既存のデータベースをリバースエンジニアリングして、ER図を関係者で共有することにより、既存のデータベースの把握や、拡張作業時のやりとりがスムーズに行えることが期待できます。
リバースエンジニアリングには、Workbenchのホーム画面、Modelsの>アイコンをクリックしてCreate EER Model from Databaseを選択します。Select Schemasにて対象としたいデータベース(スキーマ)を選択後、処理を進めていけば既存のデータベースのER図が生成されます。FileメニューからExport...で好みのフォーマット(PNG, PDF等)に変換出力して役立ててください。