我有一个简单的架构,其中使用软删除(这就是它的设计方式并且无法更改)。有两个表参与该架构: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情况下,因为您需要允许引用值不同的从参考值。
因此,就您的情况而言,我认为您有三种选择。
在所有这些情况下,您需要注意权限(可能撤销删除权限)以及可以避免您的代码的情况。例如,dbms 命令行界面和 GUI 界面可用于绕过应用程序代码中的约束,以及根据权限绕过存储过程中的约束。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)