我在结帐时添加了捆绑功能,用户可以在那里以折扣价格选择自己的自定义包。因此,包中的产品数量是动态的。
我有以下现有的DB模式:
产品(id (PK)、名称、价格等…)。)
事务(id (PK)、金额、日期时间等…)。)
交货(id (PK),transaction_id (FK transaction.id),product_id (FK product.id),折扣等…)。)
假设情境
束A-乘积(1,2)
B包-产品(3,4)
事务具有包A和B。产品(1,2,3,4)是用相同的transaction_id交付的。
在这种情况下,对于当前的DB模式,不可能知道以下内容:
在传递表中添加一个BOOL‘bundle’列将标识在事务中交付的哪些产品在一个包中,哪些不是,但是如果一个事务包含多个包,则无法知道哪些产品被捆绑在一起。
可以创建事务特定的包ID。包A (ID 1),捆绑B (ID 2),是事务特有的,并记录在每个捆绑产品交付。不过,这似乎是一种奇怪的做法。这就提出了一个问题:
在所有事务中,包ID是否都是唯一的?如果是这样的话,您是否只是为了创建唯一的包ID而创建一个bundle表呢?
你认为解决这个问题最好的办法是什么?
发布于 2014-02-12 04:43:30
从设计的角度来看,我会考虑产品层次结构。
dbo.ProductHierarchy
ProductHierarchyID INT (PK), ParentProductID INT (FK), ChildProductID INT (FK)通过这种方式,您可以将Bundle A添加为产品(父级),并将其作为子产品链接到其包含的产品1和2。
您可以扩展此模式以包含包价格,当将包产品添加到订单/事务中时,可以使用该价格覆盖产品1和2的价格点。还可以包括促销的开始/结束日期,以控制前端出现的内容。
但是,当多个父包包含类似的子产品时,要小心。
例如。客户订单产品1,2,3。包A在产品1+2上。包C在产品1+3上。您让这个客户得到两个包吗?还是只有一个?
另一种选择是提供表,它将成为产品表上的FKey,但最终会使用相同的名称,只使用不同的相应的优惠ids。
https://stackoverflow.com/questions/21718308
复制相似问题