Database 活动列表ala SO

Database 活动列表ala SO,database,database-design,data-modeling,Database,Database Design,Data Modeling,我们正在为我们的应用程序构建一组功能。其中之一是最近用户活动的列表等等。我在为这些活动设计桌子时遇到了一个小问题 目前,我们有一个包含以下列的活动表 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

我们正在为我们的应用程序构建一组功能。其中之一是最近用户活动的列表等等。我在为这些活动设计桌子时遇到了一个小问题

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

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放在表格中的原因


感谢您,您可以将所有内容放在一个带有鉴别器列的表中,然后只需选择前20。。。从…起按CreatedAtUtc描述订购

或者,如果在不同的表中存储不同类型的内容,可以尝试类似“不确定确切语法”的方法:

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

您可以将所有内容放在一个带有鉴别器列的表中,然后只需选择前20。。。从…起按CreatedAtUtc描述订购

或者,如果在不同的表中存储不同类型的内容,可以尝试类似“不确定确切语法”的方法:

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

您可能想要查看灵感,尤其是模式定义。如果你看一下这个规范,你会发现还有一个目标对象的概念。我最近做了一些非常类似的事情,但我必须创建自己的数据库来封装所有活动数据并将数据输入其中,因为我从不同数据库中具有不同数据源的多个应用程序收集活动数据


Max

您可能需要查看灵感,尤其是模式定义。如果你看一下这个规范,你会发现还有一个目标对象的概念。我最近做了一些非常类似的事情,但我必须创建自己的数据库来封装所有活动数据并将数据输入其中,因为我从不同数据库中具有不同数据源的多个应用程序收集活动数据


Max

我考虑过这种方法,但我有点担心可伸缩性。现在我们有大约6-7种不同的活动类型,所以我们需要从6-7个表中提取数据,但在未来,这可能会扩展到20或30种不同的活动。我考虑过这种方法,但我有点担心可伸缩性。现在我们有大约6-7种不同的活动类型,因此我们需要从6-7个表中提取数据,但在未来,这可能会扩展到20或30种不同的活动。