私はいくつかのグーグルをしましたが、私はまだ解決策を見つけていません、あるいは私の問題に対する決定的な答えさえ見つけていません。
問題は単純です。動的に名前が付けられた/作成されたオブジェクトのインスタンスごとにテーブルを動的に作成したいと思います。各テーブルには、オブジェクトに固有のレコードが含まれます。これは本質的にアンチパターンであることを認識していますが、これらのテーブルは理論的には非常に大きくなる可能性があるため、すべてのデータを1つのテーブルに含めるとパフォーマンスの問題が発生する可能性があります。
より具体的な例:
トランザクションのコレクションを含む基本クラス/インターフェースACCOUNTがあります。私のソフトウェアを使用する会社ごとに、クラスの新しい具体的なバージョン、BOBS_SUB_SHOP_ACCOUNTまたはSAMS_GARAGE_ACCOUNTなどを作成します。したがって、クラスの識別値はクラス名であり、クラス内のフィールドではありません。
私はC#とFluentnHibernateを使用しています。
だから私の質問は:
- これは理にかなっていますか、それとももっと明確にする必要がありますか?(または、本当にしてはいけないことをしようとしていますか?)
- このパターンには名前がありますか?
- nHibernateはこれをサポートしていますか?
- 私が読むことができるパターンに関するドキュメントを知っていますか?
編集:これについてもう少し考えてみたところ、動的オブジェクトは本当に必要ないことに気づきました。必要なのは、NHibernateを介して何らかの識別子を持つオブジェクトをテーブルに結び付ける方法です。例えば:
//begin - just a brain dump
public class Account
{
public virtual string AccountName { get; set; }
public virtual IList Stuff { get; set; }
}
... somewhere else in code ...
//gets mapped to a table BobsGarageAccount (or something similar)
var BobsGarage = new Account{AccountName="BobsGarage"};
//gets mapped to a table StevesSubShop(or something similar)
var StevesSubShop = new Account{AccountName="StevesSubShop"};
//end
NHibernateがそれを許可すると仮定すると、それは私が必要とするものには十分なはずです。アカウントテーブルで大量のボリュームが発生した場合に、1つの巨大なテーブルがそれを打ち負かすような状況を回避しようとしています。すべてのアカウントが1つのテーブルにある場合、それは醜い可能性があります。
前もって感謝します。