我是Stack Overflow设计和功能的忠实粉丝。所以,我想基于用于本网站的评论系统创建我自己的设计设计!
答案 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
我希望所有其他感兴趣的查询都和这个一样明显(如果所有有趣的查询都非常简单,这说明了使它们如此的数据库模式; - )。