Domanda

Sto creando controllo di revisione per i dati nel nostro database. Avrà la possibilità di memorizzare le revisioni, rollback, e rollback rollback. Le tabelle del database che sto usando che ha bisogno di essere revisionati è al di sotto:

oggetti
object_chunks
OBJECT_ATTRIBUTES

Objects è l'oggetto principale, pezzi vengono raggruppate le sezioni dell'oggetto e attributi sono attributi di dati all'interno di un pezzo. Attributi memorizza l'ID oggetto insieme all'ID pezzo in questo modo è facile per selezionare tutti gli attributi per un oggetto senza dover fare un altro JOIN al tavolo pezzi.

L'unica cosa che cambia è mai veramente gli attributi, ma quando un modifiche degli attributi, il pezzo colpita (s) saranno aggiornati, e ogni volta che un pezzo viene aggiornato, l'oggetto viene aggiornato anche. Ora ho pensato a due modi diversi di risolvere questo problema.

  1. Creare tre nuovi tavoli con un suffisso di _rev, queste tabelle sarebbe semplicemente archiviare le vecchie versioni degli oggetti. Gli oggetti reali sarebbe anche memorizzare un numero di giri. Allora supponiamo ho cambiato tre differenti attributi, questi attributi attraversato in tre pezzi, per cui tre nuove righe in blocchi, tre in attributi, e uno in oggetto per le revisioni. Dal momento che questo è il primo cambiamento, l'ID rev sarebbe 1, nelle tabelle reali, la loro rev sarebbe 2.
  2. Mi piacerebbe semplicemente fare quanto sopra, ma invece di avere una tabella separata, avrei semplicemente memorizzarlo nella stessa tabella.

Una cosa da notare, ci saranno sempre le revisioni, la quantità di pezzi può variare da 1 a 100 +. Anche se la media è di circa 1-15. Gli attributi possono variare da 0 a 100 +. La media è probabilmente intorno al 30. OGNI attributo cambierà. Questi oggetti vengono sottoposti a una “fase” in cui tutti gli attributi devono essere compilati dagli utenti. Una volta che sono pieni, l'oggetto viene archiviata e mai modificata di nuovo. Tutti gli oggetti hanno un file corrispondente. Così oggetto memorizza l'hash corrente (sha256) del file anche. Questo hash viene utilizzato per scopi di deduplicazione.

È stato utile?

Soluzione

L'aggiunta di un identificatore di revisione alla chiave primaria della tabella oggetti è sicuramente la strada da percorrere. È possibile avere più versioni attive e non devono spostare i dati tra le tabelle. Andando con più tabelle, si avrà difficoltà a scrivere algoritmi di rollback lo spostamento di dati in tutto mantenendo i vincoli di integrità -. Particolarmente difficile se il sistema è in fase di sviluppo attivo

Se le revisioni sono creati nel tempo umano, un semplice timbro di tempo può funzionare come un identificatore di revisione. In caso contrario, basta usare un intero come il numero di revisione - ho implementato numeri di revisione tratteggiate stile CVS e voluto non avevo. È possibile tenere traccia la storia di derivazione in una tabella separata, se la gente chiede per la funzione successiva.

Altri suggerimenti

Come su

objects object_chunks revision object_attributes

Quando dalla revisione è un numero sempre maggiore, si può semplicemente selezionare gli oggetti con max (revisione) raggruppamento per oggetto, object_chunks in futuro.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top