sql >> Databasteknik >  >> RDS >> PostgreSQL

Metod för att överlappa mjuka borttagningar i relationer mellan föräldrar och barn

Strängt taget är det enda sättet att kaskadera sådana värden genom att använda ON UPDATE CASCADE. För att göra det , kolumnen "is_deleted" måste vara en del av en unik restriktion.

Bara det är inte så svårt. Om company.id är din primära nyckel kommer kolumnparet {id, is_deleted} också att vara unikt. En unik begränsning för det kolumnparet skulle tillåta dig att kaskad uppdateringar genom en främmande nyckelreferens.

Men det kommer inte att fungera i din fall, eftersom du måste tillåta att referensvärden är olika från de refererade värdena.

Så i ditt fall tror jag att du har tre alternativ.

  • Utlösare
  • Lagrade procedurer
  • Ansökningskod

I alla dessa fall måste du vara uppmärksam på behörigheter (förmodligen återkalla raderingsbehörigheter) och fall som kan undvika din kod. Till exempel kan dbms kommandoradsgränssnitt och GUI-gränssnitt användas för att komma runt begränsningar i programkod och, beroende på behörigheter, i lagrade procedurer.




  1. Hur startar man MySQL med --skip-grant-tables?

  2. PostgreSQL parametriserad Order By / Limit i tabellfunktion

  3. gruppera arkiv efter år och månad med php och mysql

  4. Postgres Database Error:Relation existerar inte