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

今回からは、ER図に関する補足的なトピックを扱います。今回は、再帰リレーションシップについて説明します。
前回: id:simply-k:20100710:1278713401
次回: id:simply-k:20100714:1279071645
目次: id:simply-k:20100716:1279237959

再帰リレーションシップ

同一エンティティ間に存在するリレーションシップは、再帰リレーションシップ(recursive relationship)と呼ばれます。エンティティが再帰リレーションシップを持つということは、そのエンティティのインスタンス間に何らかの関連が存在することを意味します。ここでは、よくある再帰リレーションシップの例として、「1対1」の場合と「1対多」の場合について説明します。

「1対1」の再帰リレーションシップ

一般的に、「1対1」の再帰リレーションシップは、データ間の組を表現します。次のER図は、「1対1」の再帰リレーションシップの例です。「受注明細」エンティティが、再帰リレーションシップを持っています。


次の表は、「受注明細」が持つデータの一例です。

受注明細ID 受注ID 商品ID 数量 単価 赤黒明細ID
... ... ... ... ... ...
12345 12000 A2201 10 300 -
12346 12000 B3005 20 500 12555
12347 12000 C0010 5 150 -
12348 12000 D0700 8 400 -
12555 12000 B3005 -20 500 12346
12556 12000 B3005 30 500 -
... ... ... ... ... ...

上の例では、受注明細ID「12346」の数量が20から30に修正されています。

  • 12346:修正前のデータ
  • 12555:修正前のデータを打ち消すためのデータ
  • 12556:修正後のデータ

「12346」と「12555」のデータが、属性「赤黒明細ID」によって組になっています。

「1対多」の再帰リレーションシップ

一般的に、「1対多」の再帰リレーションシップは、階層構造(木構造)を表現します。次のER図は、「1対多」の再帰リレーションシップの例です。「商品分類」エンティティが、再帰リレーションシップを持っています。


次の表は、「商品分類」が持つデータの一例です。

商品分類ID 商品分類名 階層番号 上位分類ID
10000 食料品 1 -
... ... ... ...
11000 生鮮食品 2 10000
12000 加工食品 2 10000
... ... ... ...
11100 青果 3 11000
11200 精肉 3 11000
11300 鮮魚 3 11000
... ... ... ...
11101 野菜 4 11100
11102 果物 4 11100
... ... ... ...
11201 豚肉 4 11200
11202 牛肉 4 11200
11203 鶏肉 4 11200
... ... ... ...

このデータは、次のような階層構造を表現しています。

  • 食料品
    • 生鮮食品
      • 青果
        • 野菜
        • 果物
        • ...
      • 精肉
        • 豚肉
        • 牛肉
        • 鶏肉
        • ...
      • 鮮魚
        • ...
    • 加工食品
    • ...
  • ...

ER図とデータ例を比較して、「1対多」の再帰リレーションシップにより階層構造を表現できるということを理解してください。


次回は、エンティティ間の複数リレーションシップについて説明します。
前回: id:simply-k:20100710:1278713401
次回: id:simply-k:20100714:1279071645
目次: id:simply-k:20100716:1279237959