我想在每个Q& A页面上创建像stackoverflow这样的评论线程。我看到的问题是如何通知每个订阅者(提问者,回答者,评论者)新评论,允许他们每个将评论标记为已读。
我看到了两个一般的解决方案:
也许有更好的方法?
这是一个通用架构,显示第二种方法,所以答案可以引用:
Comments table
comment_id user_id question_id comment comment_read
1 1 1 good stuff yes=user_id=1, no=user_id=2, no=user_id=3
2 2 1 bad stuff yes=user_id=1, yes=user_id=2, no=user_id=3
3 3 1 worse stuff yes=user_id=1, yes=user_id=2, yes=user_id=3
4 4 2 good question ...
5 1 2 bad question ...
答案 0 :(得分:2)
似乎 comment_read 列第二种方法过于密集。如果线程上有一千条评论怎么办?
当面对这些类型的问题时,您想要考虑透视...您最常查询数据的方式是什么?您将需要为此定制架构。您可能会根据登录的用户进行查询:应该通知用户哪些新评论?
除了评论表之外,为什么不这么简单并且还有评论/用户表。
user_id comment_id is_read
1 1 yes
2 1 no
3 1 no
1 2 yes
2 2 yes
3 2 no
...
这样,确定用户未读评论的查询相当容易(例如,选择where_read = no和user_id = 1)。从评论/问题的角度来看,获取未读评论的列表也很容易。