如何管理网上商城 mysql 中的退款数据库 table?
How to manage refunds db table in mysql for internet shopping mall?
我目前正在为我的网上商城设计一个数据库table。要指定问题,我目前有:
订单table:包含
- order_id
- 订单总价
- 订单状态(例如已发货、已送达、已退款)
- 订购者信息,例如地址、邮政编码和 phone 号码
产品table:包含
- product_id
- 价格
- 库存数量等
并且由于一个订单可以包含多个产品,而一个产品可以包含在不同的订单中,中间order_details table 来构造多对多关系。因此,
- order_details:
- order_id
- product_id
- 数量 其中 order_id 和 product_id 是外键并作为 order_details table. 的主键分组
现在,我正在尝试构建另一个 table 来存储有关退款的信息,客户可以在其中提出部分退款请求。 (例如,当客户X购买了3件产品A和2件产品B时,我想让X只退还三件产品A中的两件)。
在上面的例子中,一行将被插入订单table(比如order_id = 1),两行将被插入order_details table对于每个产品。假设产品 A 有 product_id = 1,B 有 product_id = 2,那么对于 (order_id, product_id, quantity), (1, 1, 3) and (将插入 1, 2, 2) 行。
问题是,我应该如何构造退款table才能满足上述规范?在上面的例子中,当X想查看他的订单状态时,我应该如何在refunds table中存储信息,以便X可以看到产品A只退款了2件,而其他产品已经正确订购?
您可以创建退款 table 并在其中放入以下内容:
- refund_id
- order_detail_id
- 数量
此 table 将存储每个订单详细信息的退款数量。要获得最终订购数量(不包括退款),您可以轻松地从 order_details table 左连接到退款 table 并减去差异,即
SELECT (order_details.quantity - IFNULL(refunds.quantity, 0)) AS ordered_quantity
FROM order_details
LEFT JOIN refunds ON order_details.id = refunds.order_detail_id
这将始终为您提供每个订单的详细信息,以及已正确订购的内容。然后,您可以对这些订单详细信息值求和以获得整个订单的正确订购内容