RDBMS中的多行表约束

时间:2016-07-08 17:18:34

标签: java sql web-applications concurrency

假设存在业务级别约束,其中给定对象不能超过N个子对象。如果要创建子对象,如何确保永远不会为该给定对象创建多于N个子对象?

如果执行READ以获取现有子对象的数量,验证少于N,然后在表中执行INSERT,则READ和INSERT之间有时间可以进入另一个INSERT。< / p>

您不想锁定表格,因为这会对其他查询产生负面影响。

更具体的示例是,如果您有Resident对象和Home对象。在Resident表中,有id,resident_name,home_id之类的东西。您如何确保不超过4名居民拥有相同的home_id?

1 个答案:

答案 0 :(得分:0)

关系数据库约束不是为实现业务规则而设计的 - 它们旨在保护技术层面的数据完整性,许多现代开发人员根本不喜欢它们,更喜欢它们将DB视为简单的持久性机制。尽管如此,在某些数据库中,您可以通过使用存储过程和触发器来实现您想要的目标。

如果您想确保此规则不会“永远不会”。如果违反了数据库,则DB必须成为服务的私有数据存储,这是访问数据库的唯一方法,并且对它的所有访问都必须通过该服务进行。然后,该服务可以以清晰一致的方式实现此规则和其他业务规则。