0

想象一个电子商务平台,其工作方式如下:

  • A Package, 由Items和 其他的混合物组成Packages
  • AnOrder由 和 的混合物Items组成Packages
  • 用户可以选择一些物品和一些包裹来订购,但也可以继续从包裹中删除一些物品作为该订单的一部分,这不会影响原始包裹。
  • APackage将来可能会更改,但Order必须显示当时作为包裹的一部分实际订购的内容。

这是一个例子:

Package_A: [Large_Knife, Cutting_Board]
Package_B: [Cheese, Package_A]

Order_1: [Wine, Small_Knife, (Package_B - Large_Knife)]

现在让我们说Package_A更改:

Package_A: [Large_Knife, Cork_Screw]

这意味着新的Package_B有一个Cork_Screw而不是Cutting_Board

当用户查看他的旧订单时,他应该看到他实际订购的内容。

Order_1: [Wine, Small_Knife, Package_B([Cheese, Cutting_Board])]

Large_Knife如果这样更容易建模,则无需存储/显示已删除的内容。

很想听听关于如何建模的想法。

谢谢。

4

1 回答 1

1

一个项目可以在许多包中。

一个包可以包含许多项。

一个订单可以有很多商品和包裹。

一个包裹或项目可以在多个订单中。

一个用户可以下许多订单。

一个用户下的订单。

包裹的物品可能会随着时间而变化,但无需跟踪这种变化。

如果包裹发生变化,包含该包裹的订单不应受到影响,其内容应保持原样。

建议型号:

用户:用户 ID(PK)、姓氏、名字、电子邮件

项目:ItemId(PK),描述

包:PackageId(PK),描述

PackageDetail:PackageId(FK),ItemId(FK)

订单:OrderId(PK)、UserId(FK)、DateOrdered

OrderDetail: OrderId(FK), ItemId(FK, not null), PackageId(FK, "0" if it's an Item)

如果 Order 包含一个 Item,OrderDetail 表中的 ItemId 字段必须包含它的 PK,并且 PackageId 必须设置为“0”。

如果 Order 包含一个 Package,在放置时包含 3 个项目,则必须在表 OrderDetails 上插入 3 行,所有行具有相同的 PackageId 但具有不同的 ItemdId。

于 2012-08-23T21:38:20.250 回答