[Gfoss] esempio Trigger semplice

a.furieri a lqt.it a.furieri a lqt.it
Ven 15 Dic 2017 00:40:13 CET


On Thu, 14 Dec 2017 22:19:25 +0100, Massimiliano Moraca wrote:
> Sti trigger mi stanno inTRIGGando :P
> Con un trigger è possibile anche tenere traccia dell'evoluzione
> temporale di un vettore? Ad esempio poligoni creati, modificati,
> cancellati..?
>

Massimiliano,

certo che puoi; i triggers sono un meccanismo universale,
ci puoi fare qualsiasi cosa che ti viene in mente
(o quasi ...)

l'unico limite e' la tua capacita' creativa di saperti
"inventare" un buon modello dati; naturalmente serve
anche una base molto solida di conoscenza teorica su
SQL con tutte le sue estensioni Spatial, cosi' come e'
indispensabile quella certa "praticaccia spicciola" che
si acquisisce solo a forza di lavorare sul campo imparando
piu' che altro dai propri errori.

giusto per analizzare per sommi capi il tuo esempio
relativo all'evoluzione storica dei dati, e' molto
piu' semplice di quanto tu possa credere:

1. ti crei una tavola di appoggio in cui andrai a
    registrare tutte le successive modifiche delle
    tue geometrie. una scelta saggia sarebbe quella
    di introdurre un opportuno vincolo FK che associ
    direttamente ciascuna "riga-versione" con la
    corrispondente riga della tavola-madre.
    cosi' come sarebbe opportuno inserire un timestamp
    che tenga traccia della data-ora in cui e' avvenuta
    la modifica; datti un'occhiata a DateTime('now')

2. a questo punto vai ad installare tre triggers
    sulla tavola-madre, uno per la Insert, uno per
    la Update ed uno per la Delete.
    ovviamente ciascuno di questi non fara' altro
    che prendere la geometria e salvarla permanentemente
    sulla tavola-versioni associandola al timestamp
    corrente.

basta; non serve altro. e' piu' facile da implementare
che da spiegare.


concetti da tenere bene a mente:
================================
un Trigger e' semplicemente un gestore di eventi.
una volta che il Trigger e' correttamente installato
scattera' automaticamente tutte le volte che si
verifica l'evento in oggetto.
l'azione specifica di ciascun Trigger e' determinata
da un "pezzo" di SQL che sta a te scrivere nel modo
che ritieni piu' opportuno; hai tutta la liberta'
che vuoi di fare qualsiasi cosa che ti passi per la
zucca, basta solo che tu trovi il modo di tradurla
in una appropriata sequenza di comandi SQL.
ovviamente liberta' e responsabilita' sono sempre
due facce della medesima medaglia; se non funziona
e' sicuramente colpa tua, e ti dovrai quindi armare
di santissima pazienza per fare tutto il debugging
del caso (che e' poi la vera essenza di qualsiasi
sviluppo sw; un bravo sviluppatore non e' uno bravo
a scrivere codice, e' soprattutto uno bravo a fare
debugging)


> Mi indicate una risorsa da cui studiare? Anche un libro se non c'è
> nulla online...
>

non credo proprio che esista nulla di specifico
relativo ai triggers, al massimo puoi trovare qualche
manuale generico su SQL che avra' un capitoletto
sui meccanismi generali dei triggers.
dovresti sicuramente trovare qualche manuale piu' o
meno ponderoso in qualsiasi libreria universitaria.

per tutto il resto serve tenere sempre sotto mano
la doc tecnica del tuo DBMS preferito [1], ma soprattutto
servono tempo, pazienza e perseveranza, uniti ad un
pizzico di intuizione e di fantasia creativa.

[1] https://www.sqlite.org/lang.html

ciao Sandro




Maggiori informazioni sulla lista Gfoss