Я пишу небольшое приложение для управления метаданными для меню. A Menu
прилагается к App
, а также (необязательно) прикрепляется к другому Menu
(поэтому определяет подменю). Итак, проводка идет следующим образом: прикрепите Menu.AppId
к App.Id
, а затем Menu.ParentId
- Menu.Id
, чтобы определить подменю.Как определить рекурсивный внешний ключ на 2 столбца
Но это может позволить мне вставить некогерентного данные:
INSERT INTO Menu (Id, ParentId, AppId, Desc) values (1, NULL, 25, 'Top Menu')
INSERT INTO Menu (Id, ParentId, AppId, Desc) values (2, 1, 36, 'Sub Menu')
Здесь я только что сказал, что Sub Menu из App # 36 должны находиться под Top Menu из App # 25 (другое приложение).
Есть ли способ я могу определить ограничение, чтобы убедиться, что, когда я вставляю Sub Menu как ребенка Top Menu, приложение должно быть # 25 (Триггеры не вариант)?
(Конечно, я буду управлять этим в пользовательском интерфейсе, но я также ищу способ защитить модель).
Спасибо,
Почему триггеры не являются опцией? – HLGEM
@HLGEM Я ищу встроенную функциональность, предоставляемую РСУБД, которую я мог пропустить. Я хочу узнать все возможные варианты перед использованием триггера. – Jeff