
商品や製品の構成を管理する場合もパターンがあります。
例えば、複数の商品を組み合せパッケージとして販売することがあります。テーブルとソファーをセットで応接セットとして販売するといった場合です。
その場合、テーブルやソファー単体で販売することもありますし、応接セットという商品として販売することもあります。
従って、“商品”の中には、テーブルやソファーといった単体の商品とセット商品が混在していることになります。

(図1)商品テーブルイメージ
セット商品については、各単品の商品のどれとどれのセットなのか、それぞれその数量はいくつなのかがわかるようになっていなければなりません。(例えば、各商品別の原価を計算する場合、セット商品として何個販売したかという情報だけではなく、そのセット商品の中に単品の商品がそれぞれ何個含まれているかという情報が必要になってきます。)
セット商品には、複数の単品の商品が含まれていますし、ある単品の商品は複数のセット商品として構成されています。
ある商品(セット商品)はさまざまな商品(単品商品)から構成され、また逆に、ある商品(単品商品)はさまざまな商品(セット商品)の構成品として使用されることがあります。従って、商品と商品との間に多対多の関係が存在することになります。
そこで、“商品”と“商品”との間に“構成品”をいう中間(関連)エンティティを追加し、1対Nに分解します。

(図2)セット商品
図3は、商品構成(セット商品)の例ですが、”応接イス”、”アームチェアー”、”テーブル”、”応接セットA”、”応接セット3点セット”、”会議セットG1”もともに商品となります。

(図3)セット商品のテーブルイメージ
また、”応接セットA”、”応接セット3点セット”は複数の単品商品の組合せで構成されており、”応接セットA”は、応接イスが4つ、テーブルが一つで構成されているセット商品であることを、”応接セット3点セット”は、応接イスが2個、テーブルが1個、アームチェアーが1個から構成されているセット商品であることを表現しています。
商品構成というエンティティで商品と商品の組み合わせを管理しているというものですが、実は商品と商品の構成を管理するというのは、他にもいろいろあります。
例えば、ある商品が存在しなかった場合は、別の商品を出荷するというケースで、A商品が不足していた場合は、B商品を出荷する。
さらに、B商品が存在しなかったら、C商品を出荷するというデータを管理したいといった場合は、ある商品の代替商品は複数存在することになりますし、ある商品はさまざまな商品の代替商品となりうるということであれば、商品と代替商品の間にN対M関係が存在することになります。
N対M関係が存在する場合は、中間(関連)エンティティを追加し1対Nに分解します。また、代替商品それ自体も商品ですから、商品エンティティとして統合すると、図4のような構造になります。

(図4)代替商品
製造業における部品表(BOM)も同様の構造になるはずです。
ある部品は複数のさらに小さな部品から構成されていますし、ある部品(共通部品)はさまざまなより大きな部品で使用されていることがあります。
その場合、部品と部品との間にN対M関係が存在することになりますので、1対N関係に分解すると、図5のようになります。

(図5)部品構成
これらのデータ構造を見てみると、”商品”と”構成”を管理するエンティティ間に2本の1対N関係が存在するという構造になっています。
ということは、これらの関係を管理するデータの構造を一つに集約できるということです。

(図6)商品構成の汎化パターン
この”商品構成”エンティティのサブタイプとして、”セット商品”、”代替商品”、”部品構成”といったエンティティを追加し、それぞれに必要な項目を属性として持たせればいいわけです。
<<構成関係の関連説明>>
例えば、複数の商品を組み合せパッケージとして販売することがあります。テーブルとソファーをセットで応接セットとして販売するといった場合です。
その場合、テーブルやソファー単体で販売することもありますし、応接セットという商品として販売することもあります。
従って、“商品”の中には、テーブルやソファーといった単体の商品とセット商品が混在していることになります。

(図1)商品テーブルイメージ
セット商品については、各単品の商品のどれとどれのセットなのか、それぞれその数量はいくつなのかがわかるようになっていなければなりません。(例えば、各商品別の原価を計算する場合、セット商品として何個販売したかという情報だけではなく、そのセット商品の中に単品の商品がそれぞれ何個含まれているかという情報が必要になってきます。)
セット商品には、複数の単品の商品が含まれていますし、ある単品の商品は複数のセット商品として構成されています。
ある商品(セット商品)はさまざまな商品(単品商品)から構成され、また逆に、ある商品(単品商品)はさまざまな商品(セット商品)の構成品として使用されることがあります。従って、商品と商品との間に多対多の関係が存在することになります。
そこで、“商品”と“商品”との間に“構成品”をいう中間(関連)エンティティを追加し、1対Nに分解します。

(図2)セット商品
図3は、商品構成(セット商品)の例ですが、”応接イス”、”アームチェアー”、”テーブル”、”応接セットA”、”応接セット3点セット”、”会議セットG1”もともに商品となります。

(図3)セット商品のテーブルイメージ
また、”応接セットA”、”応接セット3点セット”は複数の単品商品の組合せで構成されており、”応接セットA”は、応接イスが4つ、テーブルが一つで構成されているセット商品であることを、”応接セット3点セット”は、応接イスが2個、テーブルが1個、アームチェアーが1個から構成されているセット商品であることを表現しています。
商品構成というエンティティで商品と商品の組み合わせを管理しているというものですが、実は商品と商品の構成を管理するというのは、他にもいろいろあります。
例えば、ある商品が存在しなかった場合は、別の商品を出荷するというケースで、A商品が不足していた場合は、B商品を出荷する。
さらに、B商品が存在しなかったら、C商品を出荷するというデータを管理したいといった場合は、ある商品の代替商品は複数存在することになりますし、ある商品はさまざまな商品の代替商品となりうるということであれば、商品と代替商品の間にN対M関係が存在することになります。
N対M関係が存在する場合は、中間(関連)エンティティを追加し1対Nに分解します。また、代替商品それ自体も商品ですから、商品エンティティとして統合すると、図4のような構造になります。

(図4)代替商品
製造業における部品表(BOM)も同様の構造になるはずです。
ある部品は複数のさらに小さな部品から構成されていますし、ある部品(共通部品)はさまざまなより大きな部品で使用されていることがあります。
その場合、部品と部品との間にN対M関係が存在することになりますので、1対N関係に分解すると、図5のようになります。

(図5)部品構成
これらのデータ構造を見てみると、”商品”と”構成”を管理するエンティティ間に2本の1対N関係が存在するという構造になっています。
ということは、これらの関係を管理するデータの構造を一つに集約できるということです。

(図6)商品構成の汎化パターン
この”商品構成”エンティティのサブタイプとして、”セット商品”、”代替商品”、”部品構成”といったエンティティを追加し、それぞれに必要な項目を属性として持たせればいいわけです。
<<構成関係の関連説明>>
※コメント投稿者のブログIDはブログ作成者のみに通知されます