Durante i periodi di forte sviluppo, lo schema del database cambia sia rapidamente che continuamente e, quando arriva la nostra spinta settimanale alla build beta, lo schema è cambiato così tanto che l'unica opzione sensata è quella di cancellare tutte le tabelle che posso e copia le nuove versioni dal mio database di sviluppo. Ovviamente, questo non funzionerà una volta lanciato, dal momento che il backup dei dati di produzione è una ricetta per il disastro, quindi mi chiedevo quali strategie esistessero per gestire le modifiche dello schema del database da una versione / revisione a un'altra?
Alcuni che ho trovato o sperimentato:
- Nuke-and-dump diretto da un database all'altro (cosa sto facendo ora)
- Mantenimento di un file UPDATE.sql con istruzioni SQL che vengono eseguite manualmente o tramite script.
- Mantenimento di un file update.php con un valore "versione-schema-versione" corrispondente nel database attivo
La terza opzione sembra essere la più ragionevole, ma esiste ancora la possibilità che una query SQL costruita in modo errato non riesca a metà script, lasciando il database in uno stato semi-aggiornato, richiedendo il ripristino di un backup.
Sembra un non-problema, ma succede, dal momento che come squadra, usiamo phpMyAdmin, e non riesco nemmeno a fare affidamento su di me stesso ricordo di aver copiato l'istruzione SQL eseguita per incollarla nel file update.php. Una volta che accedi a un'altra pagina, devo riscrivere a mano l'istruzione SQL o annullare la modifica e farlo di nuovo.
Immagino che ciò che spero sia una soluzione che non influisca sul flusso di lavoro di sviluppo stabilito?
update.php
oupdate.sql
file in un ambiente di test prima di applicarlo al database attivo, giusto? E PHPMyAdmin viene accusato dei possibili problemi che potrebbero verificarsi in uno script, forse è tempo di cercare uno strumento diverso / migliore?