Buongiorno a tutti
chiedo a voi la soluzione ottimale (per quanto sia possibile) di un problema.
Sto creando un applicazione gestionale collegata a un Db PostgreSql al cui interno c'è un'anagrafica clienti con i classici dati, cognome, nome, data e luogo nascita ecc.
Il mio problema è quello di dover tener traccia delle modifiche che avvengono sui dati anagrafici di una persona, e cercando una soluzione nella mia mente ma anche su google ho trovato alcune soluzioni ma non riesco a capire quale sia quella ottimale o se quella ottimale è un'altra rispetto a quelle che ho trovato.
Soluzione 1 (Trovata in giro per il web)
Gestione dei dati anagrafici con delle versioni come si fa con i software, assegnando alla persona 2 id, uno che la identifica e il secondo che identifica la versione dei sui dati.
es. Primo inserimento
id 1 id_versione 1 cognome Rossi nome Mario residenza Milano
quando avviene la modifica per es. della residenza si inserisce un nuovo record con un nuovo id_versione
id 1 id_versione 2 cognome Rossi nome Mario residenza Roma
Questo metodo è semplice ma ha l'inconveniente della ripetizione anche di tutti quei dati che non vengono cambiati e della mancanza dell'incremento automatico dell'id.
Soluzione 2 (pensata da me per limitare gli inconvenienti della soluzione 1)
Per diminuire la duplicazione dei dati con la soluzione 1 in caso di modifiche, si potrebbe dividere la tabella Persona in molte tabelle (es. una solo per il nome e cognome, una per data e luogo nascita, una solo per la residenza, una solo con i contatti) e usare sempre il sistema di versione della soluzione sopra.
In questo modo se viene modificata solo la residenza avrò un record in più solo nella tabella residenza e nelle altre non avrò inutile duplicazione dei dati.
Questa soluzione però complica abbastanza la gestione del db e mi costringe a controllare tramite codice la modifica di tutti i singoli dati di una persona per controllare quali sono stati cambiati e in quale tabella salvare i nuovi dati, oltretutto sempre con la mancanza dell'incremento automatico degli id.
Soluzione 3 (sempre pensata da me)
Per evitare la duplicazione dei dati e il complicarsi della struttura del Db, ho pensato di tenere la tabella persona unita e salvare solo i dati che vengono modificati, qundi sempre dovendo controllare per ogni singolo dato se è stato cambiato o no, piuttosto che nel Db su un file esterno(txt/csv/ecc.).
Questo sistema l'ho pensato ma preferirei evitarlo, preferirei tenere tutto nel Db, se c'è una buona soluzione.
Scusate per la pedanteria ma è una giornata che ci penso.
Grazie mille

Rispondi quotando
