我正在尝试为我的社交网络创建一个通知系统.但我坚持数据库设计.因此,当用户对另一个用户发表评论时,我想显示"X评论你的帖子".或当有人跟随另一个人时我想显示通知.
到目前为止这是我的表:
CREATE TABLE IF NOT EXISTS `notifications` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_id` int(11) NOT NULL,
`notification_id` int(11) NOT NULL,
`text` text NOT NULL,
`read` int(11) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
Run Code Online (Sandbox Code Playgroud)
我困惑的部分是,当有人跟随另一个人时,我应该插入记录吗?喜欢......当有人点击按钮后?如果是这样,我应该在行中插入什么?
我正在使用PHP和Laravel框架.
由于这是一个没有完美解决方案的开放式问题,我建议采用以下结构:
Events table
id type text
-----------------------------------------------
1 comment commented on your post
2 follow followed you
etc
Run Code Online (Sandbox Code Playgroud)
然后通知表将如下(我想不出更好的字段名称来传达这个想法):
Notification table
id user_to_notify user_who_fired_event event_id seen_by_user
---------------------------------------------------------------------------
1 12 13 2 yes
2 13 12 1 no
3 1 15 1 yes
Run Code Online (Sandbox Code Playgroud)
(seen_by_user可以是布尔值).
使用上述结构的优点是您可以在没有复杂的SQL查询的情况下回答以下查询:
1)用户Y对用户X的帖子的总评论.2)用户阅读或点击通知的模式.例如:他可能不会点击跟随他的人的通知.3)如果用户偏好他不被通知某些事件,那么你可以根据event_id过滤掉它
因此,只要X在Y的帖子上发表评论,您就会在通知表中输入一个条目,然后在注释表中输入注释.
希望这在某种程度上有所帮助!
我建议这样的事情:
Table person (id, name, etc)
Table post (id, personid, text, etc)
Table comment (id, personid, postid, text, SeenByOP, etc)
Run Code Online (Sandbox Code Playgroud)
SeenByOp将是一个默认值为 的位字段0。当OP查看评论时,该值会更新为1。
我认为不需要通知表。