Sto lavorando a un progetto web che coinvolge contenuti modificabili dall'utente e mi piacerebbe essere in grado di eseguire il monitoraggio della versione del contenuto reale, che vive in un database. Fondamentalmente, voglio implementare le cronologie dei cambiamenti in stile wiki.
Facendo qualche ricerca di base, vedo molta documentazione su come eseguire la versione del tuo schema del database (il mio è in realtà già controllato), ma qualsiasi strategia esistente su come tracciare il tuo contenuto del database le modifiche sono perse nella valanga di elementi di versioning dello schema, almeno nelle mie ricerche.
Posso pensare ad alcuni modi per implementare il mio monitoraggio delle modifiche, ma sembrano tutti piuttosto grezzi:
- Salva l'intera riga su ogni modifica, collega la riga all'ID sorgente con una chiave primaria (quello a cui mi propongo attualmente è la più semplice). Tuttavia, molte piccole modifiche potrebbero produrre un notevole aumento di volume.
- salva prima / dopo / utente / data / ora per ogni modifica, con un nome di colonna per correlare la modifica alla colonna pertinente.
- salva prima / dopo / utente / data / ora con una tabella per ogni colonna (risulterebbe in troppe tabelle).
- salva diffs / user / timestamp per ogni modifica con una colonna (questo significherebbe che dovresti percorrere l'intera cronologia delle modifiche intervenute per tornare ad una certa data).
Qual è l'approccio migliore qui? Rolling my own sembra che io stia probabilmente reinventando il codebase (migliore) di qualcun altro.
Punti bonus per PostgreSQL.