[Gfoss] esempio Trigger semplice

Massimiliano Moraca massimilianomoraca a gmail.com
Ven 15 Dic 2017 08:52:53 CET


Grazie per le indicazioni a tutti e due :)

Il giorno 15 dicembre 2017 08:02, Andrea Peri <aperi2007 a gmail.com> ha
scritto:

>
> Ad esempio un esempio di uso che ho tipico di un trigger e' impedire la
> modifica dei dati.
>
> Ricordo un vecchio nostro plugin che facemmo realizzare per qgis in cui la
> base dati era uno spatialite nelle cui tabelle erano stati inseriti dei
> triggers per impedire che l'utente potesse
> modificare i dati aprendo un qgis e mettendo lo spatialite in editing. Il
> plugin guidava l'utente a eseguire detemrinate modifiche in un certo modo e
> solo quelle.
> Volevamo garantirci che l'utente non potesse aprire lo spatialite in
> autonomia con qgis stesso o con altro software e intervenire sui dati
> alterandoli in maniera incontrollata.
> Per questo adottammo alcuni triggers che a certe condizioni impedivano la
> modifica dei dati.
>
> Altro esempio e' quello di usare un triger per fare la MakeValid della
> geometria e garantire quindi la sua correttezza.
>
> Tutto bello.
> Pero' attenzione ad aggiungere i triggers.
> Il maggior rischio e' pensare di usarli per fare cose troppo sofisticate.
>
> Con il rischio che poiche' non si a mai cosa in futuro ci si deve fare con
> tali dati, di ritrovarsi magari dopo qualche mese a vedere comportamenti
> anomali su un applicativo e dimenticarsi che dentro la BD vi' sono dei
> triggers che facevano certe operazioni e che guarda caso interfericono con
> altre operazioni all'epoca non preventivate.
>
> I triggers non sono facilmente rilevabili , e, specialmente su spatialite,
> non credo che si possano nemmeno rimuovere senza interferire con i dati
> stessi.
>
> Qui pero' forse lo sa' meglio Furieri.
> Forse mi sbaglio, ma temo che per rimuovere un trigger su una tabella
> spatialite sia necessario droppare la tabella con tutto il suo contenuto.
>
> Se cosi' fosse occorre stare parecchio attenti a usarli , perche' se per
> rimuovere un trigger che da noia si deve cancellare tutti i dati in tale
> tabella.
> Si fa' certamente, ma diventa macchinoso e complicato .
>
> Quindi attenzione, massima attenzione a usare i triggers.
>
>
> A.
>
>
> Il giorno 15 dicembre 2017 00:40, <a.furieri a lqt.it> ha scritto:
>
>> 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
>>
>>
>>
>> _______________________________________________
>> Gfoss a lists.gfoss.it
>> http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss
>> Questa e' una lista di discussione pubblica aperta a tutti.
>> I messaggi di questa lista non hanno relazione diretta con le posizioni
>> dell'Associazione GFOSS.it.
>> 801 iscritti al 19/07/2017
>>
>
>
>
> --
> -----------------
> Andrea Peri
> . . . . . . . . .
> qwerty àèìòù
> -----------------
>


Maggiori informazioni sulla lista Gfoss