※この章は研修時間の都合により丸ごとスキップすることがあります。

この記事では、弊社の新人エンジニア研修の参考にMySQLを解説します。

前回はテーブルの作成と編集を解説しました。

今回は、MySQL Workbench のデータ・モデリング機能を使ってテーブルを作成する手順を解説します。ER図の詳細な解説は別のテキストに譲り、ここではMySQL Workbenchの機能に絞った解説を行います。

1. ER図からテーブルを作成する

ER図からテーブルを生成する手順は以下のとおりです。

1.MySQL Workbenchを起動した画面の左側、下図から以下のリレーショナルデータベースのアイコンをクリックし+のボタンを押下する。

MySQL Workbench ER
リレーショナルデータベースのアイコン

2.新しいスキーマ(下図ではmydb)が作成されます。

名前を変えたりすることも可能です。

新しいER図を作成するには「Add Diagram」をクリックします。

新しいER図の作成
「Add Diagram」をクリック

3.主なアイコンのメニューを下図で解説します

①の「オブジェクトの選択」はテーブル間でリレーションシップを貼るときなどに使用します。

②の「テーブル(エンティティ)の作成」でテーブルを作成できます。

主要アイコンの説明
「テーブル(エンティティ)の作成」

4.テーブル名や列(フィールド)の変更

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

テーブル名や列の変更
テーブル名を変更したりアトリビュートを追加できる

5.ER図からテーブルを生成

作成したER図からテーブルを生成するには以下の手順を踏みます。

下図にあるメニューの「Database」から「Synchronize Model」を選択します。

ER図からテーブルを生成
「Database」から「Synchronize Model」を選択

下図では、どのDBMSに作成するかを選択できます。

当社の新人エンジニア研修ではこれ以降も全てデフォルトのまま「Next」で結構です。

DBMSの選択
「Next」を選択

下図のようにどのようなSQL文が生成されるかが表示されます。

必要に応じてクリップボードにコピーもできます。

「Execute>」ボタンを押すことで選択したDBMSに新しいスキーマが作成されます。

新しいスキーマの作成
生成されたSQL文

2. ER図の主な構成要素

下図を使ってER図の説明をします。

エンティティはテーブルのことです。データのまとまりです。

アトリビュートはテーブルのフィールド名のことです。属性と訳されることもあります。

リレーションはエンティティ間の関係性のことです。

カーディナリティは多重度のことです。

ER図の例

以下にもう少し細かく解説します。

2.1. アトリビュートの記号

下図はアトリビュートの解説です。

鍵のマークは主キーを表します。

ピンクのひし形は外部キーを表します。下記の例ではcountry表のCodeがcity表にCountryCodeという名前の外部キーとなっています。

水色のひし形は主キーや外部キー以外のアトリビュートで非NULL制約があることを表します。例えば、独立年(IndepYear)や平均寿命(LifeExpectancy)は不明の国がありますからNULLを許容します。

白抜きのひし形は主キーや外部キー以外のアトリビュートで非NULL制約がないことを表します。例えば、国名(Name)や面積(SurfaceArea)、人口(Population)の不明な国はありませんからNULLを許容しません。

ER図のアトリビュート
アトリビュートの解説

2.2. リレーションの記号

下図はリレーションの記号です。

非依存関係とは、一方が存在しなくても他方が存在できる関係のことです。点線で表示されます。例えば、上記の例ではcoutryエンティティが存在しなくてもcityエンティティは存在できます。またその逆も言えます。

依存関係とは、一方が存在しないと他方が存在できない関係のことです。実線で表されます。例えば、上記の例ではcoutryエンティティが存在しないとcountrylanguage(母国語)エンティティは存在できません。

非依存関係と依存関係ではアイコンの表示も違います。(下図の例ではCountryCode)

リレーションの図
リレーションの記号

2.3. カーディナリティの記号

カーディナリティは多重度のことです。カーディナリティは、1:1、1:多、多対多の3種類に分けられます。

下図を使って解説します。

①エンティティを2つ選ぶことで1:1の関係を作ります。

②1:多のバージョンです。多にするエンティティを先に選ぶことに注意しましょう。(以下同じ)

③依存版の1:1関係です。

④同じく1:多の関係です。

⑤多:多の関係です。間に中間エンティティが作られます

⑥既存のアトリビュートを使い1:多の関係を作ります。

カーディナリティ
カーディナリティの解説

なお、1:多の関係を設定する際にはエンティティの選択順序が決まっています。

下図のように「多」を先に選ぶ、と覚えて下さい。

カーディナリティの選択順序
多を先に、1を後に選ぶ

2.4. 外部キー制約

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

“多”の側には“1”の側の主キーが外部キーとして入り込む

その場合、salesテーブルに挿入するレコードのcar_idはcars表に存在しなければなりません。この制約を外部キー制約と呼びます。外部キー制約は、異なるテーブル間の関連性を確立するための制約です。外部キー制約を使用すると、参照テーブルのデータを変更または削除する際に、関連する他のテーブルのデータの整合性を保つことができます。

そして、演習中にはこの外部キー制約に悩まされることもあります。つまり、外部キー制約が設定されている場合、INSERT文によって新しい行がsales表に挿入される前に、参照先のcars表において参照される行が存在するかどうかが確認され、行が存在しない場合、INSERT文はエラーを返します。

そのため、開発演習中は一時的に外部キー制約を削除することもできます。方法は上記②のところで右クリックして「Delete selected」を選びます。

当社の新人エンジニア研修では上記のことを理解しておけば大丈夫です。

<まとめ:隣の人に正しく説明できたらチェックを付けましょう>

□ 開発演習中は一時的に外部キー制約を削除する

以上、今回は、ER図からテーブルを作成する方法について学びました。

次は、このように作成したデータベースに対してデータを検索するSELECT文について学んでいきましょう。

SELECT文はSQL文のDMLの中でもっとも使用頻度の高い文です。

新人エンジニア研修でもガンガン使っていきます。

しっかり理解しましょう。

次は、「検索を使い様々な角度からデータを分析する」を学びます。