![](https://blogimg.goo.ne.jp/user_image/51/32/a57457513c3360aad7e63c241cfb960e.png)
構成関係とは、ある1つのオカレンスが複数の別オカレンスかで構成される自分自身である場合をいいます。
前述しましたが、この構成関係という関係は1対Nのバリエーションです。
自己参照の説明で”上司社員”と”部下社員”の関係を例に説明しましたが、構成関係についても、”上司社員”と”部下社員”の関係で説明していきます。
上司には、複数の部下が存在しますが、逆に部下からみても、複数の上司が存在しているはずです。(直属の上司は一人かもしれませんが、さらにその上位の上司が存在し、その人も上司であるからです。)
その場合、”上司社員”と”部下社員”との間にはN対M関係が存在することになります。
N対M関係が存在する場合には、中間(関連)エンティティを追加して、1対Nに分解することは、前述しました。
ここでも同様に、中間(関連)エンティティとして”上司・部下関係”というエンティティを追加します。
さらに、上司社員も部下社員も同じ社員であるということは変わりありません、また、社員は上司でもあり部下でもあるという関係があります。 そこで、”上司社員”も”部下社員”も同じ”社員”というエンティティに統合します。そうすると、”社員”と”上司・部下関係”エンティティが残り、その間に2つの従属関係が存在することになります。
![](https://blogimg.goo.ne.jp/user_image/5f/ac/59c6056e7b52466b71f671fcfc4df011.png)
(図1)構成関係
結果的に、上位エンティティと2つの1対N関係を持つことになりますが、1つの1対N関係が参照関係であることもあります。
![](https://blogimg.goo.ne.jp/user_image/28/43/db9b63c686474faf8d9d06d088401381.png)
(図2)2つの1対N関係
自己参照との違いですが、以下の点があげられます。
●上位エンティティが複数存在していてもこの構成関係であれば管理できます。
●管理したい関係が増えた場合、レコードを追加することで対応できます。(自己参照の場合は、リレーション(参照キー)を追加する必要があります。)
以下に構成関係の例を示します。
【商品構成(セット商品)】
![](https://blogimg.goo.ne.jp/user_image/46/64/056fe5cfff9781e34b15777949851777.png)
(図3)商品構成(セット商品)の例
ロースハム、ボンレスハム、焼きブタ、ギフトAセット、ギフトBセットもともに商品ですが、ギフトAセット、ギフトBセットは複数の単品商品の組合せで構成されているという例です。ギフトAセットは、ロースハム、ボンレスハム、焼きブタがそれぞれ1個づつで構成されているセット商品であることを、ギフトBセットは、ロースハムが2個、ボンレスハムが1個で構成されているセット商品であることを表現しています。
【考課者】
![](https://blogimg.goo.ne.jp/user_image/09/c0/566719b82e049968de7876e4da1ac774.png)
(図4)考課者の例
上の例は社員の組合せで考課順を持つという構成となっていますが、下の例は社員の考課順単位に、考課者の社員コードを持つという構成になっています。
前述しましたが、この構成関係という関係は1対Nのバリエーションです。
自己参照の説明で”上司社員”と”部下社員”の関係を例に説明しましたが、構成関係についても、”上司社員”と”部下社員”の関係で説明していきます。
上司には、複数の部下が存在しますが、逆に部下からみても、複数の上司が存在しているはずです。(直属の上司は一人かもしれませんが、さらにその上位の上司が存在し、その人も上司であるからです。)
その場合、”上司社員”と”部下社員”との間にはN対M関係が存在することになります。
N対M関係が存在する場合には、中間(関連)エンティティを追加して、1対Nに分解することは、前述しました。
ここでも同様に、中間(関連)エンティティとして”上司・部下関係”というエンティティを追加します。
さらに、上司社員も部下社員も同じ社員であるということは変わりありません、また、社員は上司でもあり部下でもあるという関係があります。 そこで、”上司社員”も”部下社員”も同じ”社員”というエンティティに統合します。そうすると、”社員”と”上司・部下関係”エンティティが残り、その間に2つの従属関係が存在することになります。
![](https://blogimg.goo.ne.jp/user_image/5f/ac/59c6056e7b52466b71f671fcfc4df011.png)
(図1)構成関係
結果的に、上位エンティティと2つの1対N関係を持つことになりますが、1つの1対N関係が参照関係であることもあります。
![](https://blogimg.goo.ne.jp/user_image/28/43/db9b63c686474faf8d9d06d088401381.png)
(図2)2つの1対N関係
自己参照との違いですが、以下の点があげられます。
●上位エンティティが複数存在していてもこの構成関係であれば管理できます。
●管理したい関係が増えた場合、レコードを追加することで対応できます。(自己参照の場合は、リレーション(参照キー)を追加する必要があります。)
以下に構成関係の例を示します。
【商品構成(セット商品)】
![](https://blogimg.goo.ne.jp/user_image/46/64/056fe5cfff9781e34b15777949851777.png)
(図3)商品構成(セット商品)の例
ロースハム、ボンレスハム、焼きブタ、ギフトAセット、ギフトBセットもともに商品ですが、ギフトAセット、ギフトBセットは複数の単品商品の組合せで構成されているという例です。ギフトAセットは、ロースハム、ボンレスハム、焼きブタがそれぞれ1個づつで構成されているセット商品であることを、ギフトBセットは、ロースハムが2個、ボンレスハムが1個で構成されているセット商品であることを表現しています。
【考課者】
![](https://blogimg.goo.ne.jp/user_image/09/c0/566719b82e049968de7876e4da1ac774.png)
(図4)考課者の例
上の例は社員の組合せで考課順を持つという構成となっていますが、下の例は社員の考課順単位に、考課者の社員コードを持つという構成になっています。
最近、このブログを見つけました。3月分から読み進めていますが、まだまだ分からないことばかりです。
細かい質問なのですが・・・、
(図4)考課者の例がありますが、説明では下の例は社員の考課順単位に、考課者の社員コードを持つという構成になっています。
と書いてありますが、図のほうがそうなってないように思えますが如何でしょうか?私の理解力が足りないような気もしますので、教えていただけらと思います。【考課者】テーブルで、KEYである社員コードが「001」、考課順位が「2」の場合、考課者社員コードは、「001」ではなく、「003」と思ったのですが、如何でしょうか?
間違いでした。
【考課者】テーブルのレコードイメージとしては、
社員コード,考課順位,考課社員コード
0003,1,0002
0003,2,0001
0002,1,0001
です。