SQL 架构多对多关系

SQL schema many to many relationships

我正在做一个学校项目,运行 我对构建 SQL 模式 ER 图的理解遇到了一些麻烦。

我有 4 个实体;与我的订单 table 具有一对多关系的客户 table,与我的订单项 table 具有一对多关系的订单 table,订单项 table 当前与汉堡 table.

处于一对多关系

我 运行 遇到的问题是我的订单项 table 有一个复合主键订单 ID、汉堡 ID,我认为订单项->汉堡应该在多对多关系,因为一个或多个订单项可以与一个或多个汉堡相关联,反之亦然,但我的理解是,您不希望在规范化 tabled 中存在任何多对多关系。我假设它应该是多对多正确的吗?为什么允许我建立多对多关系?

作为参考,我的 table 目前处于 3NF 形式

忽略模态并假设它总是最小值,如果我的 Burger 实体与订单项有一对多关系,那么我将有以下

这意味着一个汉堡有一个或多个与之关联的订单项,但是我的思维过程告诉我这不是唯一的情况,事实上一个订单项可以有多个汉堡但是从所有我读的不是这种情况。复合键让我很困惑,我确实明白为什么它可能在一个汉堡->行项目一个->许多中,因为汉堡计数字段只与一个汉堡类型有关(它包含有多少个汉堡的值在订单项中)。

我认为应该看起来像:

编辑: 请忽略客户并订购 tables,它们只是为了提供完整视图而包含在内,我确实注意到我刚才忘记包含外键。

I believe that line item->burger should be in a many to many

为什么一个订单项会与多个汉堡相关?它不会。一个订单有很多行项目。每个行项目都指一个汉堡。上图正确。

请注意,通常您销售汉堡以外的东西,并且您有不涉及产品的订单项,例如税收、折扣等。因此通常项目的 PK table 只是(OrderId,OrderItemId),ProductID 为非关键属性。