2010-05-01 8 views
6

Sto provando a utilizzare un semplice database mysql ma lo aggiusto in modo che ogni campo venga eseguito il backup di un numero indefinito di versioni. Il modo migliore che posso illustrare è sostituire ogni campo di ogni tabella con una pila di tutti i valori che questo campo ha mai avuto (ognuno di questi valori dovrebbe essere timestamp). Immagino sia come avere un controllo di versione personalizzato per tutti i miei dati ..Come controllare i dati di controllo della versione memorizzati in mysql

Qualche idea su come fare questo?

+0

possibile duplicato di http://stackoverflow.com/questions/2724187/where-are-all-the-native-revisioned-databases –

risposta

7

Il metodo usuale per "tenere traccia di eventuali modifiche" su una tabella consiste nell'aggiungere procedure di trigger insert/update/delete sulla tabella e salvare tali record in una tabella della cronologia.

Ad esempio, se la tabella di dati principale è "ItemInfo", allora avresti anche una tabella ItemInfo_History che ha ottenuto una copia del nuovo record ogni volta che qualcosa è cambiato (tramite i trigger).

Ciò mantiene le prestazioni della tabella principale coerenti, ma consente di accedere alla cronologia di eventuali modifiche se necessario.

Ecco alcuni esempi, sono per SQL Server, ma dimostrano la logica:

mio Repository table mio Repository History table mio Repository Insert trigger procedure mio Repository Update trigger procedure

+0

Non ti seguo ancora esattamente, ma mi hai presentato i trigger e probabilmente sono ciò che userò. Grazie – Shawn

+0

Aggiunti collegamenti ad alcuni esempi che potrebbero (si spera) rendere più chiaro il processo. :-) –

1

Una soluzione semplice sarebbe aggiungere un campo versione/revisione alle tabelle e ogni volta che viene aggiornato un record anziché aggiornarlo, inserire una copia con le modifiche applicate e il numero di versione incrementato. Quindi, quando si seleziona, scegliere sempre il record con la versione più recente. Questo è approssimativamente il modo in cui la maggior parte di tali schemi sono implementati (ad esempio, Wikimedia lo fa praticamente in questo modo).

+0

Ho pensato a questo ma poi devo copiare ogni campo in quella riga anziché solo il campo che ha effettivamente cambiato i valori .. Sembra un po 'dispendioso, per quanto riguarda la memoria. – Shawn

3

Hmm, che cosa si sta parlando di suoni simili a Slowly Changing Dimension.

Si noti che il controllo della versione su strutture di database arbitrarie è ufficialmente un problema piuttosto difficile. :-)

+0

Sembra che cambiando lentamente dimensione richiede che io copi tutti i campi di una riga anche se solo uno dei campi è stato modificato .. Sembra un po 'dispendioso, memoria saggio – Shawn

+0

Beh, è ​​per questo che lo usi per * lentamente * cambiando dimensioni. – Ken

0

Forse uno strumento può aiutarti a farlo per te. Date un'occhiata a Nextep progettista:

http://www.nextep-softwares.com

Con questo IDE si sarà in grado di scattare istantanee della struttura del database e dei dati e metterla sotto il controllo di versione. Dopodiché puoi calcolare le differenze tra le 2 versioni e generare l'SQL appropriato che può inserire/aggiornare/cancellare i tuoi dati.

Forse questo è un modo alternativo per ottenere ciò che volevi.

Problemi correlati