Wyzwalacze (triggers) 2007-08-11
Jak obiecywałem jakiś czas temu, wracam do tematu procedur składowanych. Wyzwalacze (ang. triggers), bo o nich będzie mowa, stanowią bardzo wygodny mechanizm, który odciąża naszą aplikację od dodatkowych implementacji.
Przykład, który wybrałem, aby zobrazować działanie wyzwalacza to częsty motyw wyświetlania miniaturki zdjęcia na liście dokumentów. Do każdego dokumentu może być dołączone kilka zdjęć, które trzymamy w osobnej tabeli, a nazwę pliku do jednego, wybranego zdjęcia umieszczamy w kolumnie picture tabeli z dokumentami. Dzięki temu zabiegowi przy wyświetlaniu listy dokumentów nie musimy robić złączenia (LEFT JOIN) z tabelą ze zdjęciami.
Cały mechanizm wyzwalaczy polega na tym, aby przy operacji typu INSERT, UPDATE czy DELETE na wybranej tabeli została uruchomiona wskazana przez nas funkcja. Co to oznacza w naszym przypadku? Jeśli do tabeli ze zdjęciami dodamy nowy rekord to zostanie wywołana funkcja, która wyszuka zdjęcie o najniższej wadze i wstawi je do dokumentu. To samo nastąpi gdy usuwamy czy edytujemy zdjęcie.
TG_OP - przechowuje nazwę operacji, która jest przeprowadzona, czyli INSERT, UPDATE lub DELETE
NEW - zawiera nowy rekord, przy operacji INSERT / UPDATE
OLD - zawiera stary rekord, przy operacji DELETE / UPDATE
Jak widać implementacja jest zdecydowanie prostrza niż gdybyśmy mieli to robić w środku aplikacji.
Słowa kluczowe: PHP, PostgreSQL, Techblog, bazy danych, sql, triggers, wyzwalacze, artykuł, blog
trigger to raczej przelacznik niz wyzwalacz ;)
To nie jest moje tłumaczenie tylko pod taką nazwą to funkcjonuje w języku polskim.
DevBlog, a w takim razie przepraszam bardzo. Po prostu sie przyzwyczailem do swojego sposobu nazywania ;)
A sam tekst ciekawey, chociaz w porownaniu z poprzednim wydaje sie niepelny. Aczkolwiek uzywasz Perla, wiec Inkwizycja Techblogowa chyba sie nie przyczepi :P
Trigger to zdecydowanie nie jest przełącznik :) "Wyzwalacz" to w miarę dobre określenie, spotkałem się też z "zapadką".
W tym znaczeniu w języku polskim zawsze spotykałem się z tłumaczeniem "wyzwalacz". Co do tego krótkiego artykuły to bardzo fajnie, że w polskiej sieci pisze ktoś nie tylko o podstawach. Będzie więcej?
Będzie na pewno, ale trudno mi określić kiedy. Ostatnio mam dużo pracy.
left join to generalnie tragedia - jest zasobochłonne, bo tworzy tabele tymczasowe - nie wiem czy właśnie tego po prostu nie zrobiłeś
Trigger to wyzwalacz, od kilkudziesięciu lat np. w elektronice. Tłumaczenie jest więc poprawne.
ja sie na tym w ogole nie znam, ale za to jest bardzo dobry z hakowania
a ja tez sie na tym nie znam, ale za to jestem lepszy od ciebie w hakowaniu panie "php hacker". (BTW od 10 lat pracuje w szatni gdzie mam 100 hakow na plaszcze) :D
Jestem początkujący w Postgres i zastanawia mnie skąd się bierze to "weight" przy klauzuli ORDER BY, bo w tabeli nie ma takiej kolumny. Czy miała być taka kolumna tylko się zapomniała dopisać ;) Czy może weight to jakiś magiczny operator, który potrafi odczytać wagę zdjęcia na podstawie ścieżki dostępu w kolumnie "file"?
Proszę o odpowiedź bo nie da mi to spokoju ;)
A swoją drogą przydatne przykłady dla takiego początkującego jak ja można tutaj znaleźć, świetna sprawa.
Pozdrawiam
@Gajos: dzięki za znalezienie błędu, zapomniałem dodać tą kolumnę, a odpowiada ona za kolejność zdjęć
Do D4rky:
Trigger po angielsku znaczy spust, więc bardziej wyzwalacz, niż przełącznik [switch] :ppp