Questo problema è noto nella "teoria" dei db... che dbms usi? MySQL?

Cmq le soluzioni per te potrebbero essere:
- backup dei record (prima di ogni aggiornamento memorizzi i dati vecchi): questo lo puoi fare creando un campo aggiuntivo "revisione" per ogni recordo da "backuppare" e quando recuperi i dati sai che quello "effettivo" ha il numero di revisione più alto, p.es. - se hai una sola tabella da gestire è molto semplice. Alternativamente puoi fare una tabella separata tipo "backup" con campi "tabella, campo, valore, revisione" in cui memorizzi le revisioni "passate" riportando il nome della tabella, del campo, il valore precedente e un numero di revisione (questa è più flessibile come soluzione)
- storico delle azioni: puoi registrare non i dati ma le azioni di aggiornamento... in pratica memorizzi le query di UPDATE: memorizzando proprio la stringa SQL o - meglio - le sue info, magari in una tabella a parte che può contenere o la stinga SQL direttamente oppure campi come "tabella, elencocampi, elencovalori" o simile...