php - 数据库设计: How to record bundle product deliveries

标签 php mysql sql database-design database-schema

我在结帐中添加了捆绑功能,用户可以以折扣价选择自己的定制产品捆绑。因此, 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/

相关文章:

sql - 将日期时间值四舍五入到最接近的半小时

php - Symfony 路由 - 可选参数

php - 如果文件夹尚不存在,则创建一个

PHP/MySQL 查询帮助

MySQL 将产品与类别树连接起来,即使类别为空

mysql innotop 不工作 - 使用统一值

mysql - 当只知道一个值时从同一列获取不同的值

PHP 解析错误 : syntax error, 意外的 T_STRING,期待 T_VARIABLE

php - maxlength '30' 的文本输入提交 '31' 的输入

mysql - 如何在 Twig 文件中显示行计数结果