关于构建评论系统的建议

时间:2011-03-16 03:06:33

标签: mysql database database-design

我是数据库设计的初学者,我想创建一个评论系统,能够回复用户评论并显示用户所做的所有评论。此外,会有很多页面都会有一个评论部分。

到目前为止,我已经提出了两种潜在的数据库设计来构建评论系统。第一个将为每个页面的注释提供一个表格,并为每个用户的注释提供一个表格。页面注释表将具有用于表链接目的的user_id和page_id字段。

第二个潜在的设计结构是有一个大的分区注释表,只有表连接的comment_id和user_id字段。我还没有想过如何处理回复功能;在解决这个问题之前,我希望得到一些关于哪种设计方法(如果有的话)能够有效执行的输入。

2 个答案:

答案 0 :(得分:2)

我会选择两个表:一个用于注释线程,另一个用于注释。评论主题看起来像这样:

id
/* Other bookkeeping things like created time and such */

和评论:

id
thread_id
user_id
comment
parent_id
/* Other bookkeeping stuff */

然后通过向页面表添加comment_thread_id列将线程附加到页面。

拥有一个单独的不同注释线程,为您提供了一个方便的地方,可以在将来附加访问控制或类似的扩展,它还允许您将注释线程附加到事物上。将注释线程附加到页面而不是相反,可以在以后轻松地将注释线程添加到系统中的其他对象。

答案 1 :(得分:1)

comments
   id
   user_id
   comment_text
   page_id
   parent_id

使用此选项存储页面的注释。 parent_id是评论,是另一条评论的回复。对于页面上的注释,parent_id将为零(没有父注释),但对于回复,parent_id将为非零,并且它将是回复所属的注释的ID。

例如,您将拥有此类数据

id user_id comment_text page_id parent_id
1  6         sdh          1       0          <-- comment on the page
2  9         gfdf         2       0          <-- another comment on other page
3  4         reply xzy    1       1          <-- reply to comment id 1 by user id 4 on page 1

您可以考虑使用timestampflaggeddeleted等字段来帮助您对评论进行排序,排序,过滤,监控和软删除。您可以按页面,按用户,按父级分组。