如何实现数据约束来强制执行最小数量的子对象?

时间:2011-07-24 20:06:39

标签: sql nhibernate constraints

假设每个AssetGroup对象必须至少有一个Asset对象。如何在以下方面强制执行此约束: a)传统的SQL b)NHibernate

我可以在删除操作之前检查子资源的数量,但也许还有更多的声明性方法。

如果创建AssetGroup,它是否会强制我在创建AssetGroup之前先创建资产?

2 个答案:

答案 0 :(得分:3)

你试图在错误的水平处理它。

这是业务级约束,而不是数据级约束。在您的业务层进行验证,你会没事的。

“业务层”是指实体本身,或者是数据(NH /存储库)层之上的任何实体。

答案 1 :(得分:1)

三种可能的方式:

  1. 将触发器附加到任何表,在提交之前将执行count(*)。
  2. 将字段'memberCount'添加到AssetGroup并检查约束,确保(memberCount< = 1),然后在insert do: a)手动'更新集memberCount = memberCount + 1'
    b)通过触​​发器执行此操作(看起来像1.,但存储状态)
  3. 在应用程序级别使用锁并检查。 (如Diego所述)