网站上的评论系统

时间:2011-03-06 13:29:49

标签: database-design normalization

鉴于我页面上元素的评论系统,我想避免重复表格,例如:

tblBlogComments
tblNewsComments
tblArticleComments

等等

设计这个的好方法是什么?一张评论表?如何将这些内容链接到博客中的单一内容?

6 个答案:

答案 0 :(得分:3)

当然,您可以使用单个表格,但是如果您想要为特定表格添加特定功能/字段,则必须非常仔细地考虑这些表格。

即。你可能有

TABLE Comments (commentid, userid, blogid, newsid, articleid, commenttitle, comment)

但是,如果你想为新闻评论添加另一个字段,即NewsPicture,那么在让事情变得更容易并最终得到一个语义错误的表结构之间会有一个很好的界限

答案 1 :(得分:1)

您可以使用所有注释和某种类型的元素ID创建一个注释表,该注释表链接回特定元素(博客文章,新闻条目,文章等)。

将一个对象类型添加到comments表中也可能会很好,其中值将是注释链接到的元素的类型。这样,您可以创建一个视图来过滤表中不同部分的查询,因此您不需要每次都进行完整的表/索引扫描。

答案 2 :(得分:1)

这取决于。有单独表格的原因,例如不必包含类别或过滤,并在逻辑上分隔不应分组的条目(博客评论与新闻评论)。

如果你想拥有一个简单的评论表,你可以随时添加一个“类别”列,用于标记评论的位置/内容(博客,新闻,文章等)。如果你计划你的唯一ID,你可以只有一个像'父文档'的列,并指向评论发布到的文章/博客/等的ID。

答案 3 :(得分:0)

假设所有注释都相同(即所有注释都具有相同的最大长度以及其他存储的字段,例如“comment author”),我会选择有一个Comment表的方法{ {1}}列标识它的评论类型。

顺便说一句,我也会从实体名称的开头删除CommentTypeId,因为它不是必需的,至少IMO =)

答案 4 :(得分:0)

这种方法的两个问题是

a)外键约束。没有简单的方法来指定

如果comment_type_id是“Article”,则检查Article table中是否存在此parent_id 如果comment_type_id是“博客”,则检查博客表中是否存在此parent_id ---等等..

我看到的大多数地方都忽略了外键约束,并在添加注释时在应用层(java,.net .. whatever)中进行检查。这引入了进一步的复杂性,如并发用户,事务和锁定。

b)第二个问题是某些评论有特定数据(仅与博客,文章或新闻有关)。即使有一个,也要确保将其作为单独的列包含在内,而不是像“additional_column_1”这样的通用列。

答案 5 :(得分:0)

您的问题几乎与此database design problem相同,其中包括用于实现此类评论系统的SQL示例代码。您应该能够轻松地调整SQL。