Per modifiche del database, abbiamo (avuto, non più lavorare lì) una directory nella VCS:
+ dbchanges
|_ 01_database
|_ 02_table
|_ 03_data
|_ 04_constraints
|_ 05_functions
|_ 06_triggers
|_ 07_indexes
Quando si apporta una modifica al database si mette il cambio in un file sql, in la directory corretta con la data e l'ora correnti come nome file. Quando si desidera aggiornare il DB, si esegue lo script di integrazione, che passa attraverso queste directory in ordine e importa ogni modifica nel db.
Le directory vengono denominate in questo modo, per assicurarsi che l'ordine in cui vengono eseguiti gli script sia corretto. (Quindi lo script che tenta di inserire dati in una tabella, non verrà eseguito prima dello script che crea detta tabella)
I file sql devono iniziare con un commento, che viene visualizzato all'utente quando l'integrazione lo script importa il cambiamento, descrivendo cosa fa. Registra ogni nome di file sql importato in un file, quindi quando si esegue lo script la volta successiva, non verrà applicata di nuovo la stessa modifica.
Gli svantaggi sono che questo non supporta i rollback, poiché è necessario memorizzare gli inversi delle operazioni e, per alcune operazioni, ciò non è possibile, come DELETE.L'altro svantaggio è che se in qualche modo perdi il file che tiene traccia delle modifiche già applicate, devi ricreare il tuo DB da zero.
fonte
2010-06-08 12:05:46
Buona domanda! Sarebbe utile avere uno script standard per questo. – powtac
Per un RDBMS specifico - se sì, quale - o generico? Ho usato uno script PHP per PostgreSQL in passato (ma non ricordo il nome), riguardava solo le nuove colonne e le modifiche alle colonne anche se IIRC, non ne lasciava cadere quelle rimosse. – wimvds
Ok, ho appena dato un'occhiata al mio archivio: p. La sceneggiatura in questione era [Zongle] (http://zongle.sourceforge.net/), e non riguardava le modifiche alle colonne, solo le aggiunte alle colonne ... È qualcosa di simile che stai cercando? – wimvds