数据库设计之物理删除与逻辑删除

物理删除存在的问题:

1.历史数据关联不到删除的记录了。

假如A关联了B,如果物理删除了表记录B,那么A关联B的就会查询不到B的信息了。

比如之前查询A详情能查询到关联的B的数据,有一天B删除了,A再次查询详情查询不到关联的B的数据了。

2.级联删除存在问题。

假如需要级联删除,那么删除B就需要先关联A的所有记录,这样是不可行的。

比如删除商品,就需要删除所有关联此商品的订单。

======

思考及总结:

1.要么像hibernate那样,作为外键且被关联的有记录的,校验不让删除B。(感觉业务要判断好多表,也不知道哪个表关联了B。)(回到商品与订单的级联删除问题,这种方式不可取,我要删除某个商品,难不成必须得删除所有关联此商品的订单?)
2.要么B物理删除再加一个历史表。(几乎每个表都会多出一个历史记录表)
3.要么逻辑删除。(增加一个delete_flag标识)

======

 逻辑删除存在的问题:

1.唯一索引。

 2.数据表冗余删除的记录,导致查询缓慢。

posted @ 2023-04-23 16:53  super超人  阅读(248)  评论(0编辑  收藏  举报