1

複数のテーブルから共通のテーブルへの1対多の関係をモデル化するための適切なパターンを見つけようとしています。

EntityA、EntityB、およびその他のエンティティには、1つまたは複数のGenericInfoがあります。

  • EntityA(0..1)------(1..N)GenericInfo
  • EntityB(0..1)------(1..N)GenericInfo
  • EntityC(0..1)------(1..N)GenericInfo

    オプション1:これらのエンティティは異なるため、スーパーテーブルを使用して次のような関係をモデル化することはできません

  • スーパーエンティティ(S_Id pk)
  • EntityA(S_Id pk fk)
  • EntityB(S_Id pk fk)
  • GenericInfo(G_Id pk、S_id fk)


    オプション2:そして、GenericInfoテーブルから外部キー制約を削除することによって参照整合性を失いたくありません。

  • EntityA(S_Id pk fk)
  • EntityB(S_Id pk fk)
  • GenericInfo(G_Id pk、unique_id non-fk)


    オプション3:現在、リレーションシップマッピングにアソシエーションテーブルを使用しています。

  • EntityA(A_Id pk)
  • EntityB(B_Id pk)
  • EntityAInfo(A_Id pk fk、G_Id pk fk)
  • EntityBInfo(B_Id pk fk、G_Id pk fk)
  • GenericInfo(G_Id pk)

    リンク/関係を維持することを目的とするデータベースに作成する必要のあるテーブルが多すぎるため、このソリューションは好きではありません。

    オプション4:私が考えることができるもう1つの方法は、次のような単一のId属性を持つマッピングテーブルを作成することです。

  • EntityA(A_Id pk、I_id fk nullable)
  • EntityB(B_Id pk、I_id fk nullable)
  • InfoMapping(I_Id pk)
  • GenericInfo(G_Id pk、I_Id fk)

    専門家の意見やご意見をお待ちしております。

    ありがとう、

    アップデート

    Vasek、コメントありがとうございます。

    私が解決しようとしている問題は次のとおりです。オブジェクトのコレクションを公開するインターフェイス実装のオブジェクトリレーショナルマッピングを確立するにはどうすればよいですか。

    ORマッピングには、クラス戦略ごとに1つのテーブルを使用しています。したがって、例の各テーブルはクラスからマップされます。次の型の定義とテーブルがあるとします(ここにディスグラムを投稿できないのは残念です)


    パブリックインターフェイスIGenericInfoProvider
    {
    GenericInfo[] GenericInfoArray {get; set;}
    }


    パブリッククラスBaseClassForA{}---------------------------------------------テーブルBaseEntityForA
    パブリッククラスBaseClassForB{}------------------------------------------- --テーブルBaseEntityForB
    パブリッククラスClassA:BaseClassForA、IGenericInfoProvider {} ---テーブルEntityA
    パブリッククラスClassB:BaseClassForB、IGenericInfoProvider{}---テーブルEntityB
    パブリッククラスGenericInfo{}------------- ---------------------------------------テーブルGenericInfo

    EntityA/EntityBとGenericInfoの間の1対多の関係をモデル化しようとしています。この種の関係は、私たちのドメインモデルではかなり一般的です。
    Option1は、多くのテーブルからのすべてのIDを含むスーパーテーブルを作成することにつながるため、考慮されません。これは、OOの世界では意味がありません。
    Option2は、参照整合性のために受け入れられません。
    Option3は私が現在使用しているパターンです。 Option4
    を検討していますが、それが正しい方向へのアプローチであるかどうかはわかりません。

  • 4

    2 に答える 2

    1

    何を達成したいのかわかりませんが、データベース設計ツールを使用して、テーブル、主/外部/代替キー、複合キー、関係などの構造を作成すると役立つと思います。千の言葉:)そして、さまざまなデザインをすばやく作成し、SQLコードを生成し、サンプルデータを保存する方法を考えることができます.

    私にとって、最初のシナリオ (オプション 3) は M:N の関係を表しているようです。2 番目のシナリオ (オプション 4) は別のシナリオを表しています。つまり、参照整合性が異なるため、2 つのシナリオは比較できません。

    サンプル データベースを作成し、サンプル レコードを挿入し、クエリを記述してみてください。

    于 2012-06-15T13:42:18.597 に答える