在数据库设计中建立循环关系始终是一种不好的做法

时间:2015-06-09 20:36:44

标签: mysql database database-design

我不知道如何解决这个问题 我有以下关系

用户有 - >很多帖子

一个帖子有 - >很多评论

一条评论有 - >一个用户(所有者)

enter image description here

我一直在阅读数据库设计师的这个论点,这是不应该做的,但我从来没有读过这些问题的任何解决方案,例如:

  

这个月,而不是从一个想法开始并创建一个模型   支持这个概念,我将分析一个糟糕的设计结构:一种情况   我称之为循环参考。循环引用是递归的   一个表引用第二个表的条件,而第二个表依次引用第二个表   引用第一个表。

在这种情况下是否可以使用循环引用?

2 个答案:

答案 0 :(得分:1)

我同意@DavidAldridge的评论,我在问题中编辑了图像,以帮助解释评论的内容。

就数据库中的循环引用而言,我的经验是你可以构建它们,简单的查询和更新都可以工作,但是一旦你需要更复杂的连接,你最终会创建笛卡尔连接的变体并快速消耗大量的内存并且查询结果可能永远不会回来。

请注意,循环引用与自引用关系不同。自引用表是数据库设计中常见的一种。您可以在Self-Referencing Tables上找到一个简单示例,或在所有Reference Types including Self-Reference.

上找到完整教程

Database Diagram

答案 1 :(得分:0)

如果两个“用户”具有相同的值,我会认为您违反了“无冗余信息”原则。但是,评论的“所有者”不一定是帖子的“所有者”。因此,您不是冗余地存储相同的用户。

关系不一定是树的形式。如果有一些规则关系必须只是DAG(定向非循环图),那么这个问题是有道理的。

让我们以不同的方式看待数据。您有实体:用户,帖子,评论。你有你提到的关系。那么,谁在乎“循环”?

你甚至可以让“用户”彼此“结婚”。无法获得更多的循环!

但是,那么,我们不应该做你的功课,特别是迟到一年多。