Para los cambios de base de datos, hemos (tenía, ya no trabaja allí) un directorio en el VCS:
+ dbchanges
|_ 01_database
|_ 02_table
|_ 03_data
|_ 04_constraints
|_ 05_functions
|_ 06_triggers
|_ 07_indexes
Cuando se realiza un cambio en la base de datos se pone el cambio en un archivo .sql, en el directorio correcto con la fecha y hora actual como el nombre del archivo. Cuando desee actualizar su base de datos, ejecute el script de integración, que pasa por estos directorios en orden, e importe cada cambio en el db.
Los directorios se nombran de esta manera, para asegurarse de que el orden en que se ejecutan los scripts es correcto. (Entonces, la secuencia de comandos que intenta insertar datos en una tabla, no se ejecutará antes de la secuencia de comandos que crea dicha tabla)
Los archivos sql tienen que tener que comenzar con un comentario, que se muestra al usuario cuando la integración script importa el cambio, describiendo lo que hace. Registra cada nombre de archivo SQL importado en un archivo, por lo que cuando ejecute el script la próxima vez, no volverá a aplicar el mismo cambio.
Los inconvenientes son que esto no admite retrocesos, ya que tendría que almacenar las inversas de las operaciones, y para algunas operaciones esto no es posible, como DELETE.El otro inconveniente es que si de alguna manera pierde el archivo que rastrea los cambios ya aplicados, debe volver a crear su base de datos desde cero.
¡Buena pregunta! Sería útil tener un script estándar para eso. – powtac
Para un RDBMS específico, en caso afirmativo, ¿cuál? ¿O uno genérico? He utilizado un script PHP para PostgreSQL en el pasado (pero no puedo recordar el nombre), solo cubría nuevas columnas y cambios de columnas a través de IIRC, pero no eliminé los eliminados. – wimvds
Ok, solo eché un vistazo a mi archivo: p. El script en cuestión era [Zongle] (http://zongle.sourceforge.net/), y no cubría los cambios de columnas, solo las adiciones a columnas ... ¿Es algo similar que estás buscando? – wimvds