我是数据库设计的初学者,我想创建一个评论系统,能够回复用户评论并显示用户所做的所有评论。此外,会有很多页面都会有一个评论部分。
到目前为止,我已经提出了两种潜在的数据库设计来构建评论系统。第一个将为每个页面的注释提供一个表格,并为每个用户的注释提供一个表格。页面注释表将具有用于表链接目的的user_id和page_id字段。
第二个潜在的设计结构是有一个大的分区注释表,只有表连接的comment_id和user_id字段。我还没有想过如何处理回复功能;在解决这个问题之前,我希望得到一些关于哪种设计方法(如果有的话)能够有效执行的输入。
答案 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
您可以考虑使用timestamp
,flagged
,deleted
等字段来帮助您对评论进行排序,排序,过滤,监控和软删除。您可以按页面,按用户,按父级分组。