【问题标题】:Activity list ala SO活动清单 ala SO
【发布时间】:2009-10-30 00:04:50
【问题描述】:

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

目前我们有一个包含以下列的活动表

UserId(活动所针对的用户的 ID) Type(活动类型 - 即 PostedInForum、RepliedInForum、WroteOnWall - 它是一个 tinyint,其值取自 C# 中的枚举器) TargetObjectId (活动目标的 id。对于 PostedInForum,这将是 Post ID,对于 WroteOnWall,这将是写墙的用户的 ID) CreatedAtUtc(创建日期)

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

你们对存储用户活动列表的替代/更好的方式有什么建议吗?

我还应该提到该网站将是多语言的,因此您应该能够看到各种语言的活动列表 - 这就是为什么我们没有选择将活动文本/html 放在表格中的原因.

谢谢

【问题讨论】:

    标签: database database-design data-modeling


    【解决方案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
    

    【讨论】:

    • 我已经考虑过这种方法,但我有点担心可伸缩性。目前我们有大约 6-7 种不同的活动类型,因此我们需要利用 6-7 个表中的数据,但未来可能会扩展到 20 或 30 种不同的活动。
    【解决方案2】:

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

    最大

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2017-10-27
      • 2011-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多