30分でわかるER図の書き方 (6)

前回に引き続き、IDEF1X形式のER図について説明します。今回は、エンティティの種別とリレーションシップの種別について、詳細を説明します。
前回: id:simply-k:20100707:1278514635
次回: id:simply-k:20100710:1278713401
目次: id:simply-k:20100716:1279237959

親エンティティと子エンティティ

まずはじめに、親エンティティ(parent entity)と子エンティティ(child entity)について説明します。「1対多」または「1対1」のリレーションシップでは、片方のエンティティを親エンティティ、もう片方のエンティティを子エンティティと呼びます。*1

「1対多」の場合

「1対多」のリレーションシップにおける親エンティティと子エンティティの定義は、次の表のようになります。

分類 定義
親エンティティ 「1」の側のエンティティ
子エンティティ 「多」の側のエンティティ
「1対1」の場合

「1対1」のリレーションシップを「1対多」のリレーションシップの特殊形と考え、片方を親エンティティ、もう片方を子エンティティと見なします。*2 ここで問題となるのは、どちらが親でどちらが子なのかを決める方法なのですが、明確な指針は無いようです。一般的には、ER図の書き手の判断によって決定されるものと思われます。*3

依存リレーションシップと非依存リレーションシップ

次に、依存リレーションシップ(identifying relationship)と非依存リレーションシップ(non-identifying relationship)について説明します。親エンティティと子エンティティの間のリレーションシップは、依存リレーションシップと非依存リレーションシップに分類されます。それぞれの定義は、次の表のようになります。

分類 定義
依存
リレーションシップ
子エンティティの主キー属性が、
親エンティティの全ての主キー属性を含んでいるような
リレーションシップ
非依存
リレーションシップ
エンティティが親子関係を持つが、
依存リレーションシップの定義にあてはまらない
リレーションシップ

依存リレーションシップの例です。

「受注」が親エンティティ、「受注明細」が子エンティティです。「受注明細」の主キーに、「受注」の主キーである「受注ID」が含まれています。このため、このリレーションシップは依存リレーションシップとなります。

非依存リレーションシップの例です。

この場合も、「受注」が親エンティティ、「受注明細」が子エンティティです。「受注明細」の主キーは、「受注」の主キーである「受注ID」を含みません。(「受注ID」は単なる外部キー) このため、このリレーションシップは非依存リレーションシップとなります。

親子関係と依存関係について補足しておきます。

  • エンティティ間に親子関係(1対多の関係)があるからといって、依存関係があるとは限らない。
  • エンティティ間に依存関係がある場合、必ず親子関係が存在する。
    そして、子エンティティが親エンティティに依存している。

独立エンティティと従属エンティティ

最後に、独立エンティティ(independent entity)と従属エンティティ(dependent entity)について説明します。独立エンティティと従属エンティティの定義は、次の表のようになります。

分類 定義
独立
エンティティ
関わりのあるリレーションシップの全てにおいて、
もう片方のエンティティに依存していない
(つまり、依存リレーションシップで子エンティティになっていない)
ようなエンティティ
従属
エンティティ
関わりのあるリレーションシップの1つ以上において、
もう片方のエンティティに依存している
(つまり、依存リレーションシップで子エンティティになっている)
ようなエンティティ

これだけだと理解しにくいと思いますので、具体的な例で説明します。


エンティティ 独立/従属 関わりのあるリレーションシップ
顧客 独立 非依存リレーションシップのみ
商品 独立 非依存リレーションシップのみ
受注 独立 非依存リレーションシップ、依存リレーションシップ(親)
受注明細 従属 非依存リレーションシップ、依存リレーションシップ(子)

上の図の中では、「受注明細」のみが依存エンティティとなります。どれか1つのエンティティに依存した時点で、そのエンティティは従属エンティティとなります。(複数のエンティティに依存するような従属エンティティもありえます。)

ER図での表記

独立エンティティ、従属エンティティ、非依存リレーションシップ、依存リレーションシップの表記に関しては、前回の記事を参照してください。


次回は、IDEF1Xでのカーディナリティの表記について説明します。
前回: id:simply-k:20100707:1278514635
次回: id:simply-k:20100710:1278713401
目次: id:simply-k:20100716:1279237959

*1:「多対多」の場合は、親子関係は存在しません。

*2:カーディナリティの表記に影響します。

*3:より基本的な方を親とするのだと思います。