SQL模式多对多关系

时间:2018-08-21 19:28:38

标签: sql database database-design entity-relationship

我正在做一个学校项目,但由于了解构建SQL模式ER图而遇到麻烦。

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

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

供参考,我的表格当前为3NF格式

忽略模态并假设其始终为最小值,如果我的Burger实体与订单项具有一对多关系,那么我将获得以下

enter image description here

这意味着一个汉堡有一个或多个与之相关的订单项,但是我的思维过程告诉我,这不是唯一的情况,事实上,一个订单项可以有多个汉堡,但从阅读中的所有内容来看不是这种情况。复合键让我真的很困惑,我确实明白了为什么它会出现在“汉堡”->“订单项”->“很多”中,因为“汉堡数”字段仅涉及一个汉堡类型(它包含多少个汉堡的值在订单项中。

我相信它应该如下所示: enter image description here

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

1 个答案:

答案 0 :(得分:1)

  

我相信订单项->汉堡应该在很多对很多

为什么一个订单项与多个汉堡相关?不会的。订单有很多订单项。每个订单项都引用一个汉堡。上面的图是正确的。

请注意,通常您会出售汉堡以外的商品,并且有不涉及产品的订单项,例如税金,折扣等。因此,商品表的PK通常只是(OrderId,OrderItemId),并且ProductID是非关键属性。