Data Centric Art Gallery Banner
一つ前のページへ次のコラムへ

【誰でも描けるERD】関連の多重度
DOA Evangelist:小見山 昌雄

1.多重度とは

 今回のコラムは、前回コラム「エンティティと関連」で説明した関連に伴う多重度の説明になります。
 今回説明する「多重度」とは、下の図に説明する「部署」と「従業員」の「所属する」と言う関連において、「一つの部署が何人の従業員と関連を持つか」、「一人の従業員がいくつの部署と関連を持つか」を表現するものです。
 なお、「多重度」は、カーディナリティ(cardinality)と英語で呼ばれる場合もありますが意味は同じです。
部署と従業員の関連
 先ず、部署側から考えて見ましょう。
 総務部とか経理部とかシステム部とか、部署は色々ありますが、任意の一部署を想定すると、普通は何人かの従業員が所属しています。
 その状態をビジネスルールで『一つの「部署」にはn人(nは1以上の任意の数を表します)の「従業員」が所属している』と表現し、ER図では以下のように描きます。
部署と従業員の関連
 「あれ?、部署側の多重度を書き忘れている」と思った方居ませんか。 書き忘れている訳ではありません。
 関連の多重度は、基準とするエンティティ側(ここでは部署側)は常に1で考えているのでER図上には表現する必要が無いのです。
 と言う訳で、前述のビジネスルールで描けるER図はここまでになります。
 次に、従業員側から考えて見ます。
 山田さん、佐藤さん、田中さんと従業員は大勢いますが、任意の一従業員を想定すると、普通は何れか一つの部署にのみ所属しています。
 その状態をビジネスルールで『一人の「従業員」は一つの「部署」に所属している』と表現し、ER図では以下のように描きます。
部署と従業員の関連
 そして、ER図では、「部署」と「従業員」の双方向からの関連を表現しているので、前述の2つのビジネスルールが図上で合成され次のER図として表現されます。
部署と従業員の関連
 両方のエンティティそれぞれから見た、2つのビジネスルールを合成していると言うことについては良いでしょうか。
 これをまとめて表現すると『「部署」と「従業員」の間に1:nの関連がある』などとなりますが、これは最初に説明したビジネスルール『一つの「部署」にはn人(nは1以上の任意の数を表します)の「従業員」が所属している』とは違うので注意しましょう。
 多重度は、簡単ですが落ち着いて考えないと混乱するので、多重度を設定する場合は、自分が今どちらのエンティティを基準に考えているのかをはっきり認識しながら、こちらのエンティティ1件に対して関連する相手エンティティの数(厳密に表現するとインスタンスの数)を、関連を表わす線の相手側に書きます。
部署と従業員の関連
 以上、関連名に意味のある、リソースエンティティ間の関連について、多重度を説明してきました。
 続いて、多重度の種類について説明します。

2.多重度の種類

 多重度の種類としては、1とnしかありません。
(対応件数を3とか5とか具体的な数字や、2から5などと範囲で示す場合もありますが、それらの情報は、もっぱらデータベースの実装やプログラムの仕様決定に用いるものなので、概念モデルの段階から考える必要はないでしょう。
 「部署」と「従業員」の関係で考えると、「一つの部署に従業員が一人しか居ないか、複数人居るか。」、 「一人の従業員が一つの部署にしか所属しないか、複数の部署に所属(兼務)するか」の違いとなります。
 良く、関連の多重度を説明するのに、1:1、1:n、n:nの関係と言う表現をしますが、これはどちらのエンティティを基準に考えても、両方1:1の場合は1:1、1:1と1:nの組み合わせが1:n、1:nと1:nの組み合わせが、n:nとなります。
 以下に、部署を基準とした多重度を図で説明します。
多重度1:n 部署と従業員の関連 1:n
・それぞれの部署に複数人の従業員が所属している。  部署と従業員の関連例1
部署と従業員の関連例2
多重度1:1  部署と従業員の関連 1:1
・それぞれの部署に従業員は一人しか居ない。  部署と従業員の関連例3
部署と従業員の関連例4
多重度n:n 部署と従業員の関連 n:n
・それぞれの部署に複数人の従業員が所属しているが、 複数の部署を兼務する従業員もいる。 部署と従業員の関連例5
部署と従業員の関連例5
 もちろん、同様に従業員を基準にした図も描けますが、同じことなので必要ないでしょう。 

3.対応しない場合

 部署と従業員の関係が1:nの場合、従業員は必ず何れか一つの部署に所属しています。
 そのため、「新入社員は3か月の新入社員研修後に、適正を見て配属を決めよう」という場合なども、「どこにも所属していない」と言う状態に出来ないので、「取りあえず、全員人事部所属で発令して」となります。
 この、「従業員には、どの部署にも所属していない者もいる」状況を表現するのが、任意性・オプショナリティ(optionality)の表現で、従業員の所属する部署の数は「0か1」と表現します。
部署と従業員の関連 0..1:n
  兼務する場合もあるが、所属しないこともあるは「0かn」となります。
部署と従業員の関連 0..n:n
  では、「従業員は全員部署に所属していない」と言うビジネスルールなら、どう描くでしょうか。
部署と従業員の関連 0:n
 この図のように「0」と言うことはあり得ないので注意しましょう。
 「従業員は全員部署に所属していない」と言うビジネスルールなら、そもそも部署と従業員の間に、所属すると言う関連自体が成立しません。

4.多重度の表記

 さて、多重度について何を書くかはご理解頂けたと思いますが、どう書くかについてはそれぞれの書き方の作法によってかなり違います。
 「0かn」などと書いてたのは、分かり易く説明するためで、図に「0かn」などと書く表記法は存在しません。
 ER図は、「俺は、このビジネスをこう見てるんだ」と言う概念をモデルにぶつけて可視化する訳ですから、作図自体は直感的に筆が進むようで無ければ話になりません。
 四角の中に名前を描いてエンティティを表わし、エンティティを線で結んで関連を表わすところで、思考にストップを掛ける要素はありませんが、多重度は表記法によってはつまづくことがあります。
 もちろん手書きで作る場合や、データモデル作成ツールを使う場合は何も問題はありませんが、ワープロや表計算ソフト、汎用的な作図ソフトなどを使ってパソコンで作る場合、凝った図形を用いる表現は避けた方が良いでしょう。
 私は、専用ツールで一般に鳥の足と言われる多重度表記を使っています。 一目で多重度の関係が分かるので便利ですが、ワープロなどで書くのは難しいと思います。
 そう言う意味でお勧めなのが、UMLのクラズ図で使われている多重度表現です。
 クラズ図では、「1」は「1」、「n」は「*」と表現するのでキーボードの文字で多重度を表現出来るので作図は楽です。
 但し、「1」は1ですが、「*」はゼロを含むので、このコラムで説明した「n」(1以上)を表現するためには、「1..*」と書かなければなりません。
UMLの多重度表記ルール  ゼロ以上
  1..* 1 以上
  0..1 ゼロまたは 1
  1 1
  ダッシュでつないだ2 つの数字 範囲
 ER図の表記法は沢山ありますが、多重度でn件と言った場合は、通常1〜nを意味するので、このUMLの*が0〜nを意味すると言うことが、どうもしっくり来ません。
 本格的にプロジェクトや社内でER図をコミニュケーションツールとして流通させる場合は、表記法を規定する必要があるので、UML表記を参考に、下記のような表現を規定しておけば、グッと使い易い表記法になると思います。
1以上
0..* 0 以上
0..1 ゼロまたは 1
1 1


5.まとめ

 例えば、商品を納品する場合の一括か分納か、支払う場合に一括か分割か、請求は受注ごとか月ごとかなど、多重度はER図の重要な表現要素です。
 エンティティと関連と多重度、基本的なER図の表現要素はこれで全てです。
 次回は、ビジネスルールとER図を対比して、表現例を解説します。

このページのトップへ