2

我想做一个类似于 Facebook 的通知系统,但我就是想不出方法,如何实现。

我在这里读到了各种意见,比如有一张桌子,其他人说有两张。

但是,我正在尝试最有效的方式,只使用必要的数据条目。notfication到目前为止,这是我的表:id、uid、类型、读取(布尔值)、日期。

于是我想到了一个例子:

插入评论,调用插入我的uid(user_id)的通知函数,类型(评论,点赞等),read='1',NOW()。

我将 read 设置为 1,因为我不想在发布内容时收到通知。然后我想我会notification通过将所有其他用户的 read 设置为 0 来更新,因为他们还没有阅读这篇新帖子。

但现在我正在考虑另一篇将在 5 秒后发布的帖子或其他内容。然后所有其他read条目再次设置为 0,这是正确的,但在这种情况下,我想不出为每个用户显示 (SELECT) 正确的结果。因为没有指定哪个用户错过了哪个新通知。

我希望你能关注我并有任何建议。如果我通常以错误的方式做这件事,我也会很感激建议。

4

2 回答 2

5

首先,您必须知道您的通知是否广泛应用于您的所有用途,或者可以是特定于用户的。如果是 Facebook,我会说这是第二种选择。

我的第一个建议是找到一个实现此功能的开源项目(甚至可能是 2 个)并查看他们的代码。

我的第二个建议是写下此功能的所有要求,通常,一个小的限制可能会导致对表结构的修改甚至添加新表(例如,可以向多个用户发送通知一次?用户可以向另一个用户发送通知吗?...)。

这是我要走的路,使用 2 个表,一个用于消息,一个用于与用户的 NtoN 关系: 表通知

ID // auto increment ID
sender_id // Can be a subsystem or another user. To be defined / optional. Does not have to be a foreign key.
title // Title of the notification
body // The text message
type // warning, message, error or any notification class you can think of
... // you can add other options, like priority, attachment...

表通知_用户

notification_id // Foreign Key for the notification
receiver_id // Foreign Key for the user
is_read // is the notification read
is_deleted // is the notification deleted, this implements a Trash bin like feature
created_at // time at which the notification was sent
read_at // time at which the notification was read
deleted_at // Time at which the notification was deleted
于 2012-09-21T08:02:57.740 回答
3

我建议有一个通知表,其中包含存储所有通知的列(notification_id 和 notification_msg 和 create_date)。然后有另一个表 notification_user 与列 (userid, notificationid, read) 存储所有带有通知 ID 的用户 ID。因此,如果您说有 1000 个用户的通知,则将消息存储在第一个表中,然后将 1000 个用户的 ID 和通知 ID 存储在第二个表中。这样,您可以轻松跟踪用户何时阅读特定通知并将 read 设置为 1。

于 2013-08-07T15:10:28.873 回答