一级深度嵌套注释的建议表结构?

时间:2017-08-23 07:53:25

标签: php mysql database database-design

我想为我的帖子建立评论系统。目前它只是一个深度,意味着评论及其答复。 在网上阅读了各种文章后,有两种建议的方式来制作你的表格结构。

1。使用两个表格

//comments table

-id
-post_id
-user_id
-comment
-created_at
-updated_at
-deleted_at

//replies table

-id
-comment_id
-user_id
-comment
-created_at
-updated_at
-deleted_at

然后这两个表之间的一对多关系。现在是第二种方法

2。使用一个表

//comments table

-id
-post_id
-user_id
-comment
-parent_id     //this is important
-created_at
-updated_at
-deleted_at

在第二种方法中,对于顶级注释,可以设置parent_id NULL

你建议的方法是什么?

我认为第一个是更规范化的版本,而第二个给我灵活性,以便在将来增加回复嵌套级别,所以无论出于何种原因,如果我计划增加注释系统的嵌套级别,我不必更改数据库结构更多。

此外,如果可能的话,链接任何一篇文章,它解释了为上述第二个表格结构正确顺序提取和重新安排评论的逻辑。

1 个答案:

答案 0 :(得分:2)

第一种方式过于复杂。你最终得到两个表,这意味着评论和评论的评论是不同的实体,并被视为这样。这意味着工作量和代码行的负载加倍。

第二种方式允许您以相同的方式处理任何注释并且易于实现,唯一的区别是,不是检查具有您当前视为其comment_id的注释的id的任何回复,检查是否有任何评论将其作为parent_id

优点是您可以根据需要处理多个评论层,或者根本不设置任何限制,并且由于所有实体都有注释,因此您可以采用相同的方式对待它们。如果您想要升级/更正某些内容,也会更容易:执行所有更改一次。