ER図(EntityRelationDiagram)


各例は、業務ルールなどの暗黙の前提があって 初めて成り立つものもありますが、 特に前提条件を詳述するのは避けました。 厳密な内容よりも、エンティティ間の構造を理解するようにして下さい。
■E-R図
エンティティ(実体)間の関連を、
のいずれかに整理する。
この対応関係を
カーディナリティ
と言う。
左図の下線はキー属性を表す。
カーディナリティを判断するには、2つのエンティティについて、 を調べる必要がある。
図示した例を各々調査してみよう。
「部員」対「ホームページ」
よって、部員とホームページは1対1のカーディナリティを持つ。
「部員」対「所有機器」
よって、部員と所有機材は、1対多のカーディナリティを持つ。
「部員」対「業務」
よって、部員と(担当)業務は、多対多のカーディナリティを持つ。
多対多のカーディナリティがある場合には、エンティティのデータが きちんと正規化されていないのでは、と検討してみるとよい。 今、部員と(担当)業務の例で、正規化を試みよう。
  1. 部員には、(業務番号,担当時間)の繰り返しコードが 含まれるため、これを(部員番号、業務番号、担当時間)の エンティティに分離して第一正規形にする必要がある。
  2. (部員番号、業務番号、担当時間)について、 連結キーである部員番号、業務番号の両方が決まらないと 担当時間も決まらない。つまり、非キー属性が主キーに 対して完全関数従属になっており、 これで第二正規形の条件も満たしている。
  3. 他に属性もないので、従属関係にある非キーも無い。 つまり、推移的に関数従属な関係も存在しない。 従って、これで第三正規形の条件も満たしている。
こうして出来た(部員番号、業務番号、担当時間)のエンティティを 「担当」と呼ぶことにする。この、「担当」という、ちょっと 抽象的なエンティティ(実体)が分かりづらいが、 要するに「誰か1人の部員が、1つの業務を"担当"する、という 事実(実体)」に対応する記録(レコード)を表すものである。

「部員」対「担当」
よって、部員と担当は、1対多のカーディナリティを持つ。
「担当」対「業務」
よって、担当と業務は、多対1のカーディナリティを持つ。
■E-R図(鳥脚図法)
特に、あるエンティティに
複数のエンティティが
関連している時に、
その関連のあり方を
表現できる図法である。
以下、図示した各例に沿って記号の意味を解説する。
  1. 1対1結合
    一人の夫に対しては、一人の妻しか対応しない。 同様に、一人の妻には、対応する夫は一人しかいない。 つまり、夫と妻は1対1に結合している。
    一夫多妻制の場合は、一対多対応になるわけだが…。
  2. 多対1結合
    一人の召使に対しては、主人は一人しかいない。 逆に、一人の主人は、複数の召使を持ちうる。 つまり、召使と主人は多対1に結合している。
  3. 選択
    あるエンティティに対して、関連する複数のエンティティ「それぞれ」で、 対応関係があるかもしれないし、ないかもしれない時、これらは 「選択」の関係にあるという。
    飼っているペットに対して、ある犬との関係は、あるかもしれないし、 ないかも知れない。また、猫についても同様である。
    「選択」は、後述の「相互排他」や「相互包括」と違って、 関連する(かもしれない)複数のエンティティそれぞれの関係は独立して いる(つまり相互には関係がない)。犬だけ飼ってるかもしれないし、 両方飼っているかもしれないし、何も飼っていないかもしれない。
  4. 相互排他
    あるエンティティに関して、関連する複数のエンティティのうち、 どれか一つに対応関係を持ち、その他のエンティティには対応関係が無い。 つまり、たった一つのエンティティにのみ関係を持つ。
    今日の晩飯について、寿司を取ったら肉定食との関係はなくなる。 逆に、肉定食を食べれば、寿司は食べない。
    この例題では、両方食べるぞ!という大食漢はいない、と前提している。
  5. 相互包括
    あるエンティティに関して、関連する複数のエンティティのうち、 どれか一つに対応関係を持てば、その他のエンティティすべてにも 対応関係がある。つまり、対応関係はオールorナッシングになる。
    晩飯の食卓にごはんがのれば、茶わんもあるだろう。茶わんがあるからには ごはんも出るだろう。
    この例題では、和食に限っており、ライスが皿にのって出てくるような場合は 考慮しない、と前提している。(例題としてはちょっと苦しいかな)
これまでの解説をもとに、
右図の場合を検証してみよう。