Una situazione tipica con più percorsi a cascata sarà questa: una tabella principale con due dettagli, diciamo "Master" e "Dettaglio1" e "Dettaglio2". Entrambi i dettagli sono eliminati in cascata. Finora nessun problema. Ma cosa succede se entrambi i dettagli hanno una relazione uno-a-molti con un'altra tabella (dire "SomeAltherTable"). SomeOtherTable ha una colonna Detail1ID E una colonna Detail2ID.
Master { ID, masterfields }
Detail1 { ID, MasterID, detail1fields }
Detail2 { ID, MasterID, detail2fields }
SomeOtherTable {ID, Detail1ID, Detail2ID, someothertablefields }
In altre parole: alcuni dei record in SomeOtherTable sono collegati ai record Detail1 e alcuni dei record in SomeOtherTable sono collegati ai record Detail2. Anche se è garantito che i record SomeOtherTable non appartengono mai a entrambi i dettagli, ora è impossibile fare in modo che i record di SomeOhterTable vengano eliminati in cascata per entrambi i dettagli, poiché esistono più percorsi a cascata dal master a SomeOtherTable (uno tramite Detail1 e uno tramite Detail2). Ora potresti averlo già capito. Ecco una possibile soluzione:
Master { ID, masterfields }
DetailMain { ID, MasterID }
Detail1 { DetailMainID, detail1fields }
Detail2 { DetailMainID, detail2fields }
SomeOtherTable {ID, DetailMainID, someothertablefields }
Tutti i campi ID sono campi chiave e incremento automatico. Il punto cruciale risiede nei campi DetailMainId delle tabelle Detail. Questi campi sono contrapposti chiave e referenziale. Ora è possibile eliminare a cascata tutto cancellando solo i record master. Il rovescio della medaglia è che per ogni record detail1 E per ogni record detail2, deve esserci anche un record DetailMain (che viene effettivamente creato per primo per ottenere l'id corretto e univoco).