2011-03-16 48 views
1

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

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

第二个潜在的设计结构是有一个大的分区表,其中只有comment_id和user_id字段用于表链接。我还没有想过如何处理回复功能,在处理这个问题之前,我想获得一些关于设计方法(如果有的话)会有效执行的输入。

回答

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
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等领域,可以帮助你在排序,排序,过滤,监控和软删除评论。您可以按页面,按用户,按家长进行分组。

+0

太难查询了,这个接近 – tyan 2016-07-21 07:45:17