0

次のオブジェクト モデルがあります。

class ObjectA{
    public string Description {get;set;}
}

class ObjectB{
    public string Description {get;set;}
    public ObjectA A {get;set;}
}

class ObjectC{
    public string Description {get;set;}
    public ObjectB B {get;set;}
}

class ObjectD{
    public string Description {get;set;}
    public ObjectC C {get;set;}
    public ObjectA A {get;set;}
}

私のテーブルは次のとおりです。

A: ID(整数)、説明(文字列)

B: ID(整数)、説明(文字列)、A_ID(整数)

C: ID(整数)、説明(文字列)、B_ID(整数)

D: ID(整数)、説明(文字列)、C_ID(整数)、A_ID(整数)

テーブル D の A_ID は、テーブル A の主キーへの外部キーです。これは元々 、 :ObjectAから簡単にアクセスできるようにするために行われました。これにより、データベースを非正規化するこの方法でアクセスするすべてのテーブルに、テーブル A の ID を追加する必要があります ( があり、すべてが に簡単にアクセスしたいと想像してください)。この場合、 は常に への参照を持ちます。ObjectDObjectD.AObjectAObjectEObjectFObjectAObjectBObjectA

すべてのテーブルで A_ID への参照を取り除きたいのですがObjectA、クラスから簡単にアクセスできるようにしたいと考えています。ObjectD.ObjectC.ObjectB.ObjectA必要なときに取得できることはわかっていObjectAますが、それはオブジェクトを遅延読み込みする目的を無効にしているようです。

のテーブルに の IDを持たずに にObjectD直接アクセスできるようにするには、どのようにマッピングすればよいですか?ObjectAObjectAObjectD

注:クラスをマップするために hbm/xml ファイルを使用しています。

4

1 に答える 1

1

パフォーマンス上の理由から冗長データを使用しているか、そうでないかのどちらかのようです。第三の選択肢が思いつきません。(しかし、この見解を修正するかもしれない、より優れた NHibernate の頭脳がそこにはあります)。

これらのオブジェクトの読み取りが書き込みよりもはるかに多く、ユースケースで ObjectD を使用しているほとんどの時間に ObjectA にアクセスする必要がある場合、冗長性は問題ありません。それ以外の場合は、参照する ObjectD.CBA アプローチがより魅力的になり始めます。

于 2011-04-05T00:21:38.533 に答える