sql >> Databáze >  >> RDS >> PostgreSQL

Metoda pro kaskádování měkkých odstranění ve vztazích rodič-potomek

Přesně řečeno, jediný způsob, jak kaskádovat hodnoty, jako je tato, je pomocí ON UPDATE CASCADE. Chcete-li to udělat, to , sloupec "is_deleted" musí být součástí jedinečného omezení.

To samo o sobě není příliš těžké. Pokud je vaším primárním klíčem company.id, pak bude jedinečný i pár sloupců {id, is_deleted}. Jedinečné omezení na tento pár sloupců by vám umožnilo kaskádovat aktualizace pomocí odkazu na cizí klíč.

Ale to nebude fungovat v vašich případě, protože musíte povolit, aby referenční hodnoty byly různé z referenčních hodnot.

Takže ve vašem případě si myslím, že máte tři možnosti.

  • Spouštěče
  • Uložené procedury
  • Kód aplikace

Ve všech těchto případech musíte věnovat pozornost oprávněním (pravděpodobně zrušení oprávnění k odstranění) a případům, které se mohou vyhnout vašemu kódu. Například rozhraní příkazového řádku dbms a rozhraní GUI lze použít k překonání omezení v kódu aplikace a v závislosti na oprávněních v uložených procedurách.




  1. Ukládání hodnot zeměpisné šířky a délky do databáze MySQL pro iOS

  2. Jak zjistit aktuální úroveň transakce?

  3. Určete maximální povolenou délku ve sloupci v mysql

  4. C#, Entity Framework Core &PostgreSql:vložení jednoho řádku trvá 20+ sekund