E-R図とは ― エンティティ・属性・関連の書き方
E-R図は、
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段ずつ組み立てます。ボタンを押すと、エンティティ、属性、リレーションシップの順に図に足されていきます。
最後の段では、注文と商品の関連を多対多にしています。RDBの記事の例は、1つの注文に1つの商品が結び付く単純な表でした。しかし実際には、1回の注文で複数の商品を買えますし、同じ商品が複数の注文に現れることもあります。この関連は多対多です。
注文と商品を1対1と決めると、何が表せないか
注文と商品の関連を、もし1対1と決めてしまうとどうなるでしょう。RDBの記事の例では、注文5001がノートPC、注文5002がマウスでした。ここで、注文5001にマウスも入っているとします。するとマウスは、注文5001と注文5002の両方に現れます。
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問)
正解:データの
E-R図
正解:顧客
エンティティは
正解:1人の
1対多は、
正解:
1対1では、
選んでから「採点する」を押すと、解説つきで答え合わせができます。
関連記事
おすすめの本 PR
セキュリティとデータベースは、基本情報技術者試験の対策本でまとめて学べます。

