我认为有必要对用户通知的数据库进行去规范化。例如,在标记帖子时(应该由用户考虑),我们添加一列flag ENUM('yes', 'no')
(或状态列)。可以通过使用 WHERE 子句计数来为用户查找标记的事件user_id='XX' AND flag='yes'
。
这种归一化的结构很好;但是如果我们有不同类型的通知呢?例如,帖子、评论、照片的标志……这意味着当用户刚刚访问他的个人资料页面时,我们需要计算几个表。这对于像 stackexchange 这样的跨项目来说更为严重,因为我们会收到不同站点的通知。
我认为去规范化可以帮助将通知列添加到用户表中
post_flags tinyint(3),
comment_flags tinyint(3),
photo_flags tinyint(3),
在这种情况下,我们需要运行一个额外的写入查询来更新每个相应操作的用户标志列。例如,标记帖子时:UPDATE users SET post_flags=post_flags+1 WHERE user_id='XX'
. 我关心的是确保执行后一个查询,以避免此数字与标记帖子的计数不匹配;但我认为它可以通过TRANSACTION
.
通过这种方式,我们可以通过一次查询频繁访问的个人资料页面获得所有通知。
我在正确的轨道上吗?还是为此目的常见的另一种棘手的方法?