| Termin | Definicja |
|---|---|
| Wyzwalacz INSTEAD OF | Wyzwalacz INSTEAD OF zastępuje standardową operację własną logiką, np. przy widokach nieaktualizowalnych bezpośrednio. Jak działa wyzwalacz INSTEAD OFWyzwalacz INSTEAD OF jest procedurą uruchamianą w chwili wykonania określonej operacji na obiekcie bazy danych, najczęściej na widoku. Słowo „INSTEAD OF” oznacza, że kod wyzwalacza wykonuje się zamiast standardowej operacji, takiej jak INSERT, UPDATE albo DELETE. Jeżeli użytkownik wysyła polecenie zmiany danych do widoku, baza danych nie próbuje bezpośrednio zmodyfikować tego widoku, lecz przekazuje obsługę do logiki zapisanej w wyzwalaczu. Mechanizm ten jest przydatny wtedy, gdy obiekt nie ma jednoznacznego bezpośredniego odwzorowania na pojedynczą tabelę. Dotyczy to między innymi widoków łączących kilka tabel, zawierających agregacje, operacje DISTINCT, grupowanie albo inne elementy utrudniające automatyczne przekształcenie operacji DML na zmianę w tabelach bazowych. Wyzwalacz może rozdzielić otrzymane wartości na właściwe tabele, wykonać dodatkowe sprawdzenia i zdecydować, jakie operacje mają zostać faktycznie przeprowadzone. Obsługa INSERT, UPDATE i DELETE przez widokWyzwalacz INSTEAD OF musi być związany z konkretnym rodzajem operacji. Osobna logika może obsługiwać dodawanie, modyfikowanie lub usuwanie rekordów. W przypadku INSERT wyzwalacz może pobrać wartości przekazane do widoku i wstawić je do jednej albo kilku tabel. Przy UPDATE powinien ustalić, które wartości są nowe, a które identyfikują istniejący rekord. Przy DELETE może odszukać rekordy bazowe i usunąć je zgodnie z regułami przyjętymi dla danego modelu danych. Przykładowo widok może prezentować dane klienta połączone z informacjami o jego adresie, mimo że dane te znajdują się w dwóch oddzielnych tabelach. Próba dodania rekordu do takiego widoku nie musi oznaczać pojedynczego zapisu. Wyzwalacz INSTEAD OF może najpierw utworzyć klienta, następnie zapisać adres z użyciem identyfikatora nowego klienta, a na końcu zwrócić wynik operacji zgodny z interfejsem widoku. Szczegóły składni i dostępnych typów wyzwalaczy zależą od konkretnego systemu zarządzania bazą danych. Kontrola spójności i skutki uboczne błędnej logikiWyzwalacz INSTEAD OF może realizować walidację wartości, mapowanie kolumn, obsługę kluczy obcych oraz kontrolowane zapisy do kilku tabel. Powinien jednak jasno określać, jaki efekt odpowiada operacji otrzymanej od użytkownika. Jeżeli kod wyzwalacza nie wykona zapisu, nie zgłosi błędu i nie przekaże odpowiedniego rezultatu, polecenie może zakończyć się pozornym sukcesem bez faktycznej zmiany danych. Taki przypadek jest szczególnie trudny do wykrycia, ponieważ aplikacja może otrzymać poprawną odpowiedź techniczną, mimo że stan bazy pozostał bez zmian. Problemy mogą również wynikać z niepełnej obsługi kolumn, wielokrotnego zapisu tego samego rekordu, nieprawidłowego rozpoznawania klucza albo braku obsługi operacji wielowierszowej. Kod wyzwalacza powinien zakładać, że jedno polecenie może dotyczyć wielu wierszy, a nie tylko pojedynczego rekordu. W przeciwnym razie część danych może zostać pominięta lub przypisana do niewłaściwego wiersza. Należy także kontrolować transakcję, aby błędny zapis do jednej tabeli nie pozostawił częściowo wykonanej operacji w pozostałych tabelach. Sprawdzanie działania w przepływie danychDiagnostyka wyzwalacza INSTEAD OF powinna obejmować cały przepływ: polecenie wysłane przez aplikację, widok przyjmujący operację, kod wyzwalacza oraz tabele, w których powinien pojawić się wynik. Najpierw warto ustalić, dla jakich operacji wyzwalacz jest aktywny i jakie kolumny odczytuje z rekordu wejściowego. Następnie należy porównać wartości przekazane do widoku z wartościami zapisanymi w tabelach bazowych, zwracając uwagę na identyfikatory, wartości NULL, konwersje typów i reguły domyślne. W przypadku braku oczekiwanej zmiany trzeba sprawdzić, czy wyzwalacz rzeczywiście został wywołany, czy jego warunki logiczne dopuściły zapis oraz czy nie zakończył pracy bez wykonania operacji. Przydatne jest testowanie osobno INSERT, UPDATE i DELETE, również dla wielu wierszy jednocześnie. Należy rejestrować błędy i kontrolować wynik transakcji, ponieważ sam fakt przyjęcia polecenia przez aplikację nie potwierdza poprawnej modyfikacji danych. Wyzwalacz INSTEAD OF jest więc warstwą pośrednią między interfejsem widoku a tabelami i wymaga analizy zarówno kodu, jak i rzeczywistego stanu bazy. |