Controle de Versão do Banco de Dados para MySQL

Qual método você usa para controlar seu banco de dados? Eu cometi todas as nossas tabelas de banco de dados como scripts .sql separados para o nosso repositório (mercurial). Dessa forma, se algum membro da equipe fizer uma alteração na tabela de funcionários, por exemplo, saberei imediatamente qual tabela específica foi modificada quando atualizei meu repositório.

Tal método foi descrito em:Quais são as melhores práticas para scripts de banco de dados sob controle de código. Atualmente, estou escrevendo um script python para executar todos os arquivos .sql dentro da pasta do banco de dados, no entanto, a questão das dependências devido a restrições de chave estrangeira garante que não podemos simplesmente executar os arquivos .sql em qualquer ordem.

O script python é gerar um arquivo com a ordem na qual executar os arquivos .sql. Ele executará os arquivos .sql na ordem em que aparecem no arquivo tableorder.txt. Uma tabela não pode ser executada até que sua tabela de chaves estrangeiras tenha sido executada, por exemplo:

tableorder.txt

table3.sql
table1.sql
table7.sql e assim por diante

Já criei a lista de dependências para cada tabela, a partir do código, analisando o resultado do comando mysql "show create table". A lista de dependências pode parecer assim:

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

Para gerar o conteúdo do tableorder.txt, precisarei de um algoritmo que se pareça assim:

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 você pode imaginar, isso envolve muita recursão. Estou começando a me perguntar se vale a pena o esforço? Se há alguma ferramenta lá fora? Qual ferramenta (ou algoritmo) está lá para gerar uma lista da ordem para executar tabelas e visualizações .sql separadas, levando em consideração as dependências? É melhor controlar o arquivo .sql separado da versão para cada tabela / exibição ou melhor para controlar o banco de dados inteiro em um único arquivo .sql? Eu apreciarei qualquer resposta, pois isso levou muitos dias. Obrigado.

questionAnswers(3)

yourAnswerToTheQuestion