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

发布于 2024-11-26 08:52:30 字数 189 浏览 2 评论 0原文

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

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

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

Suppose each AssetGroup object must have at least 1 Asset object . How to enforce this constraint in :
a) traditional SQL
b) NHibernate

I can check the number of children Asset before delete operation , but perhaps there are more declarative ways to do it .

In case of creating AssetGroup, does it force me to create an Asset first before creating an AssetGroup ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

懷念過去 2024-12-03 08:52:30

你试图在错误的层面上处理这个问题。

这是业务级别的约束,而不是数据级别的约束。在您的业务层进行验证就可以了。

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

You're trying to deal with that at the wrong level.

This is a business-level constraint, not a data-level one. Do the validation in your business layer and you'll be fine.

By "business layer" I mean either the entities themselves, or whatever you have on top of the data (NH/Repository) layer.

江挽川 2024-12-03 08:52:30

三种可能的方法:

  1. 将触发器附加到任何表,这将在提交之前执行 count(*)。
  2. 将字段“memberCount”添加到您的 AssetGroup 中并检查约束,以确保 (memberCount <=1),然后在插入时执行以下操作:
    a) 手动“更新集memberCount = memberCount + 1”
    b) 通过触发器执行此操作(看起来像 1.,但具有存储的状态)
  3. 使用锁并在应用程序级别进行检查。 (正如迭戈提到的)

Three possible ways:

  1. Attach trigger to any of tables, which will do count(*) before commit.
  2. Add field 'memberCount' to you AssetGroup and check constraint, which ensures (memberCount <=1), then on insert do:
    a) manual 'update set memberCount = memberCount + 1'
    b) do this via trigger (looks like 1., but with stored state)
  3. Use locks and check at application level. (as mentioned by Diego)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文