PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Метод за каскадно меко изтриване в отношенията родител-дете

Строго погледнато, единственият начин за каскадни стойности като този е чрез използване на ON UPDATE CASCADE. За да направите това , колоната "is_deleted" трябва да бъде част от уникално ограничение.

Само това не е твърде трудно. Ако company.id е вашият първичен ключ, тогава двойката колони {id, is_deleted} също ще бъде уникална. Уникално ограничение за тази двойка колони би ви позволило да извършвате каскадни актуализации чрез препратка към външен ключ.

Но това няма да работи във вашия случай, защото трябва да разрешите стойностите за препратка да бъдат различни от посочените стойности.

Така че във вашия случай мисля, че имате три възможности.

  • Задействания
  • Запазени процедури
  • Код на приложението

Във всички тези случаи трябва да обърнете внимание на разрешенията (вероятно отнемане на разрешенията за изтриване) и на случаите, които могат да избегнат вашия код. Например интерфейсът на командния ред на dbms и GUI интерфейсът могат да се използват за заобикаляне на ограниченията в кода на приложението и, в зависимост от разрешенията, в съхранените процедури.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Postgresql COPY CSV ERROR:допълнителни данни след последната очаквана колона

  2. Как да получа текущото име на часовата зона в Postgres 9.3?

  3. AssertionError:връзката с базата данни не е зададена на UTC

  4. Релси - намиране само на записи, където има has_many свързани записи

  5. Функция JPA lower() на параметър