小编use*_*623的帖子

了解通知系统

我一直在研究如何在 SE 和其他地方构建通知系统,并发现自己被这里接受的答案所吸引:https : //stackoverflow.com/questions/9735578/building-a-notification-system 使用这种结构:

???????????????      ?????????????????????      ??????????????????????
?notification ?      ?notification_object?      ?notification_change ?
???????????????      ?????????????????????      ??????????????????????
?ID           ?—1:n—??ID                 ?—1:n—??ID                  ?
?userID       ?      ?notificationID     ?      ?notificationObjectID?
???????????????      ?object             ?      ?verb                ?
                     ?????????????????????      ?actor               ?
                                                ??????????????????????
Run Code Online (Sandbox Code Playgroud)

通知是关于某事(对象 = 事件、友谊..)被某人(演员)更改(动词 = 添加、请求..)并报告给用户(主题)。这是一个规范化的数据结构(尽管我使用过 MongoDB)。您需要将更改通知某些用户。所以它是每个用户的通知......意味着如果有 100 个用户参与,你会生成 100 个通知。

起初我以为我理解这种方法,但是当我开始准备实施它时,我意识到我显然不是特别了解它。对答案的最后几条评论是其他用户在理解解决方案时遇到的问题。

我不确定这是否是我最终会遵循的模型,但考虑到它拥有的赞成票数量,我相信理解它会对我有益,而且我当然想了解更多。我希望这对在掌握此解决方案时遇到困难的其他人也有用(顺便说一句,我没有足够的互联网点来对针对此问题的答案发表评论,请其他人做!)

问题

如果我的理解对不对,notificationObjectID是一个外键指向notification_object表,notificationID是一个外键指向通知表。似乎object应该是一个外键,指的是通知所涉及的数据库条目的 ID(例如特定的事件或帖子),但是我们不需要另一个字段来指示该 ID 属于哪个表吗?

作者写道

Notification_object.object 标识更改类型,如字符串“friendship”。我所讨论的对已更改对象及其额外数据的实际引用在 notification_change.notificationObjectID 中

这对我来说似乎没有意义。Object 是一个字符串(枚举?),notificationObjectID 是一个外键,指的是通知所涉及的对象?那么中间和右边的桌子到底是怎么连接的呢?

中间的表格似乎指定了通知是关于什么对象(或对象类型),例如事件或帖子。然后我们可以在notification_change中有许多指向相同对象类型的条目,这允许我们捆绑通知(例如“25 个用户发布在 X 的墙上)——因此中间表和右表之间的 1:n …

database-design

18
推荐指数
1
解决办法
2万
查看次数

标签 统计

database-design ×1