Domanda

Ho una tabella con tre colonne:

varchar utente, stato varchar, rappresentante int

stato e rappresentante vengono aggiornati spesso e uno dei requisiti è:

Dato uno stato di visualizzazione dei valori datetime e valori rep, per ciascun utente, alla data specificata.

Posso aggiungere una colonna dataddatt_attualizzata alla tabella e inserire nuove righe con lo stesso utente invece di aggiornare quelle esistenti, ma la tabella diventa grande e devo unire i risultati della query a risultati simili da altre tabelle, quindi ho bisogno di una query veloce.

Qual è la soluzione con le migliori prestazioni a questo problema in SQL Server?

È stato utile?

Soluzione

A seconda di come utilizzerai esattamente le informazioni sui rapporti, potrebbe essere meglio creare una tabella Cronologia che prima di aggiornare la tabella principale, scrivi i valori correnti nella tabella Cronologia, aggiungendo il timestamp. p>

Sarebbe meglio se scegli davvero solo giorni / utenti / stati specifici dalla cronologia

Altri suggerimenti

Vorrei archiviare questa è una tabella correlata separata poiché presumo che la maggior parte delle volte interrogherai lo stato corrente solo quando ti iscrivi. Se eseguirai gran parte di questo tipo di query e aggiungerai questo tipo di dati a molte tabelle, non solo a questa, creerei un database OLAP separato per i rapporti.

Per inciso, fintanto che lo stai facendo, potresti considerare se vuoi registrare anche chi ha effettuato la modifica. Quindi hai praticamente creato una soluzione di auditing.

Un'opzione per questo sarebbe quella di usare due tabelle separate: a "valori correnti" tabella e una tabella cronologica. La tabella dei valori correnti conterrebbe gli unici valori più recenti per ciascun utente, che la manterrebbero piccola e facilmente collegabile. La tabella della cronologia conterrebbe le tre colonne che hai elencato, nonché la colonna del timestamp e tiene traccia delle modifiche ai valori nel tempo. Ogni volta che si desidera modificare un valore nella tabella dei valori correnti, è necessario aggiungere contemporaneamente una riga con i nuovi valori alla tabella della cronologia, utilizzando gettime () come data / ora.

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