Я хотел бы отметить, что (функционально) существует БОЛЬШАЯ разница между циклами и / или несколькими путями в SCHEMA и DATA. Хотя циклы и, возможно, многолучевое распространение в DATA могут, безусловно, усложнять обработку и вызывать проблемы с производительностью (стоимость «правильной» обработки), стоимость этих характеристик в схеме должна быть близка к нулю.
Поскольку наиболее очевидные циклы в RDB происходят в иерархических структурах (оргструктура, деталь, подраздел и т. Д.), К сожалению, SQL Server предполагает худшее; т.е. цикл схемы == цикл данных. Фактически, если вы используете ограничения RI, вы на самом деле не можете построить цикл в данных!
Я подозреваю, что проблема многолучевого распространения аналогична; то есть несколько путей в схеме не обязательно подразумевают несколько путей в данных, но у меня меньше опыта с проблемой многолучевого распространения.
Конечно, если SQL Server разрешил разрешать циклы, он все равно будет подвержен глубине 32, но, вероятно, этого достаточно для большинства случаев. (Жаль, что это не настройка базы данных!)
Триггеры «вместо удаления» тоже не работают. При втором посещении таблицы триггер игнорируется. Итак, если вы действительно хотите смоделировать каскад, вам придется использовать хранимые процедуры при наличии циклов. Триггер вместо удаления удастся, однако, для случаев многолучевого распространения.
Celko предлагает «лучший» способ представления иерархий, в котором нет циклов, но есть компромиссы.