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

Metode til cascading af bløde sletninger i forældre-barn-forhold

Strengt taget er den eneste måde at kaskadere værdier på ved at bruge ON UPDATE CASCADE. For at gøre det , skal kolonnen "is_deleted" være en del af en unik begrænsning.

Det alene er ikke for svært. Hvis company.id er din primære nøgle, så vil kolonneparret {id, is_deleted} også være unikke. En unik begrænsning på dette søjlepar ville give dig mulighed for at kaskadere opdateringer gennem en fremmednøglereference.

Men det virker ikke i din tilfælde, fordi du skal tillade, at referenceværdier er anderledes fra de refererede værdier.

Så i dit tilfælde tror jeg, du har tre muligheder.

  • Udløsere
  • Gemte procedurer
  • Ansøgningskode

I alle disse tilfælde skal du være opmærksom på tilladelser (sandsynligvis tilbagekaldelse af slettetilladelser) og til tilfælde, der kan undgå din kode. For eksempel kan dbms kommandolinjegrænseflade og GUI-grænseflade bruges til at omgå begrænsninger i applikationskode og, afhængigt af tilladelser, i lagrede procedurer.




  1. højre parentes fejl ORA-00907 i Oracle

  2. SQL sum for år rapport, leder efter en elegant løsning

  3. Masser af Query End-tilstande i MySQL, alle forbindelser brugt i løbet af få minutter

  4. få succes/fiasko svar fra mysqli_query