Kevin Bai Asked: 2022-02-15 17:56:55 +0800 CST2022-02-15 17:56:55 +0800 CST 2022-02-15 17:56:55 +0800 CST 为什么关系数据库管理系统中不能存在多对多关系? 772 在阅读 Joan Casteel 的 Oracle 11g Sql 时,作者提到关系数据库中不存在多对多关系。我想知道这个事实背后的原因是什么。 oracle-11g database-design 1 个回答 Voted Best Answer Brendan McCaffrey 2022-02-16T05:25:04+08:002022-02-16T05:25:04+08:00 我认为这是一个术语问题。正如贾斯汀所说,现实世界中可能存在多对多的关系。但是,这需要数据库中的中间表来弥合关系级别的差距。该中间表将呈现为一对多关系。从更高的层次来看,中间表左右两边的表代表了现实世界中的多对多关系。 详细说明贾斯汀的商人示例。一个商家可以有很多客户,就像他们可以有很多产品一样。任何数量的客户都可以购买任何数量的产品,就像任何数量的客户可能已经购买了任何数量的产品一样。但是您永远不会尝试在客户或产品表中直接关联这两者。 相反,您将创建一个订单表。对于每个单独的客户,您将与他们下的订单数量建立一对多的关系。从产品方面来看,您的产品与订单数量之间存在一对多的关系。 如果没有以这种方式处理关系,请想象一个客户表需要为用户购买的每个产品提供一个列,或者一个产品表需要为每个购买该产品的客户提供一个列。 京东在评论中提出了一个很好的观点。另一个人可能会弄乱多对多关系的另一种方式是...... 购买产品的单个通用列和客户表中每个客户购买的每个产品的行。这种非规范化设计会导致客户表的基数不等于客户数量的基数。多对多关系的桥接表 所以,在这点上,作者是对的。
我认为这是一个术语问题。正如贾斯汀所说,现实世界中可能存在多对多的关系。但是,这需要数据库中的中间表来弥合关系级别的差距。该中间表将呈现为一对多关系。从更高的层次来看,中间表左右两边的表代表了现实世界中的多对多关系。
详细说明贾斯汀的商人示例。一个商家可以有很多客户,就像他们可以有很多产品一样。任何数量的客户都可以购买任何数量的产品,就像任何数量的客户可能已经购买了任何数量的产品一样。但是您永远不会尝试在客户或产品表中直接关联这两者。
相反,您将创建一个订单表。对于每个单独的客户,您将与他们下的订单数量建立一对多的关系。从产品方面来看,您的产品与订单数量之间存在一对多的关系。
如果没有以这种方式处理关系,请想象一个客户表需要为用户购买的每个产品提供一个列,或者一个产品表需要为每个购买该产品的客户提供一个列。
京东在评论中提出了一个很好的观点。另一个人可能会弄乱多对多关系的另一种方式是......
所以,在这点上,作者是对的。