2010年10月19日火曜日

MySQL Workbench で外部キーの設定

1. テーブル定義

MySQL Workbench で外部キーの設定をしたい。

例えば、「人」 を 「グループ」 に 「割当て」 るモデルで考える。

「人」 (persons) 「グループ」 (groups) に対応したテーブルが定義済みだとする。これに対して、「割当て」 (assignments) に対応したテーブルを作成し、外部キーを設定したい。

 

2. SQL Development で外部キーを設定する場合

MySQL Workbench の Home において SQL Development を選択し、connection でデータベースに接続。

CropperCapture[5]

SQL Editor が開いたら、左ペインの Object Browser に表示されている

  • データベースの Tables で右クリック > Create Table

MySQL には基盤となるデータベースエンジンが複数あり、この中で外部キーをサポートしているのが InnoDB

InnoDB - Wikipedia によると、

InnoDB(イノデービー)はMySQLのためのデータベースエンジンであり、MySQL ABが配布している全てのバイナリに標準搭載されている。MySQLと使用できる他のデータベースエンジンに対する改良点として、PostgreSQLに似たACID互換のトランザクションに対応していることがある。また、外部キーもサポートしている。(これを宣言的参照整合性という)

よって、「Table タブ」 における Engine の選択で InnoDB を選択。

CropperCapture[6]

「Columns タブ」 でカラムの設定をしたら、「Foreign Keys タブ」 で外部キーの設定は行わなわず、Apply ボタンを押して一旦テーブルを作成。

テーブルを作成した後、テーブルを変更する。

  • 右クリック > Alter Table

「Foreign Keys タブ」 で外部キーを設定する。

  1. Foreign Key Name は適当に付ける。
  2. Referenced Table は スキーマ名.テーブル名 で指定。
  3. Column で外部キーを参照するためのカラムを指定。
  4. 参照先のテーブルのカラムを設定。

 

3. Data Modeling を使う場合

既にテーブルを定義している場合、MySQL Workbench の Home より

  • Data Modeling > Create EER Model From Existing Database

により、ERD を生成できる。

CropperCapture[5] - 2

テーブルのカラム定義が済んでいる場合は、Diagram の左下アイコン

  • Place a Relashinship Existing Columns

を選択し、参照するカラムを選択してから、参照先のカラムを選択する。これにより、外部キーを設定できる。

CropperCapture[2]

データベースに変更を反映するには、

  • メニューより Database > Synchronize Model ...

を選択。

 

4. リレーションシップの点線と実線

外部キーを設定するときの線の種類には、点線と実線がある。

点線が Non-Identifying Relationship で、実線が Identifying Relationship 。

この違いは、(7.7.2.1 Adding Foreign Key Relationships Using an EER Diagram によると、

An identifying relationship is one where the child table cannot be uniquely identified without its parent.

Identifying Relationship の方は、参照する側 (子) が存在するには、参照される側 (親) が存在する必要がある場合に使うようだ。

テーブルの定義としては、点線の方は、カラムに外部キーの制約付けられる。実線は、参照する側のカラムが主キーの一部となることが加わる。