如何实现软删除?

Nei*_*gan 7 mysql database-design delete

您在数据库中实现软删除的方法是什么?

理想情况下,该解决方案将允许

  • 在大桌子上表现不错
  • 考虑关系
  • 考虑唯一键
  • 用户应该能够找到并恢复他删除的项目。

谢谢!

Fru*_*ner 7

我可以想到几种方法来做到这一点:

  • 您可以有一个“已删除”指示符,当记录被删除时,该指示符设置为“Y”。很简单,但它会将已删除和活动的数据保留在同一个表中,如果有大量活动,这可能会导致性能问题。恢复记录就像更改指标一样简单。

  • 您可以有一个表来反映要从中删除的表的结构,当您从主表中删除一条记录时,将该记录插入到“deleted_data”表中。这允许您将已删除的数据移动到单独的表中,从而为主表提供更好的潜在性能,但是搜索任一表中的数据可能会使事情变得更加复杂,并且保持数据结构同步(当它们更改时)也有点还有更多的工作要做。在这种情况下,恢复数据将涉及从“已删除”表中删除记录并将其插入回主表中。

在这两种情况下,您可能想要查找任何子记录并将它们标记为已删除。我想你可以用触发器或代码来做到这一点。