Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 在数据库设计中使用循环关系是否总是一种不好的做法_Mysql_Database_Database Design - Fatal编程技术网

Mysql 在数据库设计中使用循环关系是否总是一种不好的做法

Mysql 在数据库设计中使用循环关系是否总是一种不好的做法,mysql,database,database-design,Mysql,Database,Database Design,我不知道如何解决这个问题 我有以下关系 用户有->许多帖子 一个帖子有很多评论 一条评论有->一个用户(所有者) 我一直在读数据库设计者的观点,认为这是不应该做的,但我从未读过这些问题的任何解决方案,例如: 本月,不是从一个想法开始,创建一个模型 为了支持这个概念,我将分析一个糟糕的设计构造:一种情况 我称之为循环参考。循环引用是递归的 一个表引用另一个表的情况 引用第一个表 在这种情况下可以使用循环引用吗 如果两个“用户”具有相同的值,我会认为您违反了“无冗余信息”原则。但是,评论的“所有者

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

用户有->许多帖子

一个帖子有很多评论

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

我一直在读数据库设计者的观点,认为这是不应该做的,但我从未读过这些问题的任何解决方案,例如:

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

在这种情况下可以使用循环引用吗

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

关系不必是树的形式。如果有一些规则,关系必须是唯一的DAG(有向无环图),那么这个问题是有意义的

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

您甚至可以让“用户”彼此“结婚”。再没有比这更圆的了


但是,那么,我们不应该做你的家庭作业,尤其是晚了一年多。

我同意@davidridge的评论,我编辑了问题中的图片,以帮助解释评论的含义

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

请注意,循环引用与自引用关系不同。自引用表是数据库设计中的常见现象。你可以在这里找到一个简单的例子,也可以找到一个完整的教程


是的,这看起来很好。你给出的例子不是循环的,因为评论和帖子都是用户的孩子,而评论也是帖子的孩子——用户和帖子之间的关系不是你描述或绘制它的方式,事实上用户“有很多”评论,而评论“属于”用户。对于循环依赖,你需要用户是帖子的孩子。我同意David的评论。实际上,循环关系没有什么必然的错误,但在这种情况下,似乎没有循环关系-这只是一个误导性的图表。如果箭头指示一对多关系,从
注释
用户
的行的箭头位于错误的一端。@davidadridge-将您的注释复制到“答案”中,以便OP可以批准它(假设他满意)