为订单记录保存历史关联数据的方法
说明
在酒店业设计的过程中, 房间的价格、房间名字等信息, 可能会随着业务的需要而经常调整. 但我们的订单记录此时引用关联的房间信息也会随着更新。这对于用户查看历史订单是不友好的。在一些大型系统设计中,会使用快照的方法保存该订单关联的所有信息, 或者直接在订单记录表中保存关联信息, 无论哪种方式都会比较臃肿.造成不必要的存储空间浪费.
解决方法
我们在需要保存历史记录的表中增加2个字段 一个是引用计数, 一个是是否是当前激活的记录。在订单创建的时候 关联更新 ref + 1
字段名 | 字段类型 | 说明 |
---|---|---|
ref | int(11) | 引用该记录的订单数目 |
active | tinyint(4) | 1 表示该记录生效中 0 表示该记录是历史记录 |
CRUD 调整
在创建修改删除记录的时候, 需要做一些特殊处理。遵循以下三条原则。
- 有引用计数的记录不能被删除, 只需要将 active 标记为 0
- 有引用计数的记录不能被修改, 在修改的时候, 需要创建一条新的记录, 并将原记录 active 标记为 0
流程图如下

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