| Termin | Definicja |
|---|---|
| Kolejność wyzwalaczy | Kolejność wyzwalaczy to ustawienie decydujące, który trigger wykona się jako pierwszy przy tej samej operacji na tabeli. Na czym polega ustalanie kolejności wyzwalaczyKolejność wyzwalaczy określa, który z kilku triggerów zostanie uruchomiony jako pierwszy, gdy ta sama operacja dotyczy tej samej tabeli. Operacją może być na przykład wstawienie rekordu, zmiana istniejących danych albo ich usunięcie. Problem pojawia się wtedy, gdy w bazie istnieje więcej niż jeden wyzwalacz reagujący na ten sam rodzaj zdarzenia. Każdy trigger może wykonywać inną czynność: sprawdzać warunki, uzupełniać pola, zapisywać historię zmian, aktualizować powiązaną tabelę albo odrzucać niepoprawne dane. Sam fakt utworzenia kilku triggerów nie oznacza jeszcze, że ich wykonanie będzie zgodne z kolejnością tworzenia obiektów. Sposób ustalania kolejności zależy od konkretnego silnika bazy danych. Niektóre systemy pozwalają wskazać wyzwalacz wykonywany jako pierwszy i ostatni, a pozostałe pozostawiają w kolejności określanej wewnętrznie. W innych systemach kolejność może być ograniczona do określonych typów triggerów albo nie być gwarantowana. Dlatego aplikacja nie powinna zakładać kolejności, której dokumentacja danego silnika wyraźnie nie potwierdza. Dlaczego kolejność zmienia wynik operacjiWyzwalacze nie działają niezależnie od siebie, jeżeli odczytują lub modyfikują te same dane. Przykładowo pierwszy trigger może zmienić wartość kolumny statusu, a drugi może na podstawie tego statusu utworzyć wpis w tabeli historii. Jeżeli drugi trigger uruchomi się przed zmianą wykonaną przez pierwszy, zapisze inną informację albo nie wykona swojej głównej części. W rezultacie dane mogą być formalnie poprawne składniowo, lecz niespójne pod względem znaczenia biznesowego. Znaczenie ma także rodzaj wyzwalacza. Trigger wykonywany przed zapisaniem danych może zmienić wartości przekazywane do dalszego przetwarzania, natomiast trigger wykonywany po operacji zwykle reaguje na stan już zmienionego rekordu. W niektórych silnikach występują również wyzwalacze uruchamiane zamiast standardowej operacji, na przykład zamiast bezpośredniego wstawienia lub usunięcia. Takie mechanizmy mają inne zasady wykonania niż triggery uruchamiane po operacji, więc nie można ich traktować jako zwykłych elementów jednej listy. Skutki niejawnej kolejności w kodzie bazyNiejawna kolejność triggerów jest częstą przyczyną trudnych do odtworzenia błędów. Działanie może być prawidłowe podczas testu na jednej instalacji, a po odtworzeniu bazy, zmianie wersji silnika albo wdrożeniu dodatkowego modułu dawać inny rezultat. Szczególnie ryzykowne są triggery modyfikujące tę samą tabelę, korzystające z tabel pomocniczych albo wywołujące procedury, które ponownie zapisują dane. Wtedy jeden zapis może uruchomić cały łańcuch zależności. Podczas analizy należy ustalić pełną listę triggerów przypisanych do tabeli, ich rodzaj, moment wykonania, zakres operacji oraz kolejność wymaganą przez logikę aplikacji. Trzeba również sprawdzić, czy wyzwalacze mogą uruchamiać się rekurencyjnie, czy błędy są wycofywane razem z transakcją oraz czy któryś z nich przerywa operację. Warto testować osobno dodawanie, zmianę i usuwanie danych, a także przypadki, w których pojedyncza instrukcja obejmuje wiele rekordów. Trigger nie powinien zakładać, że otrzyma dokładnie jeden zmieniany wiersz, ponieważ wiele instrukcji SQL działa zbiorczo. Rozdzielenie odpowiedzialności i kontrola wdrożeniaBezpieczniejszy projekt ogranicza liczbę triggerów reagujących na to samo zdarzenie i jasno rozdziela ich odpowiedzialność. Jeżeli kolejność jest istotna, należy użyć mechanizmu oficjalnie obsługiwanego przez wybrany silnik oraz opisać zależność w dokumentacji schematu. Sama nazwa obiektu, kolejność plików migracji albo kolejność jego utworzenia nie powinna pełnić funkcji mechanizmu sterującego. Logikę wymagającą wielu kroków można też przenieść do jawnie wywoływanej procedury lub warstwy aplikacji, gdy pozwala to lepiej kontrolować przebieg transakcji. Warszawskie Pogotowie Komputerowe wykonuje profesjonalną naprawę laptopów, komputerów PC i ich podzespołów. W przypadku problemu z komputerem, na którym działa aplikacja korzystająca z bazy danych, diagnostyka może obejmować stan systemu, uruchamianie programów, połączenie z usługą oraz błędy widoczne po stronie urządzenia. Sama kolejność wyzwalaczy pozostaje jednak regułą konkretnego silnika bazy danych i wymaga sprawdzenia w jego schemacie oraz dokumentacji, a nie wyłącznie obserwacji objawów na laptopie lub komputerze. |