※本章は補助的な内容のため、研修時間によっては省略される場合があります。

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

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

今回は、MySQL Workbench のER図機能を使い、テーブルを作成する手順を解説します。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:多の関係を作ります。

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

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

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

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

2.4. 外部キー制約

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

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

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

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

開発演習中は、外部キー制約の影響でデータ登録がエラーになることがあります。その場合、一時的に外部キー制約を無効化することも可能です。方法は上記②のところで右クリックして「Delete selected」を選びます。

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

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

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

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

次回は、SQLのデータ操作(DML)の中でも最も頻度の高いSELECT文について学びます。

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

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

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

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

問題


🔰 データベース基礎編:穴埋め問題

Q1. ER図における「アトリビュート」とは、(    )のことを指す。
選択肢:
A. テーブル
B. フィールド(列)
C. 行(レコード)
D. キー制約


Q2. 鍵のアイコンが付いたアトリビュートは、(    )であることを示す。
選択肢:
A. 外部キー
B. 主キー
C. NULL可能
D. 複合キー


Q3. ピンク色のひし形で表示されるアトリビュートは、(    )である。
選択肢:
A. 主キー
B. NULL制約あり
C. 外部キー
D. 重複可能な列


Q4. ER図における「依存関係」は(    )線で表される。
選択肢:
A. 点線
B. 太線
C. 実線
D. 破線


Q5. ER図で「1:多」のリレーションを設定する際は、(    )を先に選び、次に「1」を選ぶ。
選択肢:
A. テーブル名の昇順
B. 「1」の側
C. 「多」の側
D. キー制約順


Q6. 「1:多」のリレーションでは、「多」の側のテーブルに(    )が外部キーとして入る。
選択肢:
A. 多側の主キー
B. 中間テーブル
C. 一意キー
D. 1側の主キー


Q7. 開発演習中にデータ登録が外部キー制約でエラーになる場合は、(    )こともできる。
選択肢:
A. 主キーを削除する
B. 制約を一時的に削除する
C. テーブルを再作成する
D. 型を変換する


Q8. ER図でリレーションを示す線に付属する「カーディナリティ」とは、(    )を意味する。
選択肢:
A. 型の変換
B. NULL制約の有無
C. 多重度
D. 順序関係