2010-06-07 5 views
5

In questo momento ho un progetto PHP e rintraccio tutte le modifiche nel codice da SVN. Vorrei anche tenere traccia delle modifiche apportate alla struttura del database.Strumento giusto per il tracciamento delle modifiche alla struttura del DB

Qual è lo strumento giusto da utilizzare?

+0

Buona domanda! Sarebbe utile avere uno script standard per questo. – powtac

+0

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

+1

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

risposta

1

Esistono diversi tipi di strumenti per tenere traccia delle modifiche della struttura del database.

molto buona è Workbench mysql: http://www.mysql.com/products/workbench/

è possibile modellizzare il vostro db con questo strumento per essere in grado di aggiornarlo con il di sincronizzazione in.

Un altro tipo di strumento che il mio essere perfetto per svn: PHP Migrazioni

http://code.google.com/p/mysql-php-migrations/

Con questo strumento si creano diversi script: 001_initial.php 002_changes.php per esempio.

e quando si esegue lo strumento, verranno applicati i file che non sono stati applicati per aggiornare lo schema.

Spero che questo ti aiuti.

1

Di solito ho uno script php che utilizzo per creare la struttura del database durante il processo di installazione e la fase di test.

Trovo molto utile averlo nel repository svn che tiene traccia dell'intero progetto (le modifiche apportate alle codebase cambiano automaticamente).

2

Solitamente risolvo questo problema con i dump di database con script, contenenti le definizioni di tabella e tutte le altre cose a cui potresti essere interessato. Ciò gestirà anche i dati stessi se il tuo DB non è troppo grande.

Per un approccio più sistematico, è possibile dare un'occhiata a Liquibase. Non ho provato da solo, quindi non posso commentare l'usabilità pratica, ma sembra che potrebbe essere uno strumento molto utile per il controllo delle versioni di DB.

0

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.

0

Dai un'occhiata a Liquibase.

Si tratta di un ottimo software di gestione delle modifiche del database. Tuttavia, è un po 'difficile da implementare.

- Irshad.