上周五客户一方提出需求,在删除某订单记录时,是否可以再恢复该订单记录。我说,“当前的订单删除为真删除,一旦删除数据无法恢复。不过可以考虑后期把这需求加上。”

    这种伪删除确实在项目设计时没有考虑到的。但思路也很简单。

方案一:在当前订单基本信息表中添加一个删除标记。默认的查询订单操作时,对该删除标记的条件进行过滤。
select * from XX_order_info e0 where e0.is_deleted = 0

优点:免去建表;
缺点:查询时需要筛选出有效数据,如果无效数据量大可能影响性能(多了条件,应该会影响性能吧,我觉得。未经测试!)。有效数据与无效数据交织在同一张表,不利于数据管理。

方案二:把删除的数据挪到另一张备份表
如,把某订单基本信息表的记录删除的同时,插入到该订单基本信息删除备份表内。该操作在同一事务中进行。此外,有其他关联的表,可选择同样方式移除,或者不移除而直接与其关联。

优点:有效数据与无效数据相对独立。不会改变系统原有表的字段,减少侵入性。
缺点:需要确保备份表与需备份的表,表结构完全一致。如订单表需要改动(如添加或修改字段),也必须牵连到备份表。