2011-07-22 57 views
7

我刚读同一主题以下职位:数据库来跟踪用户通知或活动(脸谱等)

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属性中,但是您需要为网页和移动应用程序编写BB代码解析器。另一个将创建另一个表,从这个通知表派生出来的ID用于我们需要的实体。举个例子:

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

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

我正在寻找点子! :)

回答

8

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

事情是这样的:

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

例如,对于评论的通知,你会存储

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

然后使用NOTIFICATION_TYPE正确格式化的客户端数据。

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

希望这会有所帮助。

+0

你尝试用JavaScript读取json数据吗?我没有,但我可以告诉你,当你使用php获取json数据时,它不能读取json数据作为json对象。 PHP将其作为字符串读取,并且无法将字符串解码为json数据。 –

+1

在php中使用json_decode完美工作 –

+0

然后使用notification_type在客户端正确格式化数据。看不到任何缺点,因为我们只需要客户端上的资源id来创建url或intent,并且索引的原子字段是无用的。希望这可以帮助。 – 2014-02-23 09:07:26