2015-09-10 4 views
1

Я использую Microsoft SQL Server 2012.один ко многим отношений и удалять каскады

У меня есть три таблицы, A, M, Z.

Таблица А имеет 1-ко-многим с таблицей М . Он также имеет удаляемый каскад по внешнему ключу

Таблица Z - это новая таблица, и она также должна иметь отношение от 1 до многих с таблицей M, снова должен быть каскад удаления для внешнего ключа.

Я считаю, что мой дизайн испорчен? Потому что, если я удалю запись из таблицы A, соответствующие записи в таблице M будут удалены, но я предполагаю, что это нарушит связь между таблицей M & Z? Это верно?

ответ

1

Если оба ограничения определены как on delete cascade, связь не будет нарушена - удаление будет каскадом. При удалении с A все соответствующие записи M будут удалены, и для каждой записи в M все записи в Z будут удалены.

EDIT:
Основываясь на разговоре в комментариях, я неправильно понял вопрос. Правильная ситуация заключается в том, что A является родительской таблицей, а M и Z оба независимо друг от друга являются ее дочерними элементами. В этом случае удаление из A будет удаляться из M и Z, каскадируя соответствующие ограничения. Удаление тома M или Z не повлияет на другие таблицы.

+0

oh thats удобный! Я полагаю, что вы удаляете данные из таблицы M непосредственно ни с чем не с таблицей A или Z? – mHelpMe

+0

@mHelpMe Если вы удаляете из 'M', он будет каскадом к' Z', но не повлияет на 'A'. – Mureinik

+0

Я не следую за тем, зачем удалять M-каскад в Z? На мой взгляд, A имеет от 1 до многих, у M & Z есть от 1 до многих с M. Поэтому я ожидал бы, если вы удалите данные из таблицы M, которые либо ничего не происходит ни с Z, ни с A или происходят не только с одной из таблиц ? – mHelpMe

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