【发布时间】:2025-12-24 23:00:07
【问题描述】:
我是第一次学习数据库和 SQL。在我正在阅读的文本(Oracle 11g:Joan Casteel 的 SQL)中,它说“关系数据库中不存在多对多关系”。我了解我们要避免它们,并且我了解如何创建一个桥接实体来消除它们,但我试图完全理解“不可能存在”的说法。
表示多对多关系实际上在物理上是不可能的吗?
还是因为它导致大量数据重复而效率很低?
在我看来是后一种情况,桥接实体最小化了重复数据。但也许我错过了什么?我还没有找到一个具体的原因(或者更好的例子)来解释为什么要避免多对多关系,无论是在文本中还是在我搜索过的任何其他地方。我整天都在搜索,只发现重复的相同信息:“不要这样做,而是使用桥接实体。”但我想问为什么。 :-)
谢谢!
【问题讨论】:
-
作者发表此声明的背景是什么?我怀疑这种说法比表面上看到的要多,因为 M-M 关系是一种基本的设计解决方案。也就是说,它们被实现为多个 1-M 关系,也许这就是作者想要表达的意思。
-
Thomas,作者确实解释了桥接实体以及它们如何允许用两个一对多关系表示多对多关系。看起来我的引用在下面引起了很多争议,但我认为它是语义的。您帖子中的关键词是“实施”。显然作者的意思是你不能直接实现 M-M 关系,因为她继续解释如何用 1-M 实现它们。我仍在努力解决它,但到目前为止的答案是有帮助的。
-
如果你想看看下面的辩论,似乎有一个定义问题。 M-M 关系不能存在于单个外键定义中;这是不可能的,但是......使用链接表,可以创建和维护 M-M 关系,这是对关系数据库系统的合法使用。
-
@Johnson - 对。您不能声明 M-M 关系(即通过约束),但您可以实现等效项。