类似Stackoverflow的注释数据库模式

时间:2013-08-24 02:41:10

标签: mysql sql publish-subscribe commenting

我想在每个Q& A页面上创建像stackoverflow这样的评论线程。我看到的问题是如何通知每个订阅者(提问者,回答者,评论者)新评论,允许他们每个将评论标记为已读。

我看到了两个一般的解决方案:

  1. 每个订阅者排一行,复制每一行中的实际注释。这将允许每个订阅者在每行中的字段将注释标记为已读(从页面顶部的小红圈中删除它)。
  2. 每条评论只有 1 行。订阅者将被集中在一个字段中,并且必须有一些复杂的查询来SELECT和UPDATE是否每个订阅者都将注释标记为已读。
  3. 也许有更好的方法?

    这是一个通用架构,显示第二种方法,所以答案可以引用:

    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    ...
    

1 个答案:

答案 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)。从评论/问题的角度来看,获取未读评论的列表也很容易。