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 effettivo, che vive in un database. Fondamentalmente, voglio implementare le storie di cambiamento in stile wiki.
Facendo alcune ricerche di base, vedo molta documentazione su come eseguire la versione dello schema del database (il mio è in realtà già controllato), ma qualsiasi strategia esistente su come tenere traccia delle modifiche al contenuto del database viene persa nella valanga di elementi di versioning dello schema, almeno nelle mie ricerche.
Posso pensare ad alcuni modi per implementare il mio rilevamento delle modifiche, ma sembrano tutti piuttosto rozzi:
- Salvare l'intera riga su ogni modifica, mettere in relazione la riga con l'id sorgente con una chiave primaria (ciò a cui mi sto appoggiando attualmente, è la più semplice). Molte piccole modifiche potrebbero produrre un sacco di gonfiore del tavolo, però.
- salva prima / dopo / utente / data / ora per ogni modifica, con un nome di colonna per mettere in relazione la modifica con la relativa colonna.
- salva prima / dopo / utente / timestamp con una tabella per ogni colonna (comporterebbe troppe tabelle).
- salva diffs / user / timestamp per ogni modifica con una colonna (ciò significherebbe che dovresti percorrere l'intera cronologia delle modifiche intervenienti per tornare a una certa data).
Qual è l'approccio migliore qui? A rotazione, sembra che stia probabilmente reinventando la base di codice (migliore) di qualcun altro.
Punti bonus per PostgreSQL.