我如何在Stack Overflow上设计类似的评论系统?

时间:2009-06-06 10:03:36

标签: sql database-design

我是Stack Overflow设计和功能的忠实粉丝。所以,我想基于用于本网站的评论系统创建我自己的设计设计!

问题:

  • 我应该使用哪种表格结构来存储评论?
  • 我可以使用哪些SQL查询来获取存储的注释?

2 个答案:

答案 0 :(得分:2)

这是一个相当明显的结构。实体是:

Post: ID, Post Type (Question or Answer), Text, User ID
Question extends Post: Title
Answer extends Post:
Comment: ID, Post ID (attached to which Post), User ID, Text

您可以轻松扩展此标记,添加标记,编辑/修订,投票,标记和关闭/重新开始投票。

答案 1 :(得分:1)

@ cletus的答案很有用,但使用的“延伸”几乎不是一个标准的关系术语,所以让我提供2美分。

我认为评论(您特别询问的内容)是关于“项目”的,这是一个包含问题,答案和更多内容的非常一般的类别(尽管在SO评论中只是关于问题或答案)

因此,一个项目将是一个具有ItemId PK的表,所有项目共有的所有项目(创建它的时间戳,用户ID作为用户表上的FK等)以及可能的“ItemType” “可用于挑选其他表格(问题,答案,可能还有更多)的字段,以获取特定项目的具体详细信息(如果有)。我可能会将这些中的每一个编入索引,因为我很容易想象在某个特定时间范围内查找项目,由某个用户发布,& c。

评论将拥有自己的PK CommentId,一个ItemId的FK,一个时间戳,作者的UserId,如果您允许对评论进行上/下投票(或者甚至只是对它们进行投票),可能会有更多列。 ,标记,& c。

要获得“用户IDC对用户IDI项目的所有评论”,我会查询:

SELECT * FROM Comments
  JOIN Items USING (ItemId)
  WHERE Comments.UserId = @IDC
    AND Items.UserId = @IDI

我希望所有其他感兴趣的查询都和这个一样明显(如果所有有趣的查询都非常简单,这说明了使它们如此的数据库模式; - )。