2014-10-12 9 views
5

Questa è solo un'idea casuale di cui mi stavo chiedendo. Esistono ORM o database che supportano nativamente la cronologia di monitoraggio? Sto immaginando che ogni riga abbia una chiave primaria composta con un ID e una versione. Un aggiornamento dovrebbe "aggiungere" una nuova riga con lo stesso ID e il prossimo numero di versione disponibile. Una selezione normale restituisce solo la versione più recente di una riga identificata in modo univoco, ma "SelectHistory" restituirebbe tutte le righe. L'eliminazione sarebbe nativamente una cancellazione morbida.ORM o database che funziona come controllo della versione e cronologia tracce

Dato che questo non è un nuovo problema e che non c'è niente di nuovo sotto il sole, mi ha colpito che c'è un'alta probabilità che qualcuno abbia già progettato una soluzione elegante che astrae le parti difficili di questo, e che potrebbe essere fatto a livello di database o di ORM.

Ho un'applicazione esistente costruita su Entity Framework. Sostituisce il metodo SaveChanges di DbContext per impostare le proprietà CreatedBy/CreatedDate/ModifiedBy/ModifiedDate per ogni entità nuova/modificata. Il cliente ha recentemente chiesto quanto lavoro avrebbe comportato per aggiungere il monitoraggio completo della cronologia. Ho dato loro una stima ragionevole basata sull'esperienza passata con sistemi simili. La mia stima comportava l'aggiunta di ulteriori entità al modello e alla logica del livello aziendale per popolare queste entità. Il cliente ha deciso di non proseguire il lavoro, ma mi ha fatto chiedersi se ci fosse un modo migliore. C'è una soluzione migliore con Entity Framework? Ci sono soluzioni migliori con altre architetture?

+0

Ho preso una virata diversa su questo per il controllo delle versioni dei nostri database wordpress. Quello che ho fatto è stato un dump mysqladmin notturno in una directory di lavoro con versione. Dopo che la discarica è stata completata, avrei semplicemente commesso le modifiche. – B2K

risposta

0

Quello che descrivi è un modulo multi-version concurrency control. Solitamente MVCC viene utilizzato sotto le copertine da un'implementazione del database per evitare di dover bloccare durante le transazioni di sola lettura, ma può anche essere reso esplicito come suggerito. C'è una discussione su alcune diverse opzioni per l'implementazione di MVCC esplicito in this question. Se stai monitorando anche un CreatedDate per ogni versione, hai tutto ciò che ti serve per un temporal database.

Problemi correlati