近日在infoq上读到一篇关于从数据库表中删除数据时应该采取的策略,原文地址如下:
《Deleting Data Is Not a Recommended Practice 》
读后颇有感悟,所谓软删除(Soft Deleting),即在删除数据表中的数据时,并不直接将其从数据表中删除,而是将其标志为删除,即在每张表中设置一个删除字段(如:IsDeleted)等,默认情况下其值为0,及未删除状态;当需要将数据删除时,则将此字段更新为1。
与之对应的,将数据从数据库中彻底删除的方式称为硬删除,即Hard Deleting
当然,文中提到了另一种方法,及为数据添加状态字段(如:Statuses)等,来描述当前数据的状态,以便更好地跟踪数据。
联想到之前开发的招聘网站的项目中,就有这样一个需求:
1)企业可以发布、删除招聘信息;
2)用户可以收藏招聘信息;
3)用户可以申请招聘信息的职位;
显然,其中对于招聘信息这样的数据,在删除时采用软删除的方案是非常合适的,这样数据本身依旧是完整的,只是对于用户查看那些被删除了的招聘信息时,需要在业务层做一些对应的处理即可。
毕竟,不能因为企业删除了招聘信息,就把用户收藏的信息也一并删除,从而造成用户使用上的困扰。