database - "A parent object will have up to 2 children"之类的规则是否应该在数据库中重复

标签 database database-design orm domain-driven-design

可以使用触发器在数据库中强制执行诸如“父对象最多有 2 个子对象”之类的规则。但是,如果此规则已在域层中强制执行,那么复制该规则是否是个好主意。

在哪些情况下重复此类规则是合理的?有没有其他方法可以避免这种重复?这不是数据完整性规则吗?

谢谢

最佳答案

在数据库外部的代码中几乎不可能正确地执行此操作。任何查看 2 条记录是否已经存在并且如果不存在则允许添加新记录的代码都可能被在同一父级上同时运行的 2 个线程所愚弄。除非您实际锁定数据库表或以某种方式序列化子添加过程,否​​则这两者都会真正缺乏可伸缩性。

你没有提到RDBMS,所以很难给你一个解决方案。

编辑:

我同意那些说触发器远非清洁的说法。但它们并不是在数据库中执行规则的唯一方法。这就是为什么我说在不了解您的 RDBMS 的情况下,不可能提出任何数据库解决方案,甚至是可能不需要触发器的解决方案。

此外,您不需要触发器,因为您的中间层从不执行 DML,它只是调用封装您的 CRUD 的数据库过程或包。对吧?!

关于database - "A parent object will have up to 2 children"之类的规则是否应该在数据库中重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/538317/

相关文章:

sql - SQL Management Studio 中的虚线/点线关系线代表什么 - 数据库图

php - 自动加载数据库类

postgresql - 每个客户数据库设计的模式注意事项是什么

mysql - 将相似的数据对象合并到单个表中是否有效?

mysql - 存储长二进制(原始数据)字符串

python - 有哪些好的 Python ORM 解决方案?

java - JPA 中的 @Basic(optional = false) 与 @Column(nullable = false)

database - 从第三个表中引用两个可能表中的一个是不好的做法吗?

sql-server - 在使用 SQL Server 数据库邮件创建的电子邮件中嵌入图像

android - ormlite是否支持批量创建和更新、删除