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

6
我刚才阅读了关于同一主题的以下帖子:

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

使用这种表结构,我们可以显示单个用户的所有通知,这是一个相当可靠的解决方案。但在这种情况下,我们只能显示纯文本通知。我们不能简单地链接到用户或墙文章。
我正在尝试提出解决方案。其中一种方法是将BB代码存储在notification_text属性中,但是这样需要为Web和移动应用程序编写BB代码解析器。另一种方法是创建另一个从此通知表派生的带有所需实体ID的表。例如:
PostCommentNotification : Notification
----------------------------------------
id
userId (user who commented on a wall post)
postId (post where comment was made)

现���我们可以编写一个模板来显示通知(现在不再需要通知表中的文本属性),然后处理显示通知。我也对这个解决方案不满意,因为从通知表派生出的表的数量可能很大(针对每种通知类型)。
我正在寻找想法! :)
1个回答

9
很不幸,这里没有太多答案。我也遇到了同样的问题,但没有找到好的解决方案。在数据库中进行继承始终很棘手,并且很快变得复杂。
因此,我最终采用了一个简单的解决方案:将资源封装在 JSON 中的键值数组存储在“data”列中。
类似这样的格式:
notification
-----------------
id (pk)
userid
notification_type
notification_data
timestamp
last_read

例如,对于评论通知,您将存储以下内容:
[{"author_id": "1234", "comment_id":"1234"}]

然后,您可以使用notification_type来正确格式化客户端数据。

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

希望这可以帮助您。


你尝试过用JavaScript读取JSON数据吗?我没有,但我可以告诉你,当你使用PHP获取JSON数据时,它不能将JSON数据读取为JSON对象。PHP会将其读取为字符串,并且无法将字符串解码为JSON数据。 - Ali Demirci
然后,您可以使用 notification_type 在客户端上正确格式化您的数据。由于我们在客户端只需要资源 ID 来创建 URL 或意图,因此没有任何缺点,具有用于索引的原子字段是无用的。希望这有所帮助。 - user3342880

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接