繁体   English   中英

在密集数据库中撤消级联删除

[英]Undoing cascade deletions in a dense database

我有一个相当大的生产数据库系统,基于大型节点层次结构,每个节点都有10个以上的关联模型。 如果有人删除树中相当高的节点,则可能会删除数千个模型,如果删除错误,则恢复它们可能非常困难。 我正在寻找一种方法来给我一个简单的“撤消”选项。

我尝试过使用Django-reversion,但似乎为了获得我想要的功能(很容易恢复大型级联删除),它需要在每个版本中存储一堆信息。 当我创建初始修订时,该过程不到10%完成,并且它已经在我的数据库中使用8GB,这对我不起作用。

那么,这个问题有一个标准的解决方案吗? 还是一种自定义Django-reversions以适应我的用例的方法?

您正在寻找的是一种软删除。 向表中添加名为deleted的列,其值为false。 现在,当您想要执行“删除”而不是将deleted的列更改为true时。 更新所有代码不显示标记为已删除的行(或移动数据库表并将其替换为不显示它们的视图)。 更改所有唯一约束以使过滤器WHERE deleted = false这样您就不会遇到无法添加类似于用户在系统中看不到的内容的问题。

至于级联,你有两个选择。 执行ON UPDATE触发器以更新子行或将deleted列添加到FK并将其定义为ON UPDATE CASCADE

您将以一个额外的行为代价获得整个反向功能(除非您手动执行此操作,否则无法删除内容以节省空间)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM