php - 通知表设计?

标签 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 ;

我感到困惑的部分是,当有人关注另一个人时我应该插入一条记录吗?就像...当有人点击关注按钮后?如果是这样,我应该在该行中插入什么?

我正在使用 PHP 和 Laravel 框架。

最佳答案

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

事件表

id    type          text
-----------------------------------------------
1     comment       commented on your post
2     follow        followed you

etc

那么通知表将如下所示(我想不出更好的字段名称来传达这个想法):

通知表

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

seen_by_user 可以是 bool 值。

使用上述结构的优点是您可以回答以下查询,而无需复杂的 SQL 查询:

  1. 用户 Y 对用户 X 帖子的评论总数。
  2. 用户阅读或点击通知的模式。例如,他不能点击关注他的人的通知。
  3. 如果用户选择不接收有关某些事件的通知,您可以根据 event_id 将其过滤掉。

一旦 X 对 Y 的帖子发表评论,您就会在通知表中创建一个条目,然后将评论添加到 评论表 中。我希望这能在某种程度上有所帮助!

关于php - 通知表设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29437304/

相关文章:

转义撇号中的PHP Mysql更新序列化数组

php - 工厂模式可以是通用的单例模式吗?

PHP MYSQL 更新 - 替换整个单词,但不是其中的一部分

sql - 数据库的一致只读 View

javascript - 我对所有值求和,但为什么它不适用于所有动态总计字段

php - Laravel + Vue上的随机JavaScript运行时错误

javascript - 重新加载然后在同一函数jquery中刷新

sql - 如何对至少有 X 个 boolean 1 的行求和?

MySQL结合where子句的join性能

javascript - 使用 setInterval 更新按钮上的文本