我正在做一个学校项目,但由于了解构建SQL模式ER图而遇到麻烦。
我有4个实体;与我的订单表具有一对多关系的客户表,与我的订单项表具有一对多关系的订单表,当前与汉堡表具有一对多关系的订单项表。
我遇到的问题是,我的订单项表具有订单ID,汉堡ID的复合主键,并且我认为订单项->汉堡应该存在多对多关系,因为一个或多个订单项可以与一个或多个汉堡相关,反之亦然,但我的理解是,您不希望规范化表中有很多对很多关系。我的假设应该是多对多正确的吗?为什么允许我建立多对多关系?
供参考,我的表格当前为3NF格式
忽略模态并假设其始终为最小值,如果我的Burger实体与订单项具有一对多关系,那么我将获得以下
这意味着一个汉堡有一个或多个与之相关的订单项,但是我的思维过程告诉我,这不是唯一的情况,事实上,一个订单项可以有多个汉堡,但从阅读中的所有内容来看不是这种情况。复合键让我真的很困惑,我确实明白了为什么它会出现在“汉堡”->“订单项”->“很多”中,因为“汉堡数”字段仅涉及一个汉堡类型(它包含多少个汉堡的值在订单项中。
编辑: 请忽略客户表和订单表,它们只是为了提供完整视图而已,我确实注意到我刚才忘记了包含外键。
答案 0 :(得分:1)
我相信订单项->汉堡应该在很多对很多
为什么一个订单项与多个汉堡相关?不会的。订单有很多订单项。每个订单项都引用一个汉堡。上面的图是正确的。
请注意,通常您会出售汉堡以外的商品,并且有不涉及产品的订单项,例如税金,折扣等。因此,商品表的PK通常只是(OrderId,OrderItemId),并且ProductID是非关键属性。