2009-10-21 27 views
1

我们正在为我们的应用程序构建一组功能。其中之一是SO上的最近用户活动ala的列表。我有一个小问题找到设计这些活动表的最佳方式。活动列表ala SO

目前,我们有以下的列

 
UserId (Id of the user the activity is for) 
Type (Type of activity - i.e. PostedInForum, RepliedInForum, WroteOnWall - it's a tinyint with values taken from an enumerator in C#) 
TargetObjectId (An id of the target of the activity. For PostedInForum this will be the Post ID, for WroteOnWall this will be the ID of the User whose wall was written on) 
CreatedAtUtc (Creationdate) 

我的问题是TargetObjectId列感觉不对的活动表。这是一个软链接 - 没有外键,只有关于类型的知识才能告诉你这个列真正包含的内容。

你们中的任何一个人对替代/更好的存储用户活动列表的建议有什么建议吗?

我还应该提到,该网站将是多语言的,所以你应该能够看到一系列语言的活动列表 - 这就是为什么我们没有选择例如只是将活动文本/ HTML放入表。

感谢

回答

0

您可能要为灵感退房http://activitystrea.ms/,尤其是模式定义。如果你看看这个规范,你会发现还有一个“目标”对象的概念。我最近做了一些非常相似的事情,但我必须创建自己的数据库来封装所有活动数据并向其中提供数据,因为我正在从不同数据库中的不同数据源的多个应用程序收集活动数据。

最大

1

您可以将所有内容到一个表具有鉴别列,然后就select top 20 ... from ... order by CreatedAtUtc desc

另外,如果你存储不同类型的不同表的内容,你可以尝试像(约确切的语法不知道):

select top 20 from (
    select top 20 ID, CreatedAtUtc, 'PostedToForum' from ForumPosts order by CreatedAtUtc 
    union all 
    select top 20 ID, CreatedAtUtc, 'WroteOnWalll' from WallPosts order by CreatedAtUtc) t 
order by t.CreatedAtUtc desc 
+0

我想过这种方法,但我有点担心可扩展性。现在我们有大约6-7种不同的活动类型,所以我们需要从6-7张表中抽取数据,但是将来可能会扩展到20或30种不同的活动。 – Micael 2009-10-21 07:14:51