Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

Quando/perché utilizzare il Cascading in SQL Server?

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.