Domanda

Puoi condividere i tuoi pensieri come si dovrebbe implementare i dati di versioning in PostgreSQL. (Ho chiesto domanda simile per quanto riguarda Cassandra e MongoDB . Se avete pensieri che dB è migliore di quella condivisione per favore)

Supponiamo che ho bisogno di record di versione in una semplice rubrica. record della rubrica vengono memorizzati in una tabella senza relazioni per semplicità. Mi aspetto che la storia:

  • sarà usata raramente
  • sarà utilizzato in una sola volta per presentare in maniera "macchina del tempo"
  • non ci saranno più versioni di poche centinaia a un singolo record.
  • La storia non scadrà.

sto considerando i seguenti approcci:

  • Creare una nuova tabella oggetto alla storia vendite di dischi con una copia dello schema di tabella di rubrica e aggiungere timestamp e chiave esterna alla tabella di rubrica.

  • creare una sorta di schema di meno tabella per memorizzare le modifiche ai record della rubrica. Tale tabella consisterebbe: AddressBookId, TimeStamp, NomeCampo, Valore. In questo modo avrei memorizzare solo le modifiche ai record e non avrei dovuto tenere tavolo la storia e la tabella di rubrica in sincronia.

  • Crea una tabella per memorizzare seralized (JSON) record della rubrica o modifiche ai record della rubrica. Tale tabella sarebbe appare come segue: AddressBookId, TimeStamp, Object (varchar). Anche in questo caso è lo schema di meno in modo da non dover mantenere la tabella di storia con tavolo rubrica in sincronia. ( Questo è modellato semplice documento delle versioni con CouchDB )

È stato utile?

Soluzione

I fare qualcosa di simile il secondo approccio: avere il tavolo con il set effettivo di lavoro e una storia con i cambiamenti (timestamp, record_id, property_id, property_value). Ciò include la creazione di record. Una terza tabella descrive le proprietà (id, property_name, property_type), che aiuta nella conversione di dati più in alto nella domanda. Così si può anche monitorare facilmente i cambiamenti di singole proprietà.

Al posto di un timestamp Si potrebbe anche avere un int-like, Wich si incrementa per ogni cambio per record_id, in modo da avere un vero e proprio version .

Altri suggerimenti

Si potrebbe avere start_date e end_date.

Quando end_date è NULL, esso `s il record attuale.

Sto controllo delle versioni dei dati glossario, e il mio approccio è stato un buon successo per le mie esigenze. In sostanza, per i record avete bisogno di versioning, si divide il fieldset in campi persistenti e campi dipendenti dalla versione, creando così due tavoli. Alcuni del primo set dovrebbe essere anche la chiave univoca per la prima tabella.

Indirizzo
id [pk]
fullname [uk]
compleanno [uk]
Versione
id [pk]
address_id [uk]
timestamp [uk]
indirizzo

In questo modo, si ottiene un indirizzo soggetti determinati dalla FullName e il compleanno (non dovrebbe cambiare per il controllo delle versioni) e un record di versione contenente indirizzi. address_id dovrebbe essere correlato a Indirizzo: id tramite chiave esterna. Con ogni voce nella tabella di versione si otterrà nuova versione per soggetto. Indirizzo: id = address_id con una specifica data e ora, in che modo è possibile avere un riferimento storico

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