BLOG

09 luglio 2018 - Web

Storico dati: fascicolare i dati inseriti dagli utenti

versioning-data.jpg

Quando si sviluppa una applicazione web i cui contenuti vengono direttamente prodotti e inseriti dagli utenti iscritti e laddove la tipologia di applicazione o la tematica trattata richiedano una mole significativa di informazioni da verificare e gestire costantemente, la creazione e l'implementazione di uno storico dati al cui interno depositare le versioni riviste di una stessa informazione è una tecnica molto utile per il gestore perché ne consente la fascicolazione, creando un archivio dati sempre reperibile e consultabile, annullando il rischio di dispersione e rimozione degli stessi.

Un archivio dati può contenere qualsiasi tipo di informazione, inserita, modificata, eliminata e poi re-inserita, come avviene in un e-commerce se si modifica la descrizione di un articolo o la quantità disponibile in magazzino. O contenere un semplice storico i cui dati non hanno rapporti di interdipendenza, come uno storico ordini che contiene gli ordini effettuati dagli utenti X e Y. In altri casi, invece, un archivio dati viene costruito in modo più articolato e complesso affinché tutte le revisioni di una informazione inserita da un utente vengano archiviate e fascicolate per un confronto o per evidenziarne le differenze.

Si ipotizzi ad esempio di dover gestire un quotidiano online e di dover leggere tutte le versioni di un articolo proposte dai collaboratori e approvare la più indicata. Se ogni nuova versione proposta eliminasse quella precedente, il gestore non potrebbe verificare espunzioni, correzioni o aggiunzioni né potrebbe appurare quale versione fino a quel momento registrata sia la più idonea alla pubblicazione. Se, invece, ogni nuova versione venisse aggiunta alle precedenti, il gestore potrebbe in qualsiasi momento reperirle, consultarle, verificarle e approvare la più appropriata o, nella peggiore delle ipotesi, contrassegnarne una in particolare, senza rimuoverla, chiedendo all'autore delle specifiche correzioni prima di salvarla e andare online.

È innegabilmente una gestione molto complessa da sviluppare tecnicamente e richiede anche decisamente più tempo rispetto alla gestione di una unica proposta di un articolo; ma lo strumento consegnato al gestore è di indubbia utilità e garantisce una UX senza eguali.

La fascicolazione delle proposte o di qualsiasi altro versioning può avvenire tramite un ID univoco che si auto incrementa (AUTO_INCREMENT) o tramite la data di inserimento (DATE o DATETIME), collegata al record principale tramite chiave ID esterna.

Esemplificando, la tabella primaria degli articoli può essere strutturata così:

ID ID_UTENTE
1 1
2 2
3 3

Quella delle versioni degli articoli, ad essa collegata, così:

ID ID_ARTICOLO DATA TITOLO TESTO
1 1 2018-07-01 Rinvenuti nuovi reperti archeologici Sono stati rinvenuti nuovi reperti archeologici
2 1 2018-07-02 Rinvenuti nuovi reperti archeologici a Roma Sono stati rinvenuti nuovi reperti archeologici a Roma ancora da esaminare
3 1 2018-07-03 Rinvenuti nuovi reperti archeologici a Roma in una zona non molto distante dal Colosseo Sono stati rinvenuti nuovi reperti archeologici a Roma, già affidati agli esperti che eseguiranno le dovute analisi per accertarne l'epoca di appartenenza.

Per ottenere le versioni degli articoli è sufficiente interrogare la tabella delle versioni, richiedendo le proposte con ID_ARTICOLO uguale (mi riferisco all'operatore '=') all'articolo esaminato, ad esempio così:

SELECT data, titolo, testo FROM versioni_articoli WHERE id_articolo = id_articolo_esaminato ORDER BY data DESC

Se si vuol visualizzare la data nel formato italiano, la si può formattare sia da SQL, così:

SELECT date_format(data, '%d/%m/%Y') as data, titolo, testo FROM versioni_articoli WHERE id_articolo = id_articolo_esaminato ORDER BY data DESC

sia con PHP, utilizzando la classe DateTime, così:

$data = DateTime::createFromFormat('Y-m-d', data)->format('d-m-Y');

 

Tuttavia, i casi possibili sono innumerevoli e complessi e impossibili da riassumere in un articolo per la sua brevità. Ad esempio, mi sono occupato dello sviluppo di una applicazione web di preventivazione destinata ai rivenditori affiliati all'azienda che me l'ha commissionata. Ciascun operatore, attraverso l'applicazione, non solo può comporre e personalizzare un preventivo per una specifica auto selezionando fra le opzioni disponibili come assicurazione, finanziamento, garanzia e permuta; ma può sia decidere di creare tante versioni del preventivo diversificandole per opzioni scelte e parametri impostati, sia sovrascrivere una versione piuttosto che una altra. E, qualora il cliente chiedesse di riprendere e confermare uno specifico preventivo fra quelli creati, l'applicazione, all'apertura di questo, effettua delle verifiche e comunica all'operatore se sono stati variati dei parametri o gli importi delle opzioni selezionate, consentendogli sia la sovrascrittura sia il salvataggio di una nuova versione, aggiornata parametricamente ed economicamente.

Questa guida è soltanto un semplice esempio di una gestione che in casi simili è assolutamente irrinunciabile per la sua UX e per la sua potenza e flessibilità.

Fonte immagine: Google Immagini

CATEGORIE