可以使用触发器在数据库中强制执行诸如“父对象最多有 2 个子对象”之类的规则。但是,如果此规则已在域层中强制执行,那么复制该规则是否是个好主意。
在哪些情况下重复此类规则是合理的?有没有其他方法可以避免这种重复?这不是数据完整性规则吗?
谢谢
最佳答案
在数据库外部的代码中几乎不可能正确地执行此操作。任何查看 2 条记录是否已经存在并且如果不存在则允许添加新记录的代码都可能被在同一父级上同时运行的 2 个线程所愚弄。除非您实际锁定数据库表或以某种方式序列化子添加过程,否则这两者都会真正缺乏可伸缩性。
你没有提到RDBMS,所以很难给你一个解决方案。
编辑:
我同意那些说触发器远非清洁的说法。但它们并不是在数据库中执行规则的唯一方法。这就是为什么我说在不了解您的 RDBMS 的情况下,不可能提出任何数据库解决方案,甚至是可能不需要触发器的解决方案。
此外,您不需要触发器,因为您的中间层从不执行 DML,它只是调用封装您的 CRUD 的数据库过程或包。对吧?!
关于database - "A parent object will have up to 2 children"之类的规则是否应该在数据库中重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/538317/