我一直在研究如何在 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 …