Riepilogo di ciò che ho visto finora:
- Ad alcune persone non piace affatto la cascata.
Eliminazione a cascata
- L'eliminazione a cascata può avere senso quando la semantica della relazione può coinvolgere un esclusivo "fa parte di " descrizione. Ad esempio, un record OrderLine fa parte del suo ordine padre e OrderLines non verrà mai condiviso tra più ordini. Se l'Ordine dovesse scomparire, anche OrderLine dovrebbe e una riga senza un Order sarebbe un problema.
- L'esempio canonico di Cascade Delete è SomeObject e SomeObjectItems, dove non ha alcun senso che un record di elementi esista senza un record principale corrispondente.
- Non dovresti non usa Cascade Delete se stai preservando la cronologia o usando una "cancellazione logica/soft" in cui imposti solo una colonna di bit eliminati su 1/true.
Aggiornamento a cascata
- L'aggiornamento a cascata può avere senso quando utilizzi una chiave reale anziché una chiave surrogata (colonna identità/incremento automatico) tra le tabelle.
- L'esempio canonico di Cascade Update è quando hai una chiave esterna mutabile, come un nome utente che può essere modificato.
- Non dovresti non usa l'aggiornamento a cascata con chiavi che sono colonne Identity/autoincrement.
- L'aggiornamento a cascata viene utilizzato al meglio insieme a un vincolo univoco.
Quando utilizzare la cascata
- Potresti voler ricevere una conferma extra forte dall'utente prima di consentire l'esecuzione a cascata di un'operazione, ma dipende dalla tua applicazione.
- Il collegamento a cascata può metterti nei guai se imposti le tue chiavi esterne in modo errato. Ma dovresti stare bene se lo fai bene.
- Non è saggio usare la cascata prima di averla compresa a fondo. Tuttavia, è una funzionalità utile e quindi vale la pena dedicare del tempo a capirla.