所谓物理删除:就是直接删除掉数据库中的数据记录,也叫做硬删除,或叫真删除。
所谓逻辑删除:指的是在每张可能删除数据的表里添加一个删除标记列比如叫做IsDeleted,删除只是修改一下这一列的值。并不从数据库记录中抹除。也叫软删除,或叫假删除。
总结一下两方的论点:
1)赞成逻辑删除的:根本出发点是为了数据安全,如果数据每次都从数据库里面真正删除掉的话,要想恢复就太困难了。极端一点的说学过数据库的都应该听老师讲过删除数据不能真正删除。真正删除数据的都是没做过项目的实习生。
2)赞成物理删除的:一般都是从开发的角度指出,第一每次查询都要加一个判断删除标记的条件,第二多层级联关系的表操作会非常痛苦。极端一点的就说逻辑删除那一套都是被来自于Visual FoxPro的糟粕洗脑了。
那么,有朋友能从自己的设计和开发的经验出发,谈谈以上两种方案的取舍问题吗?
我个人是倾向于物理删除的,一是对数据库定期备份确保必要情况下的恢复,二是自己管理好删除数据的代码和权限判断。