※本章は補助的な内容のため、研修時間によっては省略される場合があります。
この記事では、弊社の新人エンジニア研修の参考にMySQLを解説します。
前回はテーブルの作成と編集を解説しました。
今回は、MySQL Workbench のER図機能を使い、テーブルを作成する手順を解説します。ER図の詳細な解説は別のテキストに譲り、ここではMySQL Workbenchの機能に絞った解説を行います。
1. ER図からテーブルを作成する
ER図からテーブルを生成する手順は以下のとおりです。
1.MySQL Workbenchを起動し、左側のリレーショナルデータベースのアイコンをクリックし、+ボタンを押します。

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

3.主なアイコンのメニューを下図で解説します
①の「オブジェクトの選択」は、テーブル間のリレーションシップを設定する際に使用します。
②の「テーブル(エンティティ)の作成」でテーブルを作成できます。

4.テーブル名や列(フィールド)の変更
テーブルをダブルクリックすると、テーブル名の変更やアトリビュート(列)の追加が可能です。

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

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

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

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

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

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

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

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

2.4. 外部キー制約
E-R図のエンティティの“多”の側には“1”の側の主キーが外部キーとして入り込むことになります。(下図参照)

その場合、salesテーブルに挿入するレコードのcar_idはcars表に存在しなければなりません。この制約を外部キー制約と呼びます。外部キー制約は、異なるテーブル間の関連性を確立するための制約です。外部キー制約を使用すると、参照テーブルのデータを変更または削除する際に、関連する他のテーブルのデータの整合性を保つことができます。
そして、演習中にはこの外部キー制約に悩まされることもあります。つまり、外部キー制約が設定されている場合、INSERT文によって新しい行がsales表に挿入される前に、参照先のcars表において参照される行が存在するかどうかが確認され、行が存在しない場合、INSERT文はエラーを返します。
開発演習中は、外部キー制約の影響でデータ登録がエラーになることがあります。その場合、一時的に外部キー制約を無効化することも可能です。方法は上記②のところで右クリックして「Delete selected」を選びます。
当社の新人エンジニア研修では上記のことを理解しておけば大丈夫です。
以上、今回は、ER図からテーブルを作成する方法について学びました。
次回は、SQLのデータ操作(DML)の中でも最も頻度の高いSELECT文について学びます。
SELECT文はSQL文のDMLの中でもっとも使用頻度の高い文です。
新人エンジニア研修でもガンガン使っていきます。
しっかり理解しましょう。
次は、「検索を使い様々な角度からデータを分析する」を学びます。
IT企業向け新人研修おすすめ資料 無料公開中 (saycon.co.jp)