如何在mysql中为互联网购物中心管理退款数据库表?

时间:2018-06-15 08:57:55

标签: mysql shopping-cart

我目前正在为我的网上商城设计一个数据库表。要指定问题,我目前有:

  1. 订单表:包含

    • ORDER_ID
    • 总订单价格
    • 订单状态(例如已发货,已交付,已退款)
    • 订购者信息,如地址,邮政编码和电话号码
  2. 产品表:包含

    • PRODUCT_ID
    • 库存量等
  3. 由于订单可以包含多个产品,并且产品可以包含在不同的订单中,因此可以使用中间order_details表来构建多对多关系。因此,

    1. ORDER_DETAILS:
      • ORDER_ID
      • PRODUCT_ID
      • 量 其中order_id和product_id是外键,并被分组为order_details表的主键。
    2. 现在,我正在尝试构建另一个表来存储有关退款的信息,客户可以在此处提出部分退款请求。 (例如,当客户X购买3件产品A和2件产品B时,我想让X退款三件产品A中的两件。

      在上面的例子中,一行将被插入到订单表中(比如order_id = 1),并且每行将在order_details表中插入两行。假设产品A的product_id = 1,B的product_id = 2,则插入(order_id,product_id,quantity),(1,1,3)和(1,2,2)行。

      问题是,我应该如何构建退款表以便满足上述规范?在上面的例子中,当X想要查看他的订单状态时,我应该如何在退款表中存储信息,以便X可以看到只退还了2件产品A,并且其他产品已经正确订购了?

1 个答案:

答案 0 :(得分:0)

您可以创建一个退款表,并在其中填写以下内容:

  • 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

这将始终为您提供每个订单明细,已正确订购的内容。然后,您可以对这些订单详细信息值求和,以获得为整个订单正确订购的内容