Je voudrais souligner que (fonctionnellement) il y a une GRANDE différence entre les cycles et / ou plusieurs chemins dans le SCHEMA et les DATA. Alors que les cycles et peut-être les trajets multiples dans les DONNÉES pourraient certainement compliquer le traitement et causer des problèmes de performances (coût d'une manipulation «correcte»), le coût de ces caractéristiques dans le schéma devrait être proche de zéro.
Étant donné que la plupart des cycles apparents dans les RDB se produisent dans des structures hiérarchiques (organigramme, partie, sous-partie, etc.), il est malheureux que SQL Server suppose le pire; c'est-à-dire, cycle de schéma == cycle de données. En fait, si vous utilisez des contraintes RI, vous ne pouvez pas réellement créer un cycle dans les données!
Je soupçonne que le problème des trajets multiples est similaire; c'est-à-dire que plusieurs chemins dans le schéma n'impliquent pas nécessairement plusieurs chemins dans les données, mais j'ai moins d'expérience avec le problème des trajets multiples.
Bien sûr, si SQL Server l'a fait permet cycles , il serait encore faire l' objet d'une profondeur de 32, mais qui est probablement suffisant pour la plupart des cas. (Dommage que ce ne soit pas un paramètre de base de données cependant!)
Les déclencheurs "au lieu de supprimer" ne fonctionnent pas non plus. La deuxième fois qu'une table est visitée, le déclencheur est ignoré. Donc, si vous voulez vraiment simuler une cascade, vous devrez utiliser des procédures stockées en présence de cycles. Cependant, le déclencheur au lieu de supprimer fonctionnerait pour les cas de trajets multiples.
Celko suggère une «meilleure» façon de représenter les hiérarchies qui n'introduit pas de cycles, mais il y a des compromis.