Použití spouštěčů si zde jen koleduje o potíže.
Kromě toho volba použití plánovače pravděpodobně není nejlepší nápad, protože naplánované úlohy mohou vidět pouze potvrzená data. Takže buď se zavazujete ve spouštěči, který vyhodí transakční logiku z okna, nebo se změny v tabulkách pozdrží až do konce transakce.
Měli byste buď:
-
Používejte postupy. Nejjednodušší odpověď. Když máte více aplikací, neměly by provádět logiku DML/businees přímo, měly by to vždy dělat pomocí procedur, aby všechny spouštěly stejný kód. Zakázat přímé DML pomocí grantů nebo zobrazení. Možná budete muset vynutit použití procedur pomocí
INSTEAD OF
spouští při zobrazeních (toto zvažte pouze v případě, že nemůžete aplikaci upravit). -
Pravděpodobně ještě lepší než postupy ve vašem případě:použijte schéma, které neobsahuje duplicitní data. Nechcete ukládat redundantní data:díky tomu je vývoj aplikací složitější, než je potřeba. Pokud jde o výkon, zdroje a energii, nejlepší způsob, jak vyřešit problém, je, když si uvědomíte, že úkol je zbytečný.
Z popisu vašeho modelu jsou sloupce, které můžete odstranit:
- task.duration_in_days
- task.end_date
- task.needs_recomputation
- subtask.start_date
- subtask.end_date
task
tabulka by obsahovala pouze datum zahájení a každý dílčí úkol by ukládal pouze jeho trvání. Když potřebujete souhrnné informace, použijte spojení. Pomocí zobrazení můžete aplikacím umožnit transparentní přístup k datům. -
Použijte řešení spouštěče mutace který používá proměnné balíčku k identifikaci upravených řádků pomocí
BEFORE
aAFTER
spouštěče příkazů. Je zřejmé, že to bude zahrnovat spoustu kódu, který bude obtížné kódovat, testovat a udržovat, takže byste místo toho měli používat možnosti (1) a (2), kdykoli je to možné.