Ho letto alcune domande su SO (ad esempio this one) in merito al controllo delle versioni dei dati in un database.Database - Versioning dati
Mi sono piaciuti alcuni dei suggerimenti menzionati. Ho avuto il tempo più lungo desiderato (necessario) per revisionare molti dei miei tavoli, ma non ci sono mai riuscito. Essendo un programmatore con solo un semplice database lavoro sotto la cintura mi chiedevo come si sarebbe effettivamente andare a fare questo.
Non sto chiedendo la soluzione reale nella sintassi SQL. Finalmente posso capirlo da solo (o postare SO quando arriverà il momento). Sto solo chiedendo alla gente di commentare come farebbero per farlo e qualsiasi potenziale problema di prestazioni ci potrebbe essere se dovessi "revisionare" centinaia di milioni di record. O qualsiasi altro suggerimento purché sia basato sull'esempio qui sotto.
dato un semplice esempio:
Person
------------------------------------------------
ID UINT NOT NULL,
PersonID UINT NOT NULL,
Name VARCHAR(200) NOT NULL,
DOB DATE NOT NULL,
Email VARCHAR(100) NOT NULL
Audit
------------------------------------------------
ID UINT NOT NULL,
UserID UINT NOT NULL, -- Who
TableName VARCHAR(50) NOT NULL, -- What
OldRecID UINT NOT NULL, -- Where
NewRecID UINT NOT NULL,
AffectedOn DATE NOT NULL, -- When
Comment VARCHAR(500) NOT NULL -- Why
Non sono sicuro di come si potrebbe collegare la tabella di verifica per tutti gli altri tavoli (come persona) se il TableName è una stringa?
Inoltre, partendo dal presupposto che ho tre GUI per popolare:
- Una scheda completa per una persona specifica id
- Una vista tabella che elenca tutte le persone (da id)
- Una vista che mostra ogni persona con le loro informazioni di revisione sotto ciascuna voce (numero di revisioni per persona, date delle revisioni, commenti di revisione, ecc.) ordinate dalle revisioni più recenti.
Per eseguire 1 e 2, sarebbe meglio interrogare la tabella Persona o la tabella di controllo?
Per realizzare 3, un cosiddetto esperto di database otterrebbe semplicemente tutti i record e li inoltrerà al software per l'elaborazione, o raggrupperà per Persona e Data interessata? Di solito questo è gestito in una query o in molti?
L'audit è improbabile che il commento venga usato molto a meno che non venga popolato automaticamente. –