2008-09-23 5 views
0

У меня есть следующая таблица отношения в моей базе данных:Почему я получаю «несколько каскадных путей» с этой табличной связью?

  Parent 
     / \ 
    Child1  Child2 
     \  /
     GrandChild 

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

Когда я пытаюсь добавить ВКЛЮЧИТЬ КАСКАД в отношения FK, все прекрасно добавляет их к одной «стороне» двух детей (Parent-Child1-GrandChild отлично подходит для Cascade Delete). Однако, как только я добавляю Cascade Delete на стороне Child2 «отношения SQL, говорит мне, что FK вызывает несколько каскадных путей. У меня создалось впечатление, что несколько каскадных путей применяются только тогда, когда более одного FK указывает ту же таблицу. Почему в этом случае я получаю ошибку с несколькими каскадными путями?

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

ответ

4

Сообщение означает, что если вы удалите родительскую запись, есть два пути, которые приводят ко всем удаляемым записям GrandChild.

Исправление: удалите опции ВКЛЮЧИТЬ DELETE CASCADE в FK и создайте триггеры INSTEAD OF DELETE для таблиц ChildX, удалив все записи внуков, а затем сами записи childX.

Смежные вопросы