寻找一个良好的数据库结构来实现Facebook/SO之类的通知

BDu*_*elz 14 php mysql notifications

我希望能够在我的网站上收到通知,类似于SO的方式.我已经找到了一个很好的表结构来做到这一点,但我似乎无法弄明白.

我在想这样的事情.

通知

id,notification_type_id,user_id,type_id

通知类型

id, notification_text

如果通知类型与新帖子,新评论或我稍后添加的任何功能相关...用户ID将与通知所针对的人有关.Type_id和通知类型将齐头并进,因此如果notification_type是新注释,则type_id将是要转到的comment_id.

这对我来说似乎很好,但我希望能够在发生变化时通知所有用户..就像在Facebook上发表评论时,你会得到一个通知,其他人也在你之后评论了同样的事情.

我似乎无法弄明白......帮助想要

谢谢

编辑:我想到的方式是,notification_type_id将映射到notification_type表,该表将保存每个通知的文本("你有一个新的评论","等等等等等等也评论等等等等"等等) .),type_id将映射到注释所关注的primary_id.例如,如果通知说你的帖子有新的评论,那么type_id将是帖子的主要ID,以便于链接.. IDK,这只是一个想法.

sys*_*out 13

看看这些stackoverflow问题:
Facebook就像通知跟踪(数据库设计)
数据库设计,用于存储通知给用户

请特别注意这个具有干净解决方案的答案.


小智 1

我知道问题是关于通知系统的数据库结构,但我认为您提到的任何系统都没有与您提到的类似的通知表。通常,要执行此类通知,您需要使用触发器和队列系统来处理它们并将它们发送给正确的人员和渠道。

因此,我将如何设计它,在 SQL 中包含表:Event_type、消息文本(带有任何替换模板变量)、通道(短信/电子邮件/推送)、参数

然后,当您有 commentPost() 函数时,您运行触发器“commentPost”,并且在参数中,您已经可以发送之前评论过的 user_ids 或正在观看该问题的 user_ids - 但稍后也可以通过某些函数进行检查。

因此,触发器被发送到某种类型的队列(SQS/RabbitMQ 等),并且处理器正在读取该队列,检查事件类型,并相应地可以基于事件发送通知,但如果需要,也可以从 post 检索数据(就像所有评论帖子的用户一样)。然后,如果您想记录它,只需向其他队列发送一条消息,该队列会将日志写入数据库。

通过推送消息向用户 X 发送通知应该只是浏览器不断读取通知的另一个队列。