エンティティAとエンティティBの間に何らかの関連が存在していたとします。エンティティAから見てエンティティBが複数存在し、エンティティBから見てもエンティティAが複数存在するという場合、エンティティAとエンティティBはN対M関係にあるといいます。
しかし、このN対M関係はデータモデル上、最終的には存在してはならい関係です。
したがって、N対M関係を別の関係で定義する必要があります。(データ管理の内容はそのままで、実現形態を変えてやる必要があります。)
では、どのようにしてN対M関係にあるデータを管理していくのでしょうか?N対M関係が存在する場合、双方の関連データの管理方法としては以下の2通りが考えられます。
一つは、①双方に相手エンティティに関するテーブルを持つ方法で、もう一つは②双方の中間(関連)エンティティを独立させて管理する方法です。
①の双方に相手エンティティに関するテーブルを持つ方法では、自エンティティに相手側エンティティの情報を繰り返しで持つという方法です。
![](https://blogimg.goo.ne.jp/user_image/2c/5b/d1ea6c7f5a724f4cd1067543f4d23c15.png)
(図1)双方に相手エンティティに関するテーブルを持つ方法
②の双方の中間(関連)エンティティを独立させて管理する方法では、独立させたエンティティでデータの組合せを管理するという方法です。
![](https://blogimg.goo.ne.jp/user_image/0e/86/1cdc1236c5b2609422c20a212c3a5c08.png)
(図2)双方の中間(関連)エンティティを独立させて管理する方法
双方に相手エンティティに関するテーブルを持つ方法は、データの重複が発生すること、新たに相手側のレコードが追加された場合対応できない(新規に属性(カラム)を追加させる必要がある)ことから、検索の容易性および保守の柔軟性を阻害するため、双方の中間(関連)エンティティを独立させて管理するようにします。
しかし、このN対M関係はデータモデル上、最終的には存在してはならい関係です。
したがって、N対M関係を別の関係で定義する必要があります。(データ管理の内容はそのままで、実現形態を変えてやる必要があります。)
では、どのようにしてN対M関係にあるデータを管理していくのでしょうか?N対M関係が存在する場合、双方の関連データの管理方法としては以下の2通りが考えられます。
一つは、①双方に相手エンティティに関するテーブルを持つ方法で、もう一つは②双方の中間(関連)エンティティを独立させて管理する方法です。
①の双方に相手エンティティに関するテーブルを持つ方法では、自エンティティに相手側エンティティの情報を繰り返しで持つという方法です。
![](https://blogimg.goo.ne.jp/user_image/2c/5b/d1ea6c7f5a724f4cd1067543f4d23c15.png)
(図1)双方に相手エンティティに関するテーブルを持つ方法
②の双方の中間(関連)エンティティを独立させて管理する方法では、独立させたエンティティでデータの組合せを管理するという方法です。
![](https://blogimg.goo.ne.jp/user_image/0e/86/1cdc1236c5b2609422c20a212c3a5c08.png)
(図2)双方の中間(関連)エンティティを独立させて管理する方法
双方に相手エンティティに関するテーブルを持つ方法は、データの重複が発生すること、新たに相手側のレコードが追加された場合対応できない(新規に属性(カラム)を追加させる必要がある)ことから、検索の容易性および保守の柔軟性を阻害するため、双方の中間(関連)エンティティを独立させて管理するようにします。
※コメント投稿者のブログIDはブログ作成者のみに通知されます