2011-07-11 8 views
2

私はウェブサイトを作成しており、メインページに最新のアップデート(最新のコメント、イベントなど)を表示したいと考えています。 これらのエンティティはCreatedDateTime)。私はこれらの活動からページ可能なリストを得たいと思う。 Id, Comment_Id, Event_Id, ..., Createdページ可能リストの最新アクティビティを取得する

  1. は、新たな "結合テーブル" を作成します。

    私は3つのソリューションを持っています。 私はGetTheLatestActivities(pageSize, pageIndex)と言うことができます。このリストを取得すると、ナビゲーションプロパティを使用してエンティティにアクセスできます。このアプローチの問題は、データ冗長性(+1テーブル(および複雑なクエリ))です。

  2. 階層ごとのテーブルの使用(TPH):すべての「アクティビティ」が1つのテーブルに格納されるため、レコードをフィルタリングできます簡単に。このアプローチの問題私のSQLテーブル方式は非正規化されるだろうし、データの整合性が弱いだろう(なぜならフィールドの継承をサポートするためにnullablesだろう)

  3. GETALLエンティティ(CommentsEvents等。)、及びこの連結リストをLINQでフィルタリングしてください(すべてのオブジェクトサポートICreatedインターフェイスなので、OrderBy日付と使用できるSkip/Take)。明白な問題はパフォーマンスです、私はすべての要求のデータベースからすべてのレコードを取得し、 "クライアント側"でフィルタリングします。

私は最高のものが最初のものだと思っています。

はありがとう

答えて

0
あなたは一般的なフィールドの組合を提示ビューを作成することができ

select t1.Table1Id as Id, t1.Name as Description, t1.Job, t1.Created from Table1 t1 
union all 
select t2.Table2Id as Id, t2.Description, null as Job, t2.Created from Table2 t2 

このビューには、モデルに追加することができ、あなたは、通常のページングは​​反対テイク/スキップ行うことができますそれ。

+0

私は一般的なフィールドだけでなく(基本的には1つしかありません: 'Created')アクセスする必要がありますが、私は" join table "の代わりにビューを使うことができると思います – user838758

+0

私は上記の例を編集してソース表の1つにのみ関連する列を含めることができ、他の表はその列に対してヌルを戻します。 – hatchet

関連する問題