我正在创建一个网站,在主页面上,我希望看到最新的更新(最新评论,活动等......)
这些实体具有名为Created
(DateTime
)的公共属性。我希望从这些活动中获得可分页的列表。
我有3个解决方案:
创建一个新的“联接表”:Id, Comment_Id, Event_Id, ..., Created
。
所以我可以说GetTheLatestActivities(pageSize, pageIndex)
当我得到这个列表时,我可以通过导航属性访问实体。这种方法的问题是数据冗余(+1表(和复杂的查询?))
使用每个层次结构表(TPH):每个“活动”都将存储在一个表中,因此我可以轻松过滤记录。这种方法的问题是我的sql表方案将被非规范化,并且数据完整性会很弱(因为这些字段将是支持继承的nullables)
GetAll实体(Comments
,Events
等..),并使用LINQ(每个对象支持ICreated
接口过滤此连接列表,以便我可以OrderBy
日期和使用Skip/Take
)。显而易见的问题是性能,我会在每个请求中获取db中的所有记录,并在“客户端”进行过滤。
我认为最好的是第一个,还是有更好的解决方案?
谢谢
答案 0 :(得分: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
此视图可以添加到您的模型中,您可以执行常规分页跳过/接受它。