CodeGym /Kursy /SQL SELF /Tworzenie triggerów i procedur

Tworzenie triggerów i procedur

SQL SELF
Poziom 61 , Lekcja 3
Dostępny

Poradziłeś sobie bez problemu z poprzednimi zadaniami? No to co, dam ci coś trudniejszego. Przejdźmy do utrwalenia twojej wiedzy z PL-SQL i pisania procedur oraz triggerów. Gotowy?

Tworzenie procedur

Poniżej znajdziesz procedury, które warto dodać do bazy danych twojego marketplace'u. Każda procedura ma wyjaśnienie, jakie zadania i procesy biznesowe rozwiązuje i dlaczego warto ją wdrożyć. Te procedury obejmują automatyzację kluczowych operacji, poprawę wygody użytkowników, optymalizację działania witryny, logistyki, wsparcia, marketingu i analityki.

1. Składanie zamówienia z automatyczną rezerwacją towarów

Składanie zamówienia to kluczowa operacja w każdym marketplace. Procedura powinna nie tylko tworzyć rekord zamówienia i jego pozycji, ale też rezerwować towar w magazynie, odejmować ilość, ustawiać status, inicjować płatność i uruchamiać kolejne procesy (powiadomienia, logistykę). Automatyzacja tego scenariusza zmniejsza ryzyko błędów przy ręcznym wprowadzaniu, pomaga uniknąć over-sellingu i zapewnia spójność zapasów w czasie rzeczywistym.

2. Automatyzacja uzupełniania zapasów towaru

Aby zapobiec out-of-stock i utracie sprzedaży, ważne jest terminowe uzupełnianie magazynów, jeśli poziom zapasów spadnie poniżej progu. Ta procedura sprawdza zapasy wszystkich produktów, porównuje je z minimalnym poziomem i automatycznie tworzy zamówienia na zakup lub wewnętrzny resupply. Automatyzacja skraca czas reakcji i zmniejsza ręczne obciążenie działu operacyjnego.

3. Masowa aktualizacja statusów zamówień i powiadamianie klientów

W katalogu często trzeba masowo zmieniać statusy zamówień (np. “paid” → “shipped” lub “shipped” → “completed”) w zależności od etapu obsługi. Procedura aktualizuje statusy wszystkich pasujących zamówień, zapisuje historię zmian (do audytu) i może inicjować wysyłkę powiadomień do klientów. To automatyzuje pracę back-office i minimalizuje ręczne błędy.

4. Masowe stosowanie zniżek/promokodów do produktów

Promowanie produktów lub prowadzenie akcji często wymaga masowego stosowania promokodów i zniżek do całej kategorii, marki lub wybranej grupy produktów. Procedura automatycznie ustawia zniżki, pilnuje ograniczeń (data, limity), aktualizuje liczniki użyć i zapobiega duplikatom.

5. Automatyczny zwrot środków użytkownikowi

Obsługa zwrotów i zwrot środków to krytyczny proces dla zaufania klientów. Procedura powinna sprawdzać status zamówienia, ważność zwrotu, inicjować zwrot płatności, aktualizować statusy, logować transakcje i powiadamiać użytkownika. Obsługa wszystkich warunków w jednej transakcji zmniejsza ryzyko błędów i nadużyć.

6. Przeliczanie średniej oceny produktu / sprzedawcy

Przy każdym nowym komentarzu, zmianie lub usunięciu, średnia ocena produktu lub użytkownika powinna być aktualna. Procedura szybko przelicza i aktualizuje pole “avg_rating”/“review_count”, żeby przyspieszyć zapytania frontowe i zapewnić spójność analityki.

7. Automatyczna dezaktywacja produktów z zerowym stanem magazynowym

Dla poprawnego działania witryny marketplace'u i żeby uniknąć negatywnych doświadczeń użytkowników, produkty z zerowym stanem magazynowym powinny być automatycznie ukrywane (dezaktywowane). Procedura regularnie sprawdza magazyny i status produktów, zmienia status na “inactive”, loguje zmianę i pomaga utrzymać katalog w aktualnym stanie bez ręcznej kontroli.

8. Automatyczne przypisanie zamówienia kurierowi i aktualizacja statusu dostawy

W logistyce ważne jest szybkie i przejrzyste przypisywanie kuriera do zamówienia, zmiana statusu dostawy, rejestrowanie wszystkich działań do śledzenia. Procedura automatyzuje te kroki i pozwala wyeliminować ręczną pracę menedżera.

9. Masowa wysyłka powiadomień do użytkowników (trigger akcji, przypomnienia)

Powiadomienia o wyprzedażach, zwrotach, zmianach statusów lub akcjach marketingowych powinny być wysyłane masowo, z uwzględnieniem warunków (aktywni użytkownicy, długo nie kupowali, porzucili koszyk itd.). Procedura pozwala zainicjować wysyłkę powiadomień push/email do wybranego segmentu.

10. Archiwizacja przestarzałych danych (np. zakończonych zamówień lub nieaktywnych produktów)

Aby utrzymać wydajność bazy danych i zmniejszyć rozmiar “gorących” tabel, przestarzałe rekordy (stare zamówienia, archiwalne produkty, stare tickety wsparcia) powinny być okresowo przenoszone lub oznaczane jako “archiwum”. Procedura ułatwia operacje usuwania lub przenoszenia danych i minimalizuje ręczną pracę administratorów.

Tworzenie triggerów

1. Logowanie zmiany statusu zamówienia

Prowadzenie pełnej historii zmian statusów zamówień jest kluczowe dla audytu, wsparcia, analityki i automatycznej wysyłki powiadomień do użytkowników o postępie realizacji zamówień. Trigger automatycznie tworzy wpis w "order".order_status_log przy każdej zmianie statusu zamówienia, zdejmując z deweloperów konieczność ręcznego utrzymywania historii zmian na poziomie aplikacji.

2. Automatyczne zapisywanie historii zmian ceny wariantu produktu

Historia zmian cen SKU jest potrzebna do analityki, wyświetlania "starej ceny", śledzenia akcji i automatycznych powiadomień o zniżkach. Trigger zapisuje każdą zmianę pola price w tabeli product.variant do historii product.price_history. Dzięki temu masz pełną dynamikę cen bez błędów i pominięć.

3. Synchronizacja stanu magazynowego przy zmianie produktów w magazynie

Każda zmiana zapasów w magazynie (np. przeliczenie, przyjęcie, wydanie) powinna automatycznie aktualizować pole last_updated dla poprawnej analityki i kontroli aktualności danych. Taki trigger może też uruchamiać automatyczną kontrolę progu minimalnego i inicjować autozamówienie.

4. Automatyczna dezaktywacja wariantów produktu z zerowym stanem magazynowym

Aby uniknąć sytuacji, gdy klient kupuje niedostępny produkt, przy osiągnięciu zerowego stanu magazynowego na wszystkich magazynach dla wariantu produktu automatycznie ustawiane jest pole is_active na FALSE. To zmniejsza liczbę negatywnych opinii i anulowanych zamówień.

5. Logowanie prób logowania administratora (bezpieczeństwo)

Kontrola logowań administratorów to klucz do bezpieczeństwa informacji. Wszystkie próby logowania (udane i nieudane) są automatycznie zapisywane w admin.login_attempt przez trigger BEFORE INSERT. Pozwala to szybko wykrywać ataki, włamania lub podejrzaną aktywność.

6. Logowanie kluczowych zmian w produkcie i automatyczne zapisywanie historii

Wszystkie ważne zmiany produktu (zmiana statusu, opisu, nazwy) powinny być rejestrowane do audytu działań pracowników, przywracania błędów i kontroli nadużyć. Trigger tworzy wpis w product.status_history przy zmianie statusu i może być rozszerzony na inne kluczowe pola.

7. Automatyczna aktualizacja licznika użyć promokodu

Poprawne liczenie liczby użyć promokodu jest ważne dla ograniczenia akcji i zapobiegania nadużyciom. Trigger przy każdym INSERT do marketing.promo_usage zwiększa licznik used_count w tabeli marketing.promo_code, eliminując niespójność danych.

8. Aktualizacja salda portfela użytkownika przy transakcjach

Dla poprawnego wyświetlania salda bonusowego/cashbackowego portfela użytkownika ważne jest, aby każda transakcja automatycznie aktualizowała końcowe saldo w tabeli payment.wallet. Trigger na INSERT nowej transakcji zmniejsza ryzyko utraty lub zniekształcenia danych przy błędach aplikacji.

9. Automatyczne ustawianie "głównego" adresu, emaila lub telefonu

Aby zapobiec sytuacji, gdy użytkownik nie ma głównego emaila/telefonu/adresu (a to kluczowe dla odzyskiwania dostępu i komunikacji), trigger automatycznie ustawia flagę is_primary=TRUE dla pierwszego wpisu, jeśli nie ma takiego, i gwarantuje unikalność wśród wpisów jednego użytkownika.

10. Liczenie średniej oceny produktu przy dodaniu opinii

Dla szybkiego wyświetlania "średniej oceny" na karcie produktu i w wyszukiwarce, aktualizowanie tej wartości przy każdym dodaniu nowej opinii jest wydajniejsze niż ciągłe przeliczanie agregatów zapytaniami. Trigger utrzymuje cache pola avg_rating i/lub review_count w tabeli product.product.

11. Automatyczne ustawianie daty publikacji treści

Dla artykułów, stron lub innych publikacji przy zmianie statusu na "published" ważne jest poprawne wypełnienie pola published_at. To zapewnia spójność CMS: użytkownicy i administratorzy widzą dokładną datę publikacji, a frontend nie wymaga dodatkowych ręcznych aktualizacji.

12. Logowanie wszystkich zdarzeń wsparcia (zmiany statusu ticketa)

Pełna historia zgłoszeń do wsparcia i zmian ich statusów pozwala oceniać pracę supportu, prowadzić analitykę i zapewniać przejrzystość dla użytkowników. Trigger automatycznie zapisuje wpis w support.ticket_status_log przy zmianie statusu ticketa.

Uwaga

Dodanie tych triggerów znacznie zwiększy niezawodność, przejrzystość i automatyzację kluczowych procesów biznesowych marketplace'u, zdejmie obciążenie z kodu aplikacji i zapewni spójność danych na poziomie samej bazy. Odzwierciedlają one najlepsze praktyki projektowania relacyjnych systemów dla dużego e-commerce.

Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION