※この章は研修時間の都合により丸ごとスキップすることがあります。
この記事では、弊社の新人エンジニア研修の参考にMySQLを解説します。
前回はテーブルの作成と編集を解説しました。
今回は、MySQL Workbench のデータ・モデリング機能を使ってテーブルを作成する手順を解説します。
ER図の詳細な解説は別のテキストに譲り、ここではMySQL Workbenchの機能に絞った解説を行います。
目次
1. ER図からテーブルを作成する
ER図からテーブルを生成する手順は以下のとおりです。
1.MySQL Workbenchを起動した画面の左側、下図4.1から以下のアイコンをクリック

2.新しいスキーマ(下図4.2ではmydb)が作成されます。
名前を変えたりすることも可能です。
新しいER図を作成するには「Add Diagram」をクリックします。

3.主なアイコンのメニューを下図4.3で解説します
①のオブジェクトの選択はテーブル間でリレーションシップを貼るときなどに使用します。
②でテーブルを作成できます。

4.テーブル名や列の変更
テーブルをダブルクリックすると下図4.4のようにテーブル名を変更したりアトリビュートを追加できます。

5.ER図からテーブルを生成
作成したER図からテーブルを生成するには以下の手順を踏みます。
下図4.5にあるメニューの「Database」から「Synchronize Model」を選択します。

下図4.6では、どのDBMSに作成するかを選択できます。
当社の新人エンジニア研修ではこれ以降も全てデフォルトのまま「Next」で結構です。

下図4.7のようにどのようなSQLが生成されるかが表示されます。
必要に応じてクリップボードにコピーもできます。
「Execute>」ボタンを押すことで選択したDBMSに新しいスキーマが作成されます。

2. ER図の主な構成要素
下図4.8でER図の説明をします。
①エンティティはテーブルのことです。データのまとまりです。
②アトリビュートはテーブルの列名のことです。属性と訳されることもあります。
③リレーションはエンティティ間の関係性のことです。
④カーディナリティは多重度のことです。

以下にもう少し細かく解説します。
2.1. アトリビュートの記号
下図4.9はアトリビュートの解説です。
①鍵のマークは主キーを表します。
②ピンクのひし形は外部キーを表します。下記の例ではcountry表のCodeがcity表にCountryCodeという名前の外部キーとなっています。
③水色のひし形は主キーや外部キー以外のアトリビュートで非NULL制約があることを表します。例えば、独立年(IndepYear)や平均寿命(LifeExpectancy)は不明の国がありますからNULLを許容します。
④白抜きのひし形は主キーや外部キー以外のアトリビュートで非NULL制約がないことを表します。例えば、国名(Name)や面積(SurfaceArea)、人口(Population)の不明な国はありませんからNULLを許容しません。

2.2. リレーションの記号
下図4.10はリレーションの記号です。
①非依存関係とは、一方が存在しなくても他方が存在できる関係のことです。点線で表示されます。
例えば、上記の例ではcoutryエンティティが存在しなくてもcityエンティティは存在できます。またその逆も言えます。
②依存関係とは、一方が存在しないと他方が存在できない関係のことです。実線で表されます。
例えば、上記の例ではcoutryエンティティが存在しないとcountrylanguage(母国語)エンティティは存在できません。
非依存関係と依存関係ではアイコンの表示も違います。(下図4.10の例ではCountryCode)

2.3. カーディナリティの記号
カーディナリティは多重度のことです。
カーディナリティは、1:1、1:多、多対多の3種類に分けられます。
下図4.11を使って解説します。
①エンティティを2つ選ぶことで1:1の関係を作ります。
②1:多のバージョンです。多にするエンティティを先に選ぶことに注意しましょう。(以下同じ)
③依存版の1:1関係です。
④同じく1:多の関係です。
⑤多:多の関係です。間に中間エンティティが作られます。
⑥既存のアトリビュートを使い1:多の関係を作ります。

なお、1:多の関係を設定する際にはエンティティの選択順序が決まっています。
下図4.12のように「多」を先に選ぶ、と覚えて下さい。

当社の新人エンジニア研修では上記のことを理解しておけば大丈夫です。
以上、今回は、ER図からテーブルを作成する方法について学びました。
次は、 検索(SELECT文)について学んでいきましょう。
SELECT文はSQLのDMLの中でもっとも使用頻度の高い文です。
新人エンジニア研修でもガンガン使っていきます。
しっかり理解しましょう。