ER図の見方が、複雑でよくわかないよ…。
本記事では、ER図の概念や見方、関連用語まで、完全解説しています。
・エンティティやリレーションシップって何?
・多重度の3つの表記方法
・汎化と特化とは?
この記事を執筆する私は、データベース関連について学習中の現役エンジニアです。
応用情報技術者試験まで取得しているため、データベースの基礎は理解しています。
データサイエンスに欠かせないデータについて、一緒に基礎から学んでいきましょう!
データサイエンスを本気で学ぶなら、プログラミングスクールがおすすめ
おすすめのスクールはこちら!
ER図とは
ER図とは、対象世界におけるデータの内容や関連を記載した図です。
ER図とは、データベース設計(データモデリング)で使う設計手法だよ。
ER図は、概念データモデルをモデリングする時に使います。
データモデルを作るというのは、対象世界で「どういったデータが生じているか」を見える化することだったね
概念データモデルとは?については、こちらの記事を参考にしてください。
1. エンティティ
大抵の場合、データの項目間に関連があり、グルーピングできます。
グルーピングしたものは、エンティティ(実体)と呼ばれます。
ER図を作る時には、まずエンティティを定義することからはじめるんだね。
上記の図では、各エンティティに入る属性名も記入していますが、通常は省略し、エンティティ名のみを記載することが多いです。
2. リレーションシップ
次に、業務を分析して、エンティティ同士に関連(リレーションシップ)がないかを確認します。
関連があれば、エンティティ同士を実線で結びます。
実線の中央のひし形に、関係性名を書くこともあります。
これは、省略されることもあります。
関係とか関連とか、色々なワードがあって、何だかややこしいな〜
データベースの世界では、「関係」は表のことを指すよ。
ER図のリレーションシップは、「関連」であると明確に区別されているんだ!
3.多重度(カーディナリティ)
多重度とは、エンティティ間における数的な対応関係のことです。
具体的には、あるクラスのインスタンス1つにつき、他方のクラスのインスタンスがいくつ対応するかという関連を示します。
表記方法①
先程の顧客と商品のER図の例でいうと、次の関係を示すのが多重度です。
- 一人の顧客に、いくつの商品が対応するか
- 一つの商品に、何人の顧客が対応するか
多重度は、矢印の向きで表現されます。
矢の先端は多、矢のおしりは1を表します。
多重度は4パターンあり、次の意味になります。
多重度 | 表現 | 例 |
---|---|---|
1対1 | ー | ・一人の顧客には一つの商品しか対応しない(=顧客は一つの商品しか購入できない) ・一つの商品は一人の顧客にしか購入されない(=複数の顧客が同じ種類の商品を購入することはない) |
1対多 | → | ・一人の顧客には一つの商品しか対応しない(=顧客は一つの商品しか購入できない) ・一つの商品は複数の顧客から購入されることがある(=複数の顧客が同じ商品を購入できる) |
多対1 | ← | ・一人の顧客は複数の商品に対応する(=顧客は複数の商品を購入できる) ・一つの商品は一人の顧客にしか購入されない(=複数の顧客が同じ種類の商品を購入することはない) |
多対多 | ↔ | ・一人の顧客は複数の商品に対応する(=顧客は複数の商品を購入できる) ・一つの商品は複数の顧客から購入されることがある(=複数の顧客が同じ商品を購入できる) |
表記方法②
多重度の表記方法は、他にもあります。
次のように、具体的な数字を用いて表記できます。
このように、下限値…上限値という表記もできます。
表記方法をまとめると、次のようになります。
表記方法 | 意味 |
0 | 無くてもいい |
1 | 必ず1つはある |
* | 上限なし |
この書き方を使うと、表記①のような「1or複数」ではなく、具体的な取りうる範囲がわかります。
解釈の方針は、表記①と同じです。
下限値に0が含まれるか含まれないかって、結構影響大きいよね。
下限値が0を含むかどうかを書くための方法は、このの表記方法しか無いのかな?
●と○を使って下限値に0が含まれるかどうかを表現する方法もあります。合わせて覚えましょう。
オプショナリティといいます。
○:0を含む
●:1以上
4. 連関エンティティ
ER図を元に、表などを定義する必要がありますが、多対多があると正規化の観点から表にするのが難しくなります。
そのため、多重度が多対多であるエンティティは、1対多の関連に整理する必要があります。
そこで登場するのが、連関エンティティです。
間に連関エンティティを介することで、むりやり1対多を作り出します。
連関エンティティの名前は、どうやって決めるのかな?
多くの場合、リレーションシップの記載を書くよ。
今回は購入エンティティになるね。
もしくは、両端のエンティティの名前を使って、顧客・商品エンティティとする場合もあります。
汎化と特化(スーパータイプ、サブタイプ)
汎化と特化とは、親子関係のことです。
エンティティを親子関係で整理します。
汎化と特化には、次の2種類のエンティティで成り立ちます。
・サブタイプ:子。個別の属性のみを持つエンティティ
汎化-特化関係を探すことで、よりエンティティの関係性をわかりやすく表現できるね
共通の属性は、スーパータイプにのみ記載するのがポイントです。
今回の例では、外部キーの顧客ID以外の共通属性「購入日」「お届け先住所」は、スーパータイプに記載します。
一方、共通属性に+αでついてきた属性は、サブタイプにのみ記載します。
※外部キーは書いても書かなくてもどちらでもOK
まとめ
いかがでしたか?
ER図は、業務でもデータベーススペシャリスト試験でもよく問われる基礎知識です。
しっかりマスターしたい方は、こちらの記事も合わせて読んでください。
データサイエンスを本気で学ぶなら、プログラミングスクールがおすすめ
おすすめのスクールはこちら!