在sql server中存储和检索注释回复的最佳方法

时间:2010-09-04 02:19:31

标签: sql sql-server database-design

我想在数据库表中存储评论回复。 我有一张表来存储评论:

comment_id comment_par_id, comment_from comment_text comment date ....

新评论的par_id = 0,而回复时par_id设置为评论ID。

嵌套只是一个层次。对回复的回复也具有相同的父ID。

这是存储回复的最佳方式吗?

我查看了一些建议创建单独的表来存储回复的文章。 然后有一个映射列将注释指向主表。

另一个替代方法是创建第三个表来存储映射,如:

reply_id comment_id

哪种方式最好?

无论如何,我只运行一个查询来返回给定评论的回复。 它是运行最多的查询,必须快速运行,因为我们在注释表中有数百万行。

3 个答案:

答案 0 :(得分:1)

如果我理解你的话,你有一个“原始帖子”,有一套回复?与StackOverflow的工作原理类似,初始问题是一组答案吗?如果是这种情况,有几个选择。可以选择使用支持不同“类型”记录的单个表。这种选择的好处是只需要一个表,但它也有一个更模糊的缺点。必须知道多种类型的记录存储在这样的表中,使其更加混乱。

更好的选择是为记录的每个“类型”设置多个表。这消除了歧义,同时增加了复杂性。从不同的角度来看,类似记录的不同“类型”通常具有不同的数据,即使某些数据是相同的。通过使用单独的表,更容易为每种类型的注释添加不同的特征(原始与回复),而不必采用各种奇怪的方式来存储和引用单表系统中的额外“唯一”数据

答案 1 :(得分:0)

这是一个(评论)到许多(回复)关系,所以你应该使用两个表,回复表外键到评论表。

答案 2 :(得分:0)

由于它类似于StackOverflow,请查看Schema。查看帖子和评论表。

http://sqlserverpedia.com/wiki/Understanding_the_StackOverflow_Database_Schema