在 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 Server查询语句(Select)中检索存储过程(Store Procedure)的结果集?
使用 C# 和存储过程从 SQL Server 检索 VarChar(MAX)