用于跟踪用户通知或活动的数据库(类似于Facebook)

时间:2011-07-22 17:34:48

标签: database facebook database-design notifications storage

我刚刚阅读了同一主题的以下帖子:

Facebook like notifications tracking (DB Design)Database design to store notifications to users

提供了一些解决方案,但不完全是我需要的,以及它应该如何用于类似Facebook的通知系统。

在通知中,我们经常会有一些链接指向采取某些操作的用户,链接到他评论的帖子或视频,链接到任何内容,并且我们在一个通知中有多个链接。

notification
-----------------
id (pk)
userid
notification_type
notification_text
timestamp
last_read

使用此表结构,我们可以显示单个用户的所有通知,这是非常可靠的解决方案。但在这种情况下,我们只能显示纯文本通知。我们不能简单地链接到用户或墙上的帖子。

我正试图找到解决这个问题的方法。一种是在notification_text属性中存储BB代码,但是您需要为Web和移动应用程序编写BB代码解析器。另一个是创建另一个表,该表派生自此通知表,其ID为我们需要的实体。一个例子:

PostCommentNotification : Notification
----------------------------------------
id
userId (user who commented on a wall post)
postId (post where comment was made)

现在我们可以编写一个模板来显示通知(我们现在不再需要通知表中的text属性),然后处理显示它。我对这个解决方案不满意,因为从通知表派生的表数量可能很大(对于每种通知类型)。

我正在寻找想法! :)

1 个答案:

答案 0 :(得分:8)

不幸的是,这里没有很多答案。我有同样的问题,没有找到任何好的解决方案。数据库中的继承总是很棘手,而且复杂得太快。 所以我最终得到了一个简单的解决方案:将包含在JSON中的关键值资源数组存储在“数据”列中。

这样的事情:

notification
-----------------
id (pk)
userid
notification_type
notification_data
timestamp
last_read

例如,对于评论通知,您将存储

[{"author_id": "1234", "comment_id":"1234"}]

然后使用notification_type在客户端正确格式化数据。

看不到任何缺点,因为我们只需要客户端上的资源id来创建URL或意图,索引的原子字段是无用的。

希望这有帮助。