Attualmente ho un DB MySQL non temporale e ho bisogno di cambiarlo in un DB MySQL temporale. In altre parole, devo essere in grado di conservare una cronologia delle modifiche apportate a un record nel tempo a fini di reporting.Come implementare i dati temporali in MySQL
Il mio primo pensiero per l'implementazione di questo è stato semplicemente inserire gli inserti nelle tabelle anziché gli aggiornamenti e quando ho bisogno di selezionare i dati, semplicemente facendo un GROUP BY
su alcune colonne e ordinando il timestamp DESC
.
Tuttavia, dopo aver riflettuto un po 'su le cose, ho capito che sarebbe davvero un guaio perché la chiave primaria per ogni inserto (che in realtà si limiterebbe a simulare un numero di aggiornamenti su un singolo record) sarà diversa e quindi rovinare qualsiasi collegamento che utilizza la chiave primaria per collegarsi ad altri record nel DB.
Come tale, il mio prossimo pensiero è stato quello di continuare ad aggiornare le tabelle principali nel DB, ma anche di creare un nuovo inserto in una "tabella di controllo" che è semplicemente una copia del record completo dopo l'aggiornamento, e quindi quando I necessario per riferire sui dati temporali, potrei usare la tabella di controllo per scopi di interrogazione.
Qualcuno può darmi qualche consiglio o link su come farlo correttamente?
Grazie.
Una soluzione tipica è creare una nuova tabella di controllo e scriverla automaticamente utilizzando un trigger. I metodi includono la duplicazione dello stato completo della riga o semplicemente [il rilevamento di quale campo è stato modificato] (http://stackoverflow.com/questions/779230/using-mysql-triggers-to-log-all-table-changes-to-a- secondaria tabella). – AndySavage
Dr. Richard Snodgrass ha un libro fantastico su questo argomento, disponibile qui. http://www.cs.arizona.edu/~rts/publications.html Forse più informazioni di quante speravate, ma ancora materiale di A-list. –
Grazie ad entrambi. Questo è quello che stavo cercando. Inoltre, Ollie, nella pagina che hai collegato, ci sono diversi libri elencati. Sai quale in particolare dovrei guardare? Grazie. – HartleySan