软删除是一个好主意吗?
软删除是否是一个好主意,取决于具体情况。可能有一些情况下,你在法律上被要求真正删除某些数据。也许有人要求你永久从系统中删除他们的社会安全号码。或者可能你有一个重复的记录,你想将其合并为一条记录。将重复的记录保留在已删除标志下可能没有优势。
此外,还有一个技术上的不利之处:你不能进行级联删除,这会自动清除对已删除数据的任何引用,以防止外键违规。这不一定是一个大问题,但需要牢记。
否则,我认为这是一个好主意。
关于级联删除的观点很好。
我认为DanM的观点是,如果你使用软删除,你必须自己处理级联删除。如果你使用硬删除(我所谓的“正常”删除),你可以让数据库自动执行级联删除。
那么级联恢复呢?
对于以“这取决于具体情况。”开始,给一个加一的。
解决方法:
- 如果需要永久删除数据,可以使用硬删除。
- 如果需要保留数据的历史记录或遵守法律要求,可以使用软删除。
- 对于软删除,需要自行处理级联删除和级联恢复的逻辑。
软删除是一个好主意吗?这个问题的出现是因为我们希望避免潜在的数据丢失。在一些情况下,我们需要对数据库进行清理,删除一个或多个记录,所以我们一般采用软删除的方法,先将记录标记为删除状态,然后再清空“回收站”或者采用类似文档管理的方法,将记录标记为过期状态,并经过审批流程后再进行硬删除。
在一些情况下,系统仍然需要保留数据以确保数据的完整性、审计或者历史变更记录,所以软删除是一个不错的选择。可以使用清理过程来进行真正的删除操作等。
有人建议在每个查询中都加上deleted=0的条件,但这样会增加代码的复杂性,我们可以创建一个视图来代替每个查询中的条件判断。可以创建一个名为"recycle_bin"的视图,只显示已删除的记录,通过对具有相同字段的表进行union操作来实现软删除。
还某些情况下了软删除数据的关联关系处理问题。例如,在company_departments表中删除了一条记录,而在users表中有一个外键department_id与之相关联。在这种情况下,你会如何处理users表中的外键?会将department_id设置为null吗?
软删除并不要求这样做,它只需要设置一个删除标记。如果你想清除旧的记录,可以按照通常的方式进行删除操作。
总结起来,软删除是一种避免数据丢失的好方法。通过软删除,我们可以保留数据的完整性、审计或者历史变更记录,并且可以通过清理过程进行真正的删除操作。同时,通过使用视图来简化查询操作,可以减少代码的复杂性。对于软删除数据的关联关系处理,只需要设置删除标记,不需要强制更新关联表的外键。