PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Metodo per l'eliminazione temporanea a cascata nelle relazioni padre-figlio

A rigor di termini, l'unico modo per sovrapporre valori del genere è utilizzare ON UPDATE CASCADE. Per fare questo , la colonna "is_deleted" deve far parte di un vincolo univoco.

Questo da solo non è troppo difficile. Se company.id è la tua chiave primaria, anche la coppia di colonne {id, is_deleted} sarà univoca. Un vincolo univoco su quella coppia di colonne ti consentirebbe di eseguire aggiornamenti a cascata tramite un riferimento di chiave esterna.

Ma non funzionerà nel tuo caso, perché è necessario consentire che i valori di riferimento siano diversi dai valori di riferimento.

Quindi, nel tuo caso, penso che tu abbia tre opzioni.

  • Trigger
  • Procedure archiviate
  • Codice dell'applicazione

In tutti questi casi, devi prestare attenzione ai permessi (probabilmente revocando i permessi di eliminazione) e ai casi che possono evitare il tuo codice. Ad esempio, l'interfaccia della riga di comando dbms e l'interfaccia GUI possono essere utilizzate per aggirare i vincoli nel codice dell'applicazione e, a seconda delle autorizzazioni, nelle procedure memorizzate.