データベースエンジニアへの道

第2回 30分間データモデリング 〜ER図を描こう!〜

アクセンチュア・テクノロジー・ソリューションズ
阿尾操
2006/4/6

エンティティに過不足がないかをチェックしよう

 しかし、エンティティの抽出はこれで終わりではありません。この後、抽出したエンティティに過不足がないことをチェックしていきます。

  • エンティティが不足していないか?
  • 不要なエンティティが含まれていないか?

 以降、順番に見ていきましょう。

エンティティが不足していないか?

 不足なくエンティティが抜き出せているかどうかを確認するためには、次の約束事を覚えておくとよいでしょう。

エンティティを見つけ出すことは、「誰が」「何を」「どうする」に該当するものを抜き出すことと同じ。そしてビジネスであれば当然、「どうする」という行為の中で「金」と「時間」が介在するだろう。ER図を見れば業務が分かると豪語する人がいるが、ER図とはビジネスの中で登場する「人」や「物」をその「関係」とともに図示しているものなので、まったくそのとおりだと思う。

 では、「商品」「発送方法」「顧客」「届け先」「支払方法」「配送指定日時」の6つのエンティティを使って、最初に把握した業務ルールを表現できるのかを確認してみましょう。表現しきれない場合は、何かエンティティが不足している証拠です。

 「誰が」は「顧客が」。「何を」は「商品を」。しかし、「どうする」という行為を表現するエンティティがありませんね。この画面は注文確認画面ですから、最も重要な行為である「注文」を忘れてはいけません。では、「注文」エンティティを追加しましょう。

 これで、「顧客」が「商品」を「注文」する、という業務ルールを表現できました。さらに、残りのエンティティを使えば、最初に把握したすべての業務ルールを表現できそうです。

 さぁ、「注文」という「行為」を表現するエンティティが抽出できたところで、次のような約束事も覚えておいてください。

やりとり・活動・行為(どうする)を表現しているエンティティは、同時に「明細エンティティ」を持つことが多い。例えば、注文、受注、出荷、入荷、出庫、入庫などのエンティティは明細エンティティを持つことが多い。

 ここで扱っているエンティティの中にも「注文」エンティティがあるので、新たに「注文明細」エンティティを追加した方がよさそうです。では、「注文明細」とは、画面上のどこで表現されているのかを確認しておきます(図3)。

図3 商品購入画面の注文明細に相当する部分

 このように1つの注文には、複数の注文明細が含まれています。いい換えれば、「注文」エンティティは、1つの注文に対するエンティティですが、「注文明細」エンティティは、1つの注文を「注文商品ごとに分割したもの」だといえます。

 そもそもなぜ「明細」エンティティが必要になるのかについては、本連載の第3回で扱う「正規化」の説明で触れます。ここでは「一度の注文で複数の商品を扱う場合には、『注文』エンティティと併せて『注文明細』エンティティを持つ」ということを覚えておいてください。

 では、ここで「注文」エンティティとセットで、「注文明細」エンティティを追加しておきましょう。

 さらに、補足ですが、エンティティを抽出していると、

あれ?「商品」というカテゴリの中に表示される「Never Too Much / Luther Vandross CD 1,470円」みたいな「具体的な商品のデータ」って、どんな扱いなのだろう? これもエンティティなのかな?

と思う方もいるかもしれません。次のような約束事があります。

エンティティの具体例(インスタンスと呼ぶ)は、エンティティではない。逆にいえば、具体例をまとめて一言で表現しているものがエンティティである。

 そのため、「具体的な商品のデータ」を一言でまとめて表現している「商品」がエンティティになるわけです。

 さらに、ここでもう1つ覚えておいていただきたいことがあります。それは、エンティティは、2種類に大別できるということです。

エンティティ名の後に「〜する」という表現を補ってしっくりくるもの(動詞化できるもの)、つまり「行為」に分類できるものは「イベント系エンティティ」と呼ぶ。一方、しっくりこないもの(動詞化できないもの)は、行為の対象となる「資産」として扱われる「リソース系エンティティ」と呼ぶ。また、前者を「トランザクション系」、後者を「マスタ系」とも呼ぶ。

 今回、抽出したエンティティは以下のように分類できます。

  • イベント系エンティティ……「注文」「注文明細」注1
  • リソース系エンティティ……「商品」「顧客」「届け先」「支払方法」「発送方法」「配送指定日時」
注1:「注文明細する」では違和感があるが、「注文明細」エンティティは「注文」エンティティが存在して初めて存在できるエンティティであるため、「注文」の分類と同じになる。よって「注文明細」も「注文」と同様にイベント系エンティティに分類される。

 続いて、不要なエンティティがないかどうかを確認します。

  2/4

 Index
連載:データベースエンジニアへの道(2)
 30分間データモデリング 〜ER図を描こう!〜
  Page 1
・はじめに
・お題はオンラインショップの商品購入
・ER図を描き上げるまでのプロセスは4つ
・業務ルールを把握しよう
・エンティティを抽出しよう
Page 2
・エンティティに過不足がないかをチェックしよう
  エンティティが不足していないか?
  Page 3
  不要なエンティティが含まれていないか
  Page 4
・リレーションシップを設定しよう
・まとめ


データベースエンジニアへの道

TechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH