Как реализовать ограничения данных для обеспечения минимального количества дочерних объектов? - PullRequest
0 голосов
/ 25 июля 2011

Предположим, что каждый объект AssetGroup должен иметь как минимум 1 объект Asset. Как применить это ограничение в: а) традиционный SQL б) NHibernate

Я могу проверить количество дочерних активов перед операцией удаления, но, возможно, есть более декларативные способы сделать это.

В случае создания AssetGroup, вынуждает ли я сначала создать актив перед созданием AssetGroup?

Ответы [ 2 ]

3 голосов
/ 25 июля 2011

Вы пытаетесь справиться с этим на неправильном уровне.

Это ограничение бизнес-уровня, а не уровня данных.Проведите проверку на вашем бизнес-уровне, и все будет в порядке.

Под «бизнес-уровнем» я подразумеваю либо сами сущности, либо все, что у вас есть над уровнем данных (NH / Repository).

1 голос
/ 25 июля 2011

Три возможных способа:

  1. Присоединить триггер к любой из таблиц, которые будут считать (*) перед фиксацией.
  2. Добавить поле 'memberCount' к вам AssetGroup и проверить ограничение, который гарантирует (memberCount <= 1), а затем при вставке делает: a) ручное 'обновление набора memberCount = memberCount + 1' <br>b) делает это через триггер (выглядит как 1., но с сохраненным состоянием)
  3. Используйте блокировки и проверяйте на уровне приложения.(как упомянуто Диего)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...