为订单记录保存历史关联数据的方法

说明

在酒店业设计的过程中, 房间的价格、房间名字等信息, 可能会随着业务的需要而经常调整. 但我们的订单记录此时引用关联的房间信息也会随着更新。这对于用户查看历史订单是不友好的。在一些大型系统设计中,会使用快照的方法保存该订单关联的所有信息, 或者直接在订单记录表中保存关联信息, 无论哪种方式都会比较臃肿.造成不必要的存储空间浪费.

解决方法

我们在需要保存历史记录的表中增加2个字段 一个是引用计数, 一个是是否是当前激活的记录。在订单创建的时候 关联更新 ref + 1

字段名 字段类型 说明
ref int(11) 引用该记录的订单数目
active tinyint(4) 1 表示该记录生效中 0 表示该记录是历史记录

CRUD 调整

在创建修改删除记录的时候, 需要做一些特殊处理。遵循以下三条原则。

  1. 有引用计数的记录不能被删除, 只需要将 active 标记为 0
  2. 有引用计数的记录不能被修改, 在修改的时候, 需要创建一条新的记录, 并将原记录 active 标记为 0

流程图如下

为订单记录保存历史关联数据的方法

https://doc.exti.cc/2021/11/27/ref-active-crud/

作者

bywayboy

发布于

2021-11-27

更新于

2021-11-30

许可协议