一种父子关系级联软删除的方法

2024-05-03

我有一个简单的架构,其中使用软删除(这就是它的设计方式并且无法更改)。有两个表参与该架构:Company (id, is_deleted) and Employee (id, company_id, is_deleted) where company_id当然是FKCompany桌子。规则是:

  • If a Company has is_deleted = true,那么所有Employee指的是该公司应该有is_deleted = true.
  • But an Employee可能有is_deleted = true即使父母Company has is_deleted = false.

我的两个问题是a)如何强制执行这些约束? b) 如何最简单地确保is_deleted = true级联时,Company是软删除的。

我添加了 postgresql 和 sql server 标签,因为这些是我最感兴趣的数据库。如果其他 rdbms:es 中有其他解决方案,我也想听听它们。


严格来说,像这样级联值的唯一方法是使用 ON UPDATE CASCADE。去做that,列“is_deleted”必须是唯一约束的一部分。

仅此一点并不太难。如果 company.id 是您的主键,那么这对列 {id, is_deleted} 也将是唯一的。该对列的唯一约束将允许您通过外键引用级联更新。

但这行不通your情况下,因为您需要允许引用值不同的从参考值。

因此,就您的情况而言,我认为您有三种选择。

  • Triggers
  • 存储过程
  • 应用代码

在所有这些情况下,您需要注意权限(可能撤销删除权限)以及可以避免您的代码的情况。例如,dbms 命令行界面和 GUI 界面可用于绕过应用程序代码中的约束,以及根据权限绕过存储过程中的约束。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

一种父子关系级联软删除的方法 的相关文章

随机推荐