【发布时间】:2019-06-23 20:04:46
【问题描述】:
我有一个 MySQL 数据库,其中一些表与外键互连。好吧,您可以在下面查看示例。
如果需要,我需要确保可以删除两个父子。但我还需要确保系统会执行软删除(只需标记为已删除,无需物理删除它们),以便我们可以恢复数据或使用它们进行分析。
我知道我可以通过启用
ON DELETE CASCADE轻松删除两个父子节点。但是在这里我可能会永远丢失成千上万的数据并且无法恢复。不小心删了就乱了。我知道我可以禁用
ON DELETE CASCADE并在数据库表中添加另一个字段来标记记录deleted。因此,如果一条记录被删除,它将被简单地标记为已删除,并且不会显示在应用程序中,而它们将显示在数据库中。这种情况下的问题是,如果parent被标记为已删除,那么我必须将所有children也标记为已删除,至少在我的系统中是这样。另一方面,如果我真的想删除记录,那将是一个相当大的麻烦,我必须先删除所有child记录。
那么更好的选择应该是什么?我对制作影子表、存档表、视图等过于复杂并不感兴趣。
我能想到的最佳选择如下。
启用
DELETE ON CASCADE。但不要将记录delete方法暴露给普通用户。仅向管理员公开这些方法。将
delete_flag字段添加到表中。该字段将标记一条记录是否被删除。将这些方法公开给普通用户和管理员,因为它实际上不会删除任何内容。
请让我知道这种方式是否好或您有更好的选择?另外,如果我的方式更好,当父母的delete_flag发生变化时如何更新孩子的delete_flag?
【问题讨论】:
-
@Raymond Nijland 据我所知,PO 正在谈论一个包含产品信息的表格和一个关于这些产品类别的表格。它没有任何个人的个人数据,因此 GDPR 不适用,因为它仅适用于个人数据,不适用于产品数据
标签: java mysql database hibernate mysql-workbench