数据库 – 如何在Orders表中存储“N相同产品”的购买

因此,我们提供了产品类别,产品和变体的基本表格

类别
id |名字|活跃的| PARENT_ID

制品
id |名字|价格|活性

c_p_link
category_id | PRODUCT_ID

变种
id | product_id |价格| price_override |活跃的|股票

哪个效果很好.

但我有两个问题.

首先是如何构建订单.

我们有一张订单表
id | customer_id |订购|状态

我们还有一个order_products表
id | order_id ..?

这是我很好奇的.
假设客户订购了30个产品.我们要不要

>添加30行,并为每行上的每个项添加价格.
>添加一行,将合计的总数添加到行上
>添加一行,将单个价格添加到该行

接下来的部分是,稍后我们期待为购物车添加凭证支持.例如10%的折扣,购买两个,一个免费等等.这个的整体设计我现在不太讨厌(这至少是几个月).但我想知道这是否会影响我应该选择哪个版本的order_products表?

最佳答案 免责声明:我从未编写过处理“购物车”或“订单”的数据库模型

我认为购买时的价格应该编码到购买数据中:就像商店的纸质收据一样.我们称这个total_price代表收据上的每个逐项“行”,不应该与total_purchase_price混淆.

也就是说,收费金额是固定的.如果产品价格稍后变化并不重要,价格的变化不应反映出[付款]的数量.

因此我会有这些字段:product,unit_price,quantity,total_price.如果需要,可以轻松添加计算列,例如base_total_price(unit_price * quantity).

现在,total_price可能是一个基于base_total_price * precent_discount字段的计算值:但是,不管它最终是什么,我认为total_price应该存在并且应该在购买时修复. (这意味着,如果它是计算列,则所有输入在购买时也是固定的.)

附录:如上所述,我之前从未设计过这样的模型,但我在商店观察到的一件事是将折扣作为负成本逐项列出.也就是说,物品是“全价”购买的,然后寄存器增加一个条目以抵消每个促销活动的成本.我不知道这种方法的优点/推理.

点赞