我在结帐中添加了捆绑功能,用户可以以折扣价选择自己的定制产品捆绑。因此, bundle 中的产品数量是动态的。
我有以下现有数据库架构:
产品(id (PK)、名称、价格等......)
交易(id (PK)、金额、日期时间等……)
配送(id(PK)、transaction_id(FK transaction.id)、product_id(FK Product.id)、折扣等...)
假设情况
bundle A - 产品 (1,2)
bundle B - 产品 (3,4)
一笔交易同时包含 bundle A 和 B。产品 (1,2,3,4) 使用相同的 transaction_id 进行交付。
在这种情况下,使用当前的数据库模式无法知道以下内容:
1. 产品是否作为 bundle 的一部分交付
2. 捆绑了哪些其他产品
向交货表添加 BOOL“捆绑”列将识别交易中交付的哪些产品属于捆绑产品,哪些不是捆绑产品,但如果交易包含多个捆绑产品,则无法知道哪些产品捆绑在一起。
可以创建特定于交易的捆绑 ID。 bundle A (ID 1)、 bundle B (ID 2) 对于交易来说是唯一的,并根据交付的每个捆绑产品进行记录。但这似乎是一种奇怪的做法。这就提出了一个问题:
捆绑 ID 在所有交易中应该是唯一的吗?如果是这样,您是否只是简单地创建一个 bundle 表,其唯一目的是创建唯一的 bundle ID?
您认为解决这个问题的最佳方法是什么?
最佳答案
从设计角度来看,我会考虑产品层次结构。
dbo.ProductHierarchy
ProductHierarchyID INT (PK), ParentProductID INT (FK), ChildProductID INT (FK)
这样,您就可以将 bundle A 添加为产品(父产品),并将其作为子产品链接到其包含的产品 1 和 2。
您可以扩展此架构以包含捆绑价格,当捆绑产品添加到订单/交易时,您可以使用该价格覆盖产品 1 和 2 的价格点。您还可以包括促销的开始/结束日期,以控制前端显示的内容。
但是,当多个父 bundle 包含类似的子产品时要小心。
例如。客户订购产品 1、2、3。 bundle A 属于产品 1+2。 bundle C 属于产品 1+3。您会让该客户同时获得这两个 bundle 吗?还是只有一个?
另一个选项是优惠表,它会成为您的产品表上的 FKey,但最终您会爆出产品,所有产品都具有相同的名称,只是具有不同的对应优惠 id。
关于php - 数据库设计: How to record bundle product deliveries,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21718308/