Len Silverston の Data Model Resource Book Vol. 3、1 つはタイプとカテゴリ: 分類用、もう 1 つは階層、集約、およびピアツーピア関係用です。基本的には、次のように実装されます。
分類
[エンティティ] (M x M) [エンティティ タイプ] (M x M) [エンティティ タイプ タイプ]
...ここで、(M x M) は、分類テーブルによってデータベースに実装された多対多の関係です。
協会
上記のエンティティ テーブルとタイプ テーブルには、独自の型付きロールアップもあります。
- [エンティティ] (M x M) [エンティティ]
- [エンティティタイプ] (M x M) [エンティティタイプ]
- [EntityTypeType] (M x M) [EntityTypeType]
...ここで、各 (M x M) は、ロールアップ/関連付けのタイプへの外部キーを持つロールアップ テーブルに実装された多対多の関係です。
結果として得られるデータ構造は、エンティティとそれらの相互関係の両方を記述するという点で、非常に優れた表現力を提供します。ただし、アプリケーションでこの表現力を活用するのに問題があります。主な問題は、EF 4 および 5 の進歩にもかかわらず、M-2-M 関係は依然として複雑であり、データベースにアクセスするたびに少なくとも 2 方向で M-2-M 関係にアクセスしようとしていることです。これは、次の点で特に複雑です。
- [エンティティ] と [エンティティ] のいくつかのサブタイプの両方をサブタイプ化します。
- すべての M2M テーブル (すべての分類およびロールアップ/関連付けテーブル) には、少なくとも From と Thru の日付を含むペイロードがあります。ロールアップには、少なくとも 1 つのロールアップ タイプも含まれます。
- エンティティにアクセスするたびに実行時にデータを解釈するために、タイピング スキーマ (EntityTypeType テーブルとそのロールアップ) の大きく離れた部分を読み込む必要はありません。
技術:
- SQL Server 2008 R2
- エンティティ フレームワーク 5
- .NET 4.5
- MVC 4 (Web アプリ部分には、いくつかのコンソール アプリもあります)
モデル自体に関する質問:
- これは単に .NET で機能しないデータ モデルですか?
- 最初に、データベースを基本的にビジネス オブジェクトをモデル化する .NET に適したビューにフラット化する必要がありますか?
型付けスキームに関する質問- 型はかなり静的であることに注意してください。
- [EntityType] テーブルと [EntityTypeType] テーブル、それらの分類、およびそれらのロールアップを C# クラスにスキャフォールディングする必要がありますか? これは enum scaffolders と同様に機能しますが、これらにはペイロードの日付範囲とタイプ ペイロードがあるため、name/int 以外のものが必要です。もしそうなら、それらのファイルを静的クラスとして足場にする方法についてのいくつかのアイデアは何ですか? ハードコーディングされたオブジェクトリスト?
- 代わりに、起動時にタイピング スキームをキャッシュする必要がありますか (コンソール アプリの起動に多くのオーバーヘッドが追加されるため、これは気になります)。
- 他のアイデア - 足場の XML ファイルはありますか? 等...
どんなアイデアや経験も大歓迎です!