Trigger (albo trigger) — to taki „callback” w bazie danych, który reaguje na określone zdarzenia. Innymi słowy, trigger to automatyczna reakcja na wykonanie operacji takich jak INSERT, UPDATE albo DELETE w tabelach.
Wyobraź sobie, że masz sprytnego asystenta, który robi coś za Ciebie. Na przykład, za każdym razem gdy dodajesz nowy wpis o studencie, asystent automatycznie aktualizuje pole z datą ostatniej zmiany. Trigger w bazie danych działa dokładnie tak samo: „nasłuchuje” zdarzeń i odpala zaprogramowaną reakcję.
Trigger łączy dwie rzeczy:
- Zdarzenie: coś się dzieje w tabeli (np. wstawienie rekordu).
- Funkcja-trigger: kod, który się wykonuje, gdy zdarzenie nastąpi.
trigger nie może istnieć bez powiązania z funkcją. Funkcja określa, co dokładnie zrobić, gdy trigger się odpali.
Przykłady użycia triggerów
Sprawdźmy kilka sytuacji, w których triggery mogą się przydać.
- Automatyczna aktualizacja danych
Chcesz, żeby w tabeli, gdzie trzymasz wpisy o studentach, było pole last_modified, które automatycznie się aktualizuje za każdym razem, gdy zmieniasz rekord. Zamiast ręcznie aktualizować to pole, możesz stworzyć trigger, który zrobi to za Ciebie.
- Logowanie zmian
Chcesz śledzić, kto i kiedy zmienia dane w tabeli. Trigger może automatycznie dodać wpis do tabeli audytu (logów) za każdym razem, gdy dane są zmieniane.
- Walidacja danych
Jeśli do tabeli dodawane są dane, które muszą spełniać określone zasady (np. wiek studenta musi być większy niż 18 lat), trigger może sprawdzić dane przed ich wstawieniem.
- Automatyczne obliczenia
W tabeli orders trzymasz zamówienia i za każdym razem, gdy dodajesz zamówienie, trzeba zaktualizować sumę zakupów klienta. Zamiast robić to ręcznie, trigger może automatycznie zaktualizować sumę.
Kiedy używać triggerów
Teraz, gdy już wiemy, co potrafią, pogadajmy, kiedy naprawdę warto używać triggerów.
Logowanie i audyt: triggery są idealne do tworzenia wpisów audytowych, żeby śledzić zmiany w krytycznych tabelach.
Utrzymanie spójności danych: na przykład, jeśli usuwasz kurs z bazy, trigger może automatycznie usunąć wszystkich studentów powiązanych z tym kursem, żeby nie było „wiszących” danych.
Automatyzacja powtarzalnych zadań: takie zadania to np. aktualizacja wartości wyliczanych, aktualizacja danych zagregowanych i tak dalej.
Realizacja logiki biznesowej w DB: zamiast polegać tylko na kodzie aplikacji, część logiki możesz przenieść na poziom bazy danych.
Zalety triggerów
Pewnie już się domyślasz, triggery to potężne narzędzie. Oto co dają:
Automatyzacja: minimum ingerencji człowieka. Na przykład śledzenie użytkowników zmieniających dane dzieje się automatycznie.
Mniej powielania kodu: zamiast zmuszać programistów do pisania logiki aktualizacji czy walidacji w każdej aplikacji, możemy ją wrzucić do DB.
Zapewnienie spójności danych: trigger może być dodatkową warstwą ochrony, żeby dane zawsze były poprawne.
Wady triggerów
Oczywiście, jak każde narzędzie, triggery mają swoje minusy. Zobaczmy ich ciemną stronę:
Trudność debugowania: triggery działają „w tle”. Jeśli nie zachowują się jak oczekujesz, debugowanie może być trudne.
Potencjalne problemy z wydajnością: jeśli trigger jest zbyt skomplikowany albo odpala się za często, może spowolnić wykonywanie zapytań SQL.
Ukryta logika: kiedy logika biznesowa jest „zakopana” w triggerach, programistom trudniej ogarnąć, co się naprawdę dzieje w bazie.
Prawdziwe scenariusze użycia
Przykład 1: Logowanie zmian
Załóżmy, że mamy tabelę students, gdzie trzymamy dane o studentach. Chcemy śledzić zmiany rekordów. Do tego trigger będzie dodawał wpis do tabeli audit_log za każdym razem, gdy zmienią się dane o studencie.
Przykład 2: Automatyczna aktualizacja
W tabeli students jest kolumna last_modified. Chcemy, żeby jej wartość była aktualizowana za każdym razem, gdy zmieniają się dane o studencie. Można to zrobić przez trigger, który odpala się po aktualizacji.
GO TO FULL VERSION