一张桌子和其他一些表之间最好的关系,他们每个人根据第一个表的n个数据集? [重复]

StackOverflow https://stackoverflow.com/questions/328123

  •  11-07-2019
  •  | 
  •  

我有一个表,对于各种不同的组的内容类型的保存注释。这些被保存在其他表(新闻,文章,用户)。 我不知道什么是连接这些表的最佳方式? 在以前的项目中,我使用的第二个表中的每个种类的内容。他们认为映射到comments表的ID的某些内容的ID。因此,为每个评论我的评论条目本身和“连接器”条目。 另一种方法是使用一个单独的意见表,任何类型的内容。 在端双向含有一些冗余缺陷。

所以哪一个应该使用或是否有对ONE溶液?

有帮助吗?

解决方案

有几个明显的方式来设计你的表:

1)你可以有一个主评论表,中间表到您的文章,新闻和用户表的每个连接注释:

Comments
--------
ID

News      NewsComments
----      ------------
ID        NewsID
          CommentID

Articles  ArticleComments
--------  ---------------
ID        ArticleID
          CommentID

Users     UserComments
-----     ------------
ID        UserID
          CommentID

的这个优点是相对容易查询征求意见每个特征的。然而,这种风格从参照完整性受到影响:它可以连接到多个评论,新闻文章和用户提供一个单一的评论。此外,其可伸缩性不高:如果您添加注释的RSS提要,最喜欢的链接,用户状态等,那么你有中间表,所有这些类型的

2)另一种方法是稍微非规范化版本:

Comments
--------
ID
TableName
PkID (Connects the primary key in other tables)

News
----
ID  

Articles
--------
ID

Users
-----
ID

这工作以及可以轻松扩展,只要你添加新的功能,但你不能你Comments.RefID场同时关键多个表,让你失去了参照完整性。

3)的最后一个选项需要大量的冗余“评论”的表为每一个特征。

News      NewsComments
----      ------------
ID        NewsID

Articles  ArticleComments
--------  ---------------
ID        ArticleID

Users     UserComments
-----     ------------
ID        UserID

这种风格的优点是引用完整性的保护,以及其易于understanable给任何人看你的架构。缺点是具有相同模式的数量过多的表。

其他提示

我可能会为每个内容表独立意见表,这样我可以把外键关系的优势来自动管理更新/删除时,原始内容被改变/删除。所以,如果我有新闻和文章表,那么我将不得不news_comments和article_comments表。每个部分都会有一个的content_id字段和USER_ID领域。该领域的content_id会重提内容表的user_id字段将重提用户表。我已经建立了相应的内容和意见表和用户和每个评语表之间的外键关系和有变化的更新传播/删除。您可能还需要建立索引上的ID字段,以便你在做索引它们之间的连接。

如果你有一个意见表,你就必须在代码中手动管理的关系,而不是数据库为您处理它 - 因为你只能有FK涉及到另外一个表

您的问题似乎是类似

如何涉及一个表到许多不同的表?

又一种方式可以是这样的:

Comments
-------
ID
NewsID
ArticleID
UserID

对于每一行只有一个将是非零的。这将使查询比与中间表简单。

从数据完整性的观点出发然而这将是明智具有一个评论表中的每个目录表。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top