CodeGym /Corsi /SQL SELF /Creazione di trigger e procedure

Creazione di trigger e procedure

SQL SELF
Livello 61 , Lezione 3
Disponibile

Hai risolto facilmente gli esercizi precedenti? Ok, allora lascia che ti dia qualcosa di più tosto. Passiamo a consolidare le tue conoscenze su PL-SQL e a scrivere procedure e trigger. Prontə?

Creazione di procedure

Qui sotto trovi alcune procedure che ti consiglio di aggiungere al database del tuo marketplace. Ogni procedura è accompagnata da una spiegazione su quali task e processi di business risolve e perché vale la pena implementarla. Queste procedure coprono l'automazione delle operazioni chiave, migliorano l'esperienza utente, ottimizzano il lavoro della vetrina, della logistica, del supporto, del marketing e dell'analisi.

1. Gestione ordine con riserva automatica dei prodotti

Gestire un ordine è un'operazione chiave per qualsiasi marketplace. La procedura non deve solo creare la riga dell'ordine e le sue posizioni, ma anche riservare il prodotto in magazzino, scalare la quantità, fissare lo status, avviare il pagamento e lanciare i processi successivi (notifiche, logistica). Automatizzare questo scenario riduce il rischio di errori manuali, aiuta a evitare l'over-selling e garantisce la coerenza delle scorte in tempo reale.

2. Automazione del rifornimento delle scorte

Per evitare out-of-stock e perdita di vendite è importante rifornire i magazzini in tempo quando il livello delle scorte scende sotto la soglia. Questa procedura controlla le scorte di tutti i prodotti, le confronta con il livello minimo e genera automaticamente richieste di acquisto o resupply interno. L'automazione riduce i tempi di reazione e il carico manuale sul reparto operativo.

3. Aggiornamento di massa degli status degli ordini e notifica ai clienti

Nel catalogo spesso serve cambiare in massa lo status degli ordini (tipo “paid” → “shipped” o “shipped” → “completed”) a seconda della fase di lavorazione. La procedura aggiorna lo status di tutti gli ordini idonei, scrive la storia delle modifiche (per audit) e può avviare l'invio di notifiche ai clienti. Automatizza il lavoro del back-office e minimizza gli errori manuali.

4. Applicazione di massa di sconti/codici promo ai prodotti

Promuovere prodotti o fare campagne spesso richiede di applicare in massa codici promo e sconti a una categoria, brand o selezione di prodotti. La procedura applica automaticamente gli sconti, controlla i limiti (data, limiti di uso), aggiorna i contatori di utilizzo e previene i duplicati.

5. Rimborso automatico all'utente

Gestire i resi e i rimborsi è fondamentale per la fiducia dei clienti. La procedura deve controllare lo status dell'ordine, la validità del reso, avviare il rimborso del pagamento, aggiornare gli status, loggare le transazioni e notificare l'utente. Gestire tutto in una transazione riduce il rischio di errori e abusi.

6. Ricalcolo del rating medio di prodotto / venditore

Ad ogni nuova recensione, modifica o cancellazione, il rating medio di un prodotto o utente deve essere aggiornato. La procedura ricalcola e aggiorna velocemente il campo “avg_rating”/“review_count” per velocizzare le query del frontend e garantire la coerenza dell'analisi.

7. Disattivazione automatica dei prodotti con scorte a zero

Per far funzionare bene la vetrina del marketplace ed evitare esperienze negative agli utenti, i prodotti con scorte a zero devono essere automaticamente nascosti (disattivati). La procedura controlla regolarmente i magazzini e lo status dei prodotti, cambia lo status in “inactive”, logga la modifica e aiuta a mantenere il catalogo aggiornato senza controlli manuali.

8. Assegnazione automatica dell'ordine al corriere e aggiornamento dello status di consegna

Nella logistica è importante assegnare velocemente e in modo trasparente il corriere all'ordine, cambiare lo status di consegna, registrare tutte le azioni per il tracking. La procedura automatizza questi passaggi ed elimina il lavoro manuale del manager.

9. Invio di massa di notifiche agli utenti (trigger promozioni, reminder)

Le notifiche su saldi, resi, cambi di status o attività di marketing devono essere inviate in massa, considerando le condizioni (utenti attivi, inattivi da tempo, carrello abbandonato ecc). La procedura permette di avviare l'invio di notifiche push/email a un segmento selezionato.

10. Archiviazione dei dati obsoleti (tipo ordini completati o prodotti inattivi)

Per mantenere le performance del database e ridurre il volume delle tabelle “calde”, i record vecchi (ordini vecchi, prodotti archiviati, ticket di supporto obsoleti) devono essere periodicamente spostati o marcati come “archivio”. La procedura facilita le operazioni di cancellazione o spostamento dati e minimizza il lavoro manuale degli admin.

Creazione di trigger

1. Logging delle modifiche di status degli ordini

Tenere traccia di tutta la storia dei cambi di status degli ordini è fondamentale per audit, supporto, analisi e invio automatico di notifiche agli utenti sullo stato dei loro ordini. Il trigger crea automaticamente una riga in "order".order_status_log ad ogni cambio di status, così gli sviluppatori non devono gestire la storia manualmente a livello di applicazione.

2. Registrazione automatica della storia dei prezzi delle varianti prodotto

La storia dei prezzi degli SKU è necessaria per l'analisi, mostrare il "vecchio prezzo", tracciare le promo e inviare notifiche automatiche sugli sconti. Il trigger registra ogni modifica del campo price nella tabella product.variant nella storia product.price_history. Così hai tutta la dinamica dei prezzi senza errori o buchi.

3. Sincronizzazione delle scorte di magazzino quando cambiano i prodotti in magazzino

Ogni modifica delle scorte (tipo inventario, arrivo, scarico) deve aggiornare automaticamente il campo last_updated per analisi corrette e controllo dell'attualità dei dati. Inoltre, questo trigger può avviare il controllo del raggiungimento della soglia minima e lanciare l'autoricommissione.

4. Disattivazione automatica delle varianti prodotto con scorte a zero

Per evitare che un cliente acquisti un prodotto non disponibile, quando le scorte arrivano a zero su tutti i magazzini per una variante, il campo is_active viene automaticamente impostato a FALSE. Così riduci recensioni negative e cancellazioni di ordini.

5. Logging dei tentativi di login admin (sicurezza)

Controllare i login degli admin è la chiave della sicurezza informatica. Tutti i tentativi di login (riusciti e falliti) vengono automaticamente registrati in admin.login_attempt tramite un trigger BEFORE INSERT. Così puoi individuare subito attacchi, intrusioni o attività sospette.

6. Logging delle modifiche chiave ai prodotti e registrazione automatica della storia

Tutte le modifiche importanti ai prodotti (status, descrizione, nome) devono essere registrate per audit delle azioni degli operatori, recupero errori e controllo degli abusi. Il trigger crea una riga in product.status_history quando cambia lo status e può essere esteso ad altri campi chiave.

7. Aggiornamento automatico del contatore di utilizzo dei codici promo

Contare correttamente quante volte è stato usato un codice promo è importante per limitare le promo e prevenire abusi. Il trigger, ad ogni insert in marketing.promo_usage, incrementa il campo used_count nella tabella marketing.promo_code, evitando inconsistenze nei dati.

8. Aggiornamento del saldo wallet utente durante le transazioni

Per mostrare correttamente il saldo del wallet bonus/cashback dell'utente, ogni transazione deve aggiornare automaticamente il saldo finale nella tabella payment.wallet. Il trigger su insert di una nuova transazione riduce il rischio di perdita o corruzione dati per errori dell'applicazione.

9. Impostazione automatica di "principale" per indirizzo, email o telefono

Per evitare che un utente non abbia un'email/telefono/indirizzo principale (fondamentale per recupero accesso e comunicazioni), il trigger imposta automaticamente il flag is_primary=TRUE per la prima riga se non ce ne sono, e garantisce l'unicità tra i record dello stesso utente.

10. Calcolo del rating medio prodotto all'aggiunta di una recensione

Per mostrare velocemente il "rating medio" sulla scheda prodotto e nei risultati di ricerca, aggiornare questo valore ad ogni nuova recensione è più efficiente che ricalcolare sempre con query aggregate. Il trigger mantiene il cache del campo avg_rating e/o review_count nella tabella product.product.

11. Impostazione automatica della data di pubblicazione dei contenuti

Per articoli, pagine o altre pubblicazioni, quando lo status diventa "published" è importante valorizzare correttamente il campo published_at. Così la CMS resta coerente: utenti e admin vedono la data esatta di pubblicazione e il frontend non richiede aggiornamenti manuali extra.

12. Logging di tutti gli eventi di supporto (cambi di status dei ticket)

La storia completa delle richieste di supporto e dei cambi di status permette di valutare il lavoro del supporto, fare analisi e garantire trasparenza agli utenti. Il trigger scrive automaticamente una riga in support.ticket_status_log quando cambia lo status del ticket.

Nota

Aggiungere questi trigger aumenta di molto l'affidabilità, la trasparenza e l'automazione dei processi chiave del marketplace, alleggerisce il codice applicativo e garantisce l'integrità dei dati direttamente a livello di database. Sono best practice per progettare sistemi relazionali per grandi e-commerce.

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