我目前正在为我的网上购物中心设计一个数据库表。为了具体说明问题,我目前有:
订单表:包含
- 订单 ID
- 订单总价
- 订单状态(例如已发货、已送达、退款)
- 订购者信息,例如地址、邮政编码和电话号码
产品表:包含
- 产品 ID
- 价格
- 库存数量等
由于一个订单可以包含多个产品,并且一个产品可以包含在不同的订单中,因此需要一个中间order_details表来构造多对多关系。因此,
- 订单详细信息:
- 订单 ID
- 产品 ID
- 数量 其中 order_id 和 Product_id 是外键,并分组为 order_details 表的主键。
现在,我正在尝试构建另一个表来存储有关退款的信息,客户可以在其中提出部分退款请求。 (例如,当客户X购买了3件产品A和2件产品B时,我想让X只退款三件产品A中的两件)。
在上面的示例中,对于每个产品,一行将插入到订单表中(假设 order_id = 1),两行将插入到 order_details 表中。假设产品A的product_id = 1,B的product_id = 2,则对于(order_id,product_id,数量),将插入(1,1,3)和(1,2,2)行。
问题是,我应该如何构建退款表才能满足上述规范?在上面的例子中,当X想要查看他的订单状态时,我应该如何在退款表中存储信息,以便X可以看到产品A只退款了2件,而其他产品已经正常订购了?
最佳答案
您可以创建退款表并在其中添加以下内容:
- refund_id
- order_detail_id
- 数量
此表将存储每个订单详细信息的退款数量。要获得最终订购数量(不包括退款),您可以轻松地从 order_details 表中对退款表进行左连接并减去差值,即
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
这将始终为您提供每个订单的详细信息,即已正确订购的商品。然后,您可以将这些订单详细信息值相加,以获得整个订单的正确订购内容
关于mysql - 如何在mysql中管理互联网购物中心的退款数据库表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50872212/