web-dev-qa-db-ja.com

3面の多対多の関係設計

私は互いに関連している3つのエンティティがあります。私のエンティティは:

  1. オプション
  2. 予定
  3. 価格

関係:

  • PLANとOPTIONには多対多の関係があります
  • PLANとOPTIONのマップはPRICEと多対多の関係にあります

どのプランにもいくつかのオプションがあります。 1つのプランのオプションには、いくらかの価格があります。

私の可能な解決策:

  • PLAN_OPTION_MAPテーブルを作成し、それをPRICEとマッピングしてPLAN_OPTION_MAP_PRICE_MAPテーブルを作成できます。 Solution 1
  • 3つのテーブルすべてのIDでPLAN_OPTION_PRICE_MAPテーブルを作成できます。これらのテーブルの複合によって主キーが作成されます。

どちらがより良い解決策ですか?

2
iman

プランとオプションの任意の組み合わせが可能です。いいよここに質問があります:(P、O)の特定の組み合わせに特定の価格がありますか? 3方向交差テーブルはあなたの答えの1つであるため、そうであるように思われます。

おそらく、このように考える方が明確でしょう。交差テーブルには、(一般的に)2つの異なるテーブルに関連する2つのキーがあり、これらのテーブルで表されるエンティティ間の多対多の関係を定義します。交差テーブルで定義されている追加のフィールドは、関係の属性であり、どちらのエンティティの属性でもありません。たとえば、関係が形成された日付。

あなたの場合、価格は関係(P、O)の属性のようです。 ( "thisプランとthisオプションの組み合わせには価格Pがあります。")これはもちろん、それ自体のFK参照である可能性がありますが、価格行の構成について。価格はかなりアトミックな値のようです。

1
TommCatt

最初の解決策は、いくつかのインスタンスが関係に参加しないことを知っている場合に良いと思います。しかし、2番目のソリューションはどうでしょうか?すべてのインスタンスが関係に参加していると確信している場合、それは良いことだと思います。あなたが最初にできることは、あなたの問題を分析することです。

1
inverted_index