Обеспечить связь ОДНОГО с МНОГИМ в SQL Server - PullRequest
0 голосов
/ 08 февраля 2011

У меня есть 2 таблицы в моей базе данных. Таблица 1 ' OrderItems ' и Таблица 2 ' Orders '. Каждый ' Order ' может иметь ноль или более ' OrderItems '. Я определил ограничение FK, связывающее первичные ключи: OrderId и OrderItemId с DeleteRule, установленным в «Cascade». Это гарантирует, что все OrderItems будут удалены при удалении ордера.

Чего мне следует избегать, так это пустых заказов. Мне нужно убедиться, что у ордера есть по крайней мере один OrderItem , в противном случае он должен быть удален автоматически, как только последний связанный OrderItem будет удален. Конечно, я могу проверить это в моем приложении, но в идеале БД может справиться с этим.

Я использую MS SQL Server 2008 и Entity Framework в качестве ORM.

Спасибо!

Ответы [ 4 ]

1 голос
/ 08 февраля 2011

Такие отношения не могут быть применены с использованием обычных правил отношений;в конце концов, как бы вы добавили заказ?Если вы не можете добавить элемент заказа без заказа, но у вас не может быть заказов без элементов заказа, вы столкнетесь с сценарием «курица или яйцо».

Единственное реальное решение -создать триггер удаления в таблице OrderItem, который удаляет соответствующий ордер, если это последний элемент.

1 голос
/ 08 февраля 2011

Мне не известен способ сделать это на основе ограничений.У вас может быть успех с триггером на удаление из таблицы OrderItem, которая проверяет "бездетные" Order записи и удаляет эти ... Это может быть тяжелый подход "вскипятить океан", и вы можетелучше использовать этот сценарий в бизнес-логике, как рекомендует @rcravens.

1 голос
/ 08 февраля 2011

Рассмотрим ОБНОВЛЕНИЕ ТРИГГЕРА , чтобы проверить, есть ли у вас какие-либо оставшиеся позиции заказа, а затем заархивируйте Заказ.

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

1 голос
/ 08 февраля 2011

Это двунаправленное отношение не может быть применено в схеме БД.Вам, вероятно, придется применить это в своей бизнес-логике.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...