Korzystanie z wyzwalaczy to po prostu proszenie o kłopoty.
Ponadto wybór korzystania z programu planującego nie jest prawdopodobnie najlepszym pomysłem, ponieważ zaplanowane zadania mogą wyświetlać tylko zatwierdzone dane. Więc albo zatwierdzasz wyzwalacz, który wyrzuca logikę transakcji poza okno, albo zmiany w tabelach są opóźniane do końca transakcji.
Powinieneś:
-
Stosuj procedury. Najprostsza odpowiedź. Gdy masz wiele aplikacji, nie powinny one bezpośrednio wykonywać logiki DML/businees, powinny zawsze robić to za pomocą procedur, aby wszystkie uruchamiały ten sam kod. Zabroń bezpośredniego DML z dotacjami lub widokami. Może być konieczne wymuszenie użycia procedur poprzez
INSTEAD OF
wyzwala na widokach (rozważ to tylko wtedy, gdy nie możesz modyfikować aplikacji). -
Prawdopodobnie nawet lepsze niż procedury w Twoim przypadku:użyj schematu, który nie zawiera zduplikowanych danych. Nie chcesz przechowywać nadmiarowych danych:to sprawia, że tworzenie aplikacji jest bardziej złożone niż to konieczne. Jeśli chodzi o wydajność, zasoby i energię, najlepszym sposobem rozwiązania problemu jest uświadomienie sobie, że zadanie jest niepotrzebne.
W opisie modelu znajdują się kolumny, które możesz usunąć:
- zadanie.duration_in_days
- data.end_zadania
- task.needs_recomputation
- podzadanie.data_początkowa
- podzadanie.data_końcowa
task
tabela zawierałaby tylko datę rozpoczęcia, a każde podzadanie przechowywałoby tylko czas trwania. Gdy potrzebujesz informacji zagregowanych, użyj złączeń. Możesz użyć widoków, aby umożliwić aplikacjom przejrzysty dostęp do danych. -
Użyj obejścia wyzwalacza mutacji który używa zmiennych pakietu do identyfikowania zmodyfikowanych wierszy za pomocą
BEFORE
iAFTER
wyzwalacze instrukcji. Oczywiście będzie to wymagało dużej ilości kodu, który będzie trudny do zakodowania, przetestowania i utrzymania, więc powinieneś zamiast tego używać opcji (1) i (2), gdy tylko jest to możliwe.