Domanda

Ho la sfida di progettare un nuovo database utilizzando un RDBMS, Oracle, per essere precisi.In questo database ci sarà un record / documento specifico che può coprire più tabelle.

Con la minima duplicazione possibile, voglio tenere traccia delle modifiche apportate a questo record e offrire un modo semplice per creare copie modificate di quel record.

Non voglio una tabella storia che riassumerà le modifiche del testo, perché voglio essere in grado di recuperare document x esattamente nel modo in cui guardava time t.Ma non voglio nemmeno una copia completa per ogni voce della storia.

Ci sono Best practice o modelli Come raggiungere questo?

Potrei avere un'idea come risolvere questo utilizzo di una strategia che imitava git, ma volevo prima alcune opinioni prima di andare quella strada.

È stato utile?

Soluzione

In Oracle 12C In particolare c'è una nuova funzionalità chiamata "query flashback temporali" che serve esattamente a questo scopo.(Funzioni simili sono disponibili in altri database: DB2, SQL Server, Vertica per citarne alcuni.)

Per abilitare le query temporali:

    .
  1. Assicurarsi che ciascuna delle tabelle che rappresenta il documento abbia una coppia di date che indicano la data di avvio e fine (tempo) quando un particolare record era valido (attivo) e
  2. Tenere i record storici non aggiornandoli in posizione, ma piuttosto inserendo nuove versioni dei record, aggiornando solo le date di fine dei record storici.
  3. Sarai quindi in grado di emettere query contro le tabelle che sembrano molto simili a SELECT whatever FROM mytable AS OF some_date, che restituirebbero i record attivi alla data specificata.

    È possibile leggere Descrizione dettagliata qui .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top