一尘不染

Facebook之类的通知跟踪(数据库设计)

mysql

我只是想弄清楚Facebook的数据库如何构造用于跟踪通知。

我不会像Facebook这样深入研究复杂性。如果我们想象一个简单的通知表结构:

notifications (id, userid, update, time);

我们可以使用以下方式获取朋友的通知:

SELECT `userid`, `update`, `time`
FROM `notifications`
WHERE `userid` IN 
(... query for getting friends...)

但是,应该使用什么表结构来检查已读取和未读取哪些通知?


阅读 324

收藏
2020-05-17

共1个答案

一尘不染

我不知道这是否是执行此操作的最佳方法,但是由于我没有别人的想法,所以我会这样做。我希望这个答案也能对其他人有所帮助。

我们有2张桌子

notification
-----------------
id (pk)
userid
notification_type (for complexity like notifications for pictures, videos, apps etc.)
notification
time


notificationsRead
--------------------
id (pk) (i dont think this field is required, anyways)
lasttime_read
userid

这个想法是从通知表中选择通知,并加入notificationsRead表,并检查最后读取的通知和ID>
Notificationid的行。并且每次打开通知页面时,都会更新notificationsRead表中的行。

我想查询未读通知的查询将是这样。

SELECT `userid`, `notification`, `time` from `notifications` `notificationsRead`
WHERE 
`notifications`.`userid` IN ( ... query to get a list of friends ...) 
AND 
(`notifications`.`time` > (
    SELECT `notificationsRead`.`lasttime_read` FROM `notificationsRead` 
    WHERE `notificationsRead`.`userid` = ...$userid...
))

上面的查询未选中。感谢@espais的db design的想法

2020-05-17