2009-12-10 17 views
9

Attualmente sto scrivendo un sito Web di pubblicazione che deve avere un controllo di versione sui post. Semplicemente non so come dovrei implementarlo, in termini di database e tecnica, al fine di salvare e controllare il post.Esiste un modo migliore per implementare il controllo della versione per il contenuto del database?

C'è qualcuno che ha esperienza con questo che può aiutarmi?

Ho visto che Wordpress esegue il controllo della versione solo in 1 tabella, che è POST. Suggerisco anche di fare lo stesso poiché è un problema scrivere in 2 tabelle con la stessa quantità di dati e campi.

risposta

3

So che lo stackoverflow memorizza i delta tra le versioni. Quello che ho visto fare agli altri è impostare un altro tavolo come il primo ma con un autore e una versione o un timestamp. È possibile trasferire i record sull'altra tabella utilizzando un trigger di database in modo da non doversi preoccupare troppo di apportare le modifiche a livello di applicazione.

Se si desidera utilizzare solo una tabella, suggerirei di aggiungere autore, timestamp e una bandiera di corrente. Il flag non è davvero necessario in quanto è possibile selezionare il numero di versione massimo, ma renderà le vostre domande molto più semplici. Imposta il flag solo quando la riga è il numero di versione più alto. È comunque possibile utilizzare un trigger per popolare le righe ma attenzione o si potrebbe finire in un ciclo di trigger di aggiornamento.

+0

puoi leggere di nuovo il mio post. Ho aggiunto ulteriori dettagli ...Grazie – DucDigital

3

Vorrei creare due tabelle, una è la tabella "versione live" e l'altra è una tabella "archivio". Quando viene creata una nuova versione, sposta la versione live esistente nella tabella archivio (con timestamp e note dell'autore appropriate) e aggiungi la nuova versione live alla tabella live.

La tabella di archivio avrebbe lo stesso schema della tabella live, tranne per il fatto che avrebbe anche colonne aggiuntive contenenti i metadati relativi al controllo delle versioni supportato (numero di versione, note, data e ora, ecc.).

+0

puoi leggere di nuovo il mio post, ho aggiunto ulteriori dettagli, c'è comunque da usare solo un tavolo? – DucDigital

2

Prendi questo con un granello di sale, ma, potresti avere un id genitore che è unito alla chiave primaria sulla stessa tabella insieme a un bool che indica se è la versione corrente. È il metodo che ho usato per un sistema CMS qualche tempo fa ... Potresti volere un ID comune per una cronologia delle revisioni (in modo che ottenere tutte le voci storiche per un elemento non sia ricorsivo). Puoi farlo includendo l'id della prima versione con tutte le versioni successive in modo da poter ottenere tutto facilmente.

mio .02

+0

Questo è un approccio comune e valido. Suggerisco che se si stanno anticipando molti dati con qualcos'altro, comunque. Ho trovato che SQL Server può incontrare problemi di prestazioni con questo modello. Questo potrebbe essere diverso con gli indici filtrati in SQL Server 2008, anche se ... –

+0

Vero, ma un po 'di cache potrebbe fare molto. – ccook

2

Sembra che si desidera semplicemente un numero di versione di registrazione sulla riga. È un numero che identifica l'ultima versione. Ogni volta che aggiorni i dati, inserisci effettivamente una nuova riga ed esegui il bump del numero di versione del record. Quando si esegue una query per ottenere i dati, basta interrogare per ottenere la riga con il numero massimo di versione del record. I trigger possono essere utilizzati per generare il numero di versione del record in modo da non doversi preoccupare di generare il numero durante l'inserimento.

Se si desidera eseguire il controllo di versione completo, è necessario un qualche tipo di campo di stato sulla riga che indica se questa versione è stata ripristinata/eliminata/approvata o meno. Quando si ottiene l'ultimo, si seleziona la riga con il numero massimo di controllo di revisione che ha lo stato appropriato.

Se si desidera solo salvare la cronologia dei post e non avere effettivamente il controllo di revisione, è sufficiente utilizzare la tecnica del numero di versione del record.

Problemi correlati