ITの教科書検索
入門読了 約8分

E-R図とは ― エンティティ・属性・関連の書き方

E-R図は、データベース設計でデータの関連をエンティティ・属性・リレーションシップで表す図です。1対1・1対多・多対多の違いと、多対多の分け方が分かります。

目次
  1. E-R図とは
  2. エンティティとは
  3. 属性とは
  4. リレーションシップとカーディナリティ
  5. 図を組み立てて確認する
  6. 1対1と決めると何が表せないか
  7. カーディナリティの記法の違い
  8. E-R図を書く目的
  9. 練習問題

E-R図とは、データの関連をエンティティ・属性・リレーションシップで表す図

E-R図(Entity-Relationship Diagram)とは、データの関連をエンティティ・属性・リレーションシップの3つの要素で表す図です。テーブルを作る前に、どんなデータを管理し、データどうしがどう関連するかを整理するために使います。

RDBの顧客テーブルと注文テーブルも、「1人の顧客が何件も注文する」といった関連をE-R図で整理してから作ります。関連を1対多と決めるか多対多と決めるかで、作るテーブルの数が変わります。

エンティティとは、業務で管理する対象そのもの

顧客・注文・商品のように、業務で管理する対象をエンティティと呼びます。E-R図では、エンティティを長方形で描きます。

1つのエンティティは、同じ種類のものの集まりです。例えば「顧客」というエンティティには、田中美咲さんや佐藤健太さんなど、個々の顧客が含まれます。E-R図の長方形1つが表すのは、個々の顧客ではなく、この集まりです。

属性とは、エンティティが持つデータの項目

属性とは、エンティティが持つデータの項目です。顧客エンティティなら、顧客ID・氏名が属性に当たります。

属性のうち、エンティティの1件を特定できるものを主キーと呼びます。顧客エンティティでは顧客IDが主キーです。主キー・外部キーの詳しい仕組みは、主キーと外部キーの記事で説明しています。

リレーションシップとは、エンティティどうしの関連

リレーションシップとは、エンティティどうしの関連です。この記事の図では、エンティティを結ぶ線で描きます。

関連するエンティティどうしの件数の対応を、カーディナリティと呼びます。カーディナリティには、1対1・1対多・多対多の3種類があります。

  • 1対1:一方のエンティティの1件が、もう一方の1件に対応する
  • 1対多:一方のエンティティの1件が、もう一方の複数件に対応する
  • 多対多:どちらのエンティティも、相手の複数件に対応する

顧客と注文の関連を例に考えます。1人の顧客は複数の注文を持てますが、1つの注文を出した顧客は1人に決まります。したがって、この関連は1対多です。

図では、線の両端に件数を書きます。顧客と注文なら、顧客の側に「1」、注文の側に「多」と書きます。端の文字は、相手の1件につき、その側のエンティティが何件対応するかを表します。

図を組み立てて確認する

次の図では、顧客・注文・商品の3つのエンティティを例に、E-R図を1段ずつ組み立てます。ボタンを押すと、エンティティ、属性、リレーションシップの順に図に足されていきます。

1エンティティだけ
2属性を追加
3リレーションシップを追加
STEP 1 / 3
顧客注文商品
顧客・注文・商品の3つを、エンティティ(長方形)として置いただけの状態です。

最後の段では、注文と商品の関連を多対多にしています。RDBの記事の例は、1つの注文に1つの商品が結び付く単純な表でした。しかし実際には、1回の注文で複数の商品を買えますし、同じ商品が複数の注文に現れることもあります。この関連は多対多です。

注文と商品を1対1と決めると、何が表せないか

注文と商品の関連を、もし1対1と決めてしまうとどうなるでしょう。RDBの記事の例では、注文5001がノートPC、注文5002がマウスでした。ここで、注文5001にマウスも入っているとします。するとマウスは、注文5001と注文5002の両方に現れます。

もし1対1と決めたら注文5001注文5002ノートPCマウス表せない実際は多対多注文5001注文5002ノートPCマウス
「もし1対1と決めたら」の図では、注文5001とマウスの関連を表せません(点線)。「実際は多対多」の図では、この関連(色の付いた線)も表せます。

1対1では、1つの注文に1つの商品しか結び付けられません。注文5001とノートPC、注文5002とマウスの関連は表せますが、注文5001とマウスの関連は表せません。多対多にすると、この関連も線で表せます。

カーディナリティを間違えて決めると、実際に起こり得るデータを図で表せなくなります。そのため、E-R図を書く段階で、1対多か多対多かを確かめておく必要があります。

カーディナリティの記号は、記法によって違う

ここまでの図では、線の両端に「1」「多」とそのまま書く簡略な表し方を使いました。実際のE-R図には、IE記法(鳥の足記法)やIDEF1X記法など、いくつかの記法があります。

記法が違うと、カーディナリティを示す記号も変わります。IE記法では、鳥の足のような3本に分かれる線で「多」を表します。IDEF1X記法では、多の側の端に黒丸(●)を付けて表します。

どの記法を使っても、1対1・1対多・多対多という考え方は同じです。記法ごとの記号の細かい対応は省きます。

E-R図を書く目的は、テーブルを作る前にデータの関連を整理すること

E-R図を書く目的は、テーブルを作る前に、データの関連を整理することです。いきなりテーブルを作ると、後から「この2つのエンティティは多対多だった」と気づき、設計をやり直すことになりかねません。

E-R図で1対多か多対多かを先に決めておけば、どのテーブルに主キーと外部キーを置くかが決まります。1対多の関連は、「多」の側のテーブルに外部キーを置けば表せます。外部キーを置いた表で拒否される操作は、主キーと外部キーの記事で確かめられます。多対多の関連は、どちらかの側に外部キーを1つ置くだけでは表せません。

そこで、注文と商品の間に「注文明細」という新しいエンティティを置きます。注文明細の1件は、1つの注文に入った1つの商品を表し、注文IDと商品IDを両方持ちます。こうすると、注文と注文明細、商品と注文明細という2つの1対多に分けられます。このように多対多を分けるために置くエンティティを、連関エンティティと呼びます。

テーブルの重複や矛盾を防ぐ手順は、正規化の記事で説明しています。E-R図を使うのは、正規化より前の、エンティティとリレーションシップを決める段階です。データベース設計の3段階では、この段階を概念設計と呼びます。

参考にした資料

練習問題(全4問)

Q1E-R図の説明として最も適切なものはどれ?
Q2E-R図のエンティティに当たるものはどれ?
Q3顧客と注文のカーディナリティが「1対多」であるとき、正しい説明はどれ?
Q4注文と商品の関連を「1対1」だと決めてしまうと、表せなくなるのはどれ?

選んでから「採点する」を押すと、解説つきで答え合わせができます。

関連記事

おすすめの本 PR

セキュリティとデータベースは、基本情報技術者試験の対策本でまとめて学べます。

目的別の本の選び方を見る

データベースの記事を続けて読む

データベース 全36本中6本目