Control de versiones de base de datos para MySQL

¿Qué método utilizas para controlar la versión de tu base de datos? He confiado todas nuestras tablas de bases de datos como scripts .sql separados en nuestro repositorio (mercurial). De esa manera, si algún miembro del equipo realiza un cambio en la tabla de empleados, por ejemplo, sabré inmediatamente qué tabla en particular se modificó cuando actualicé mi repositorio.

Tal método fue descrito en:¿Cuáles son las mejores prácticas para los scripts de base de datos bajo el control de código?. Actualmente, estoy escribiendo un script de Python para ejecutar todos los archivos .sql dentro de la carpeta de la base de datos, sin embargo, el problema de las dependencias debido a restricciones de clave externa garantiza que no podamos ejecutar los archivos .sql en cualquier orden.

La secuencia de comandos de Python es generar un archivo con el orden en que se ejecutarán los archivos .sql. Ejecutará los archivos .sql en el orden en que aparecen en el archivo tableorder.txt. No se puede ejecutar una tabla hasta que se haya ejecutado su tabla de clave externa, por ejemplo:

tableorder.txt

table3.sql
table1.sql
table7.sql y así sucesivamente

Ya he generado la lista de dependencias para cada tabla, a partir del código, analizando el resultado del comando mysql "mostrar crear tabla". La lista de dependencias puede verse así:

tblstate: tblcountry //tblcountry.sql must be executed before tblstate.sql etc
tblemployee: tbldepartment, tblcountry

Para generar el contenido del tableorder.txt, necesitaré un algoritmo que se verá así:

function print_table(table):
  foreach table in database:
    if table.dependencies.count == 0
      print to tableorder.txt
    if table.dependencies.count > 0
      print_table(dependency) //print dependency first
end function

Como podrás imaginar, esto implica mucha recursión. Estoy empezando a preguntarme si vale la pena el esfuerzo. Si hay alguna herramienta por ahí? ¿Qué herramienta (o algoritmo) existe para generar una lista del orden para ejecutar tablas y vistas .sql separadas teniendo en cuenta las dependencias? ¿Es mejor controlar la versión del archivo .sql separado para cada tabla / vista o mejor controlar la versión de la base de datos completa en un solo archivo .sql? Apreciaré cualquier respuesta ya que esto ha tardado tantos días. Gracias.

Respuestas a la pregunta(3)

Su respuesta a la pregunta