通知表设计?

Aka*_*kar 2 php sql laravel

我正在尝试为我的社交网络创建一个通知系统.但我坚持数据库设计.因此,当用户对另一个用户发表评论时,我想显示"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框架.

Yma*_*tin 7

由于这是一个没有完美解决方案的开放式问题,我建议采用以下结构:

         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的帖子上发表评论,您就会在通知表中输入一个条目,然后在注释表中输入注释.

希望这在某种程度上有所帮助!

  • @Moher 解决该问题的一种方法是在通知表中添加一个名为“trigger_id”或“source_id”的列。这将指触发此事件的帖子/评论/任何事件。此外,这是最基本的事情,必须添加很多列才能使其做好生产准备。这个想法是给出一个总体的思考方向! (5认同)

Dan*_*cuk 0

我建议这样的事情:

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

我认为不需要通知表。