in MSSQL 2005 ho appena colpito il messaggio di errore infame:Qual è il problema con la chiave esterna a cascata più percorsi e cicli?
Introducendo vincolo FOREIGN KEY XXX YYY sul tavolo può causare cicli o più percorsi a cascata. Specificare ON DELETE NO ACTION o ON UPDATE NO ACTION o modificare altri vincoli FOREIGN KEY.
Ora, StackOverflow ha diversi argomenti su questo messaggio di errore, così ho già la soluzione (nel mio caso dovrò utilizzare i trigger), ma io sono curioso di sapere perché v'è una tale problema a tutti.
A quanto mi risulta, ci sono fondamentalmente due scenari che vogliono evitare - un ciclo e percorsi multipli. Un ciclo sarebbe il punto in cui due tabelle hanno chiavi esterne a cascata l'una rispetto all'altra. OK, un ciclo può comprendere anche più tabelle, ma questo è il caso di base e sarà più semplice da analizzare.
percorsi multipli sarebbero quando TableA ha chiavi esterne per TableB e TableC, e TableB ha anche una chiave esterna per TableC. Ancora una volta - questo è il caso di base minimo.
non riesco a vedere gli eventuali problemi che potrebbero sorgere quando un record otterrebbe cancellati o aggiornati in una di queste tabelle. Certo, potrebbe essere necessario interrogare la stessa tabella più volte per vedere quali record devono essere aggiornati/eliminati, ma è davvero un problema? È un problema di prestazioni?
In altri argomenti SO le persone arrivano fino all'etichetta che utilizza cascate come "risky" e affermano che "resolving cascade paths is a complex problem". Perché? Dov'è il rischio? Dov'è il problema?
Sostituirlo con un trigger lo rende migliore? Naturalmente - esiste un approccio del genere come "non usare le chiavi estranee" e fare tutto dal codice. Non penso di doverti dire perché penso che sia una cattiva idea ... –