数据库设计 – 活动流/提要,否定正规化?

前端之家收集整理的这篇文章主要介绍了数据库设计 – 活动流/提要,否定正规化?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我知道这个问题的变化已经被多次询问(我已经阅读过,其中2个是: 1,2),但是我只是不能把我的头包裹在任何只是觉得正确的解决方案.

一切都被建议从许多关系,到多态关联,Nosql解决方案,消息队列,非正规化和它们的组合.

我知道这个问题是非常情况的,所以我将简要解释一下我的:

许多活动引发许多事件.

>以下,创建,喜欢,评论,编辑,删除

>用户可以按照其他用户的活动(他们触发的事件).
>最需要的活动将是最近的事件.

>需要查看过去事件的能力.

>通过日期描述排序不需要对Feed进行排序或搜索.
>可扩展性是一个问题(性能和可扩展性).

同时,我结束了一个非规范化设置,基本上由一个由id,date,user_id,action,root_id,object_id,object,data组成的事件表组成.

user_id是触发事件的人员.
行动就是行动.
root_id是对象所属的用户.
对象是对象类型.
包含在用户流中呈现事件所需的最少信息量的数据.

然后为了获得所需的事件,我只是抓住所有的行,其中user_id是正在抓取的流被跟随的用户的id.

它的工作,但非正规化只是感觉错误.多态关联似乎也是如此.扇出似乎在两者之间,但感觉很杂乱.

随着我在这个问题上的所有搜索,并且在这里阅读了许多问题,我根本无法点击任何东西,感觉到正确的解决方案.

任何人可以提供的任何经验,洞察力或帮助都非常感激.谢谢.

解决方法

我从未处理过社交活动Feed,但根据您的描述,他们与维护棘手的业务活动日志非常相似.

就个人而言,我倾向于使用单独的表来管理适用的活动类型,每种类型的修订/日志表,以及每个更新中央事件日志表的引用.

后者允许构建Feed,并且看起来像您提出的解决方案:event_id,event_at,event_name,event_by,event_summary,event_type. (event_type字段是包含表或对象的名称的varchar.)

您可能不需要维护您的案例中的所有内容的历史(肯定这不适合于朋友的请求而不是销售和库存变动),而是维护某种中央事件日志表(除了其他适用的表有正确的数据在手)是,我认为,正确的方法.

您可以通过查看审核日志相关问题获得一些有趣的见解:

https://stackoverflow.com/search?q=audit+log

猜你在找的MsSQL相关文章