一个合格的订单系统,最基本的要求是什么?数据不能错。

一个购物流程,从下单开始、支付、发货,直到收货,这么长的一个流程中,每一个环节,都少不了更新订单数据,每一次更新操作又需要同时更新好几张表。这些操作可能被随机分布到很多台服务器上执行,服务器有可能故障,网络有可能出问题。

在这么复杂的情况下,保证订单数据一笔都不能错,是不是很难?实际上,只要掌握了方法,其实并不难。

但是,还有一些情况下会引起数据错误。我们首先学习一下对于一个订单系统而言,它的核心功能和数据结构是怎样的。

订单系统的核心功能和数据

先梳理一下一个订单系统必备的功能,它包含但远远不限于:

  1. 创建订单;
  2. 随着购物流程更新订单状态;
  3. 查询订单,包括用订单数据生成各种报表。

为了支撑这些必备功能,在数据库中,我们至少需要几张表。

  1. 订单主表,保存订单基本信息
  2. 订单商品表:保存订单中的商品信息
  3. 订单支付表:保存订单的支付和退款信息
  4. 订单优惠表:保存订单使用的所有优惠信息

如何避免重复下单?

由于用户点击、或者网络重试。可能会出现重复下单的情况,因此需要保证下单接口的幂等性。

解决办法:

  1. 订单表,给订单号加上唯一索引。