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 OFwyzwala 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
tasktabela 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ą
BEFOREiAFTERwyzwalacze 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.