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