在这里使用连接表是否合适?

时间:2012-08-16 08:59:00

标签: sql database database-design

如果我希望用户能够发布对存储在不同表中的内容的评论,那么最好的方法是什么?

通过为每种类型的内容创建附加表来评论。例如;

Table

或者,使用一个表进行注释,并使用多个连接表。例如;

Join Table

或者,只需将每个表的外键添加到注释表中即可?

Foreign

4 个答案:

答案 0 :(得分:1)

我只想将每个表的外键添加到一个注释表中。如果这三个评论的评论格式相同,那么从长远来看,这将使您的工作变得更加容易。值得一提的是,这意味着您必须在注释表中拥有可以为空的外键。

您描述的第一种方法仅在页面的评论与帖子的评论不同时使用。否则,只需要一个注释表就会简单得多。

如果您希望在多个页面上发布相同的评论(我怀疑您需要),则只需要中间的表格。这称为多对多关系,但您描述的是一对多(一页,帖子或个人资料可以有很多评论)

答案 1 :(得分:1)

因为你不打算发表评论"由多个页面/帖子/ user_profiles共享,最后一种方法没有完全规范化。它将允许数据异常和冗余。

第一个更正确,也更快。

答案 2 :(得分:1)

我个人会这样做,因为它更简单。但如果您最终倾向于第二种设计,则不需要“has_comments”表。而是在评论表中放置一个fk列,另一列有一个type_id,用于保存评论是否为页面类型,帖子等。

答案 3 :(得分:1)

我认为第一种选择是正确的方法。第二种方法感觉就像归一化的情况一样。问问自己:“我从第二种方法得到什么?”。答案是在页面,帖子和user_profiles之间共享相同的评论。但实际上它们实际上并不相同(您可能希望单独存储页面注释,发布注释和用户配置文件注释)。所以你获得的收益不多。

使用带有外键的选项编号1进行操作。它将为你节省更多的麻烦。