在 sql server 中存储和检索评论回复的最佳方式

Posted

技术标签:

【中文标题】在 sql server 中存储和检索评论回复的最佳方式【英文标题】:Best way to store and retrieve comment replies in sql server 【发布时间】:2010-09-04 02:19:30 【问题描述】:

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

comment_id comment_par_id, comment_from comment_text comment date ....

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

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

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

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

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

reply_id comment_id

最好的方法是什么?

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

【问题讨论】:

检查 wordpress 评论表,它直截了当,很好。 【参考方案1】:

如果我没听错的话,您有某种“原始帖子”,带有一组回复?类似于 *** 的工作方式,有一个初始问题,有一组答案?如果是这种情况,有几个选择。可以选择使用支持不同“类型”记录的单个表。这种选择的好处是只需要一个表,但是它也有一个不明确的缺点。要知道这样一张表中存储了多种类型的记录,比较混乱。

更好的选择是为每种“类型”的记录创建多个表。这消除了歧义,同时增加了复杂性。从不同的角度来看,不同“类型”的相似记录往往具有不同的数据,即使其中一些数据是相同的。通过使用单独的表,可以更轻松地为每种类型的评论(原始评论与回复)添加不同的特征,而不必诉诸于各种奇怪的方式来存储和引用单表系统中的额外“独特”数据.

【讨论】:

这就像 *** 对问题的回答 我会使用单独的表,通过外键关联。我会有一张原始帖子(问题)的表格,以及一个回复(答案)的表格。答案将通过 ParentPostID(或 QuestionID)外键与问题相关。它非常标准的数据库实践。【参考方案2】:

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

【讨论】:

我希望按顺序存储相同评论的回复。 reply_id comment_id reply_text 1 43 这是回复 #1 2 43 这是回复 #2 3 48 这是回复 #1 4 48 这是回复 #2 然后在回复表上使用复合键,由commentID和replyID组成【参考方案3】:

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

http://sqlserverpedia.com/wiki/Understanding_the_***_Database_Schema

【讨论】:

你的链接失效了。

以上是关于在 sql server 中存储和检索评论回复的最佳方式的主要内容,如果未能解决你的问题,请参考以下文章

sql,如果对2张表,按时间排序呢?

如何在SQL Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?

使用 C# 和存储过程从 SQL Server 检索 VarChar(MAX)

使用单个 SQL 查询选择所有带有父评论的回复

如何在 SQL Server 2008 中检索已删除的存储过程、函数、表

从数据库中检索分层数据的最佳方法[重复]