Domanda

Tutto ciò di cui sto parlando relaziono database relazionale, MySQL specifico.

Ho un certo numero di tabelle di un database e per un numero limitato di loro, ho intenzione di voler memorizzare una storia dei valori record quando cambia. Ho visto questo fatto in un paio di modi diversi:

  1. Una tabella / Un Campo - In sostanza v'è una tabella che vendite la storia di tutta la tabella che di stoccaggio storia necessità. Tutti i cambiamenti sono registrati in un campo come tipo di dati di testo.
  2. Tabella A Tabella / Un Campo -. Idem come sopra, tranne il ogni tavolo ha la propria tabella di storia (. Es Progetti / ProjectsHistory, Questioni / IssuesHistory, ecc ...)
  3. Tabella A Tabella / campo per campo - Questo è come il sopra nella ogni tavolo ha un proprio tavolo histroy ma anche la tabella la storia ha più o meno la stessa definizione della tabella normale con un ulteriore di ulteriori campi di storia legati (updateDatetime , updateUserId, ecc ...).

Quali sono alcuni dei vantaggi e degli svantaggi di questi diversi metodi di memorizzazione registrare la storia? Ci sono altri metodi che non ho pensato?

È stato utile?

Soluzione

Dal momento che hai molte tabelle con i numeri di colonne variabile, # 1 sarebbe fuori dal momento che ci si dispone di una tabella di massa con l'aggregato di tutte le colonne, e un sacco di valori null.

Tra il 2 # e # 3 penso che si deve prendere una decisione per quanto riguarda la complessità di progettazione che si desidera gestire. La mia opinione è che sarebbe più facile da mantenere una replica esatta archivio per una determinata tabella, e memorizzare l'intero RowState (con il tempo modificato). Pensate a un caso in cui si aggiorna più di una colonna di una riga. In tal caso # 2 sarebbe Registra una voce per il cambiamento delle colonne separatamente, anche se era la stessa transazione. Mi piacerebbe andare w 3 # per ridurre la complessità, e il punto di catturare in stato di fila tempo.

Altri suggerimenti

Si vuole veramente leggere prima:

http://www.cs.arizona.edu/~rts/tdbbook. pdf

Se si desidera mantenere la vostra storia in una tabella separata (e probabilmente lo fate), probabilmente si vuole opzione # 3; tende ad essere il più facile da implementare e più conveniente, # 1 sono 2 # sono abbastanza brutto e "non-relazionale".

In una certa misura dipende da come si intende utilizzare tali dati. Se questa è una tabella di controllo utilizzato strettamente per essere in grado di ricerca di tanto in tanto che ha cambiato cosa e quando e, occasionalmente, il ripristino cattive modifiche, quindi l'opzione 2 va bene. Se avete intenzione di storia all'utente display per l'applicazione o tramite segnalazione, uso l'opzione 3. posso pensare a nessun circostanza in cui vorrei usare l'opzione uno come beciomes a luoghi in cui il blocco accade.

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