Производитель
(PK) - Id
Имя
Стенд
(PK) - Id
VendorId - fk - каскадное удаление, если Vendor удален)
Имя
Пункт
(PK) - Id
VendorId - (fk - каскадное удаление, если Vendor удален)
Имя
Цена
UnavailableItem
(PK) - ItemId - (fk - каскадное удаление, если элемент удален)
(PK) - StandId - (fk - каскадное удаление, если подставка удалена)
База данных выше представляет спортивный стадион.
Существует несколько поставщиков (Пицца Боба, Тако Тома ...)
Для каждого Продавца существует несколько Стендов (Бобская пиццерия А, Бобская пиццерия Б ...)
Товары настраиваются Продавцом, так как все стенды для конкретного Продавца предлагают одинаковые товары по одинаковым ценам.
В стойках может заканчиваться конкретный элемент, поэтому в таблице UnavailableItems есть запись для каждого элемента, который стал недоступен на данном стенде (с использованием составного первичного ключа ItemId и StandId)
Проблема:
Я могу создать все отлично, пока не добавлю последний перечисленный внешний ключ (FK_UnavailableItem_StandId_Stand_Id) с правилом удаления: Cascaded
SQL Compact 3.5 (с использованием VS 2010 Server Explorer) сообщает о следующей ошибке:
Ссылочные отношения приведут к циклической ссылке, которая не допускается.
Я понимаю, что если у меня есть запись в таблице UnavailableItem, и ее поставщик удаляется, он попытается удалить ее дважды:
Один раз, потому что ссылка на его элемент была удалена.
Однажды, поскольку ссылка на ее стенд была удалена.
Однако это не кажется мне цикличным. Ветвь каскадного удаления удаляется в два пути (Удаленные стойки и Удаленные элементы), которые заканчиваются удалением одной и той же записи ... но заканчиваются там. После этого не существует бесконечного цикла каскадного удаления. Я что-то упустил или это ограничение инструментов, которые я использую?
Спасибо за любую помощь, которую вы можете оказать!