Migrations, uma breve explicação

Uma das grandes dificuldades dentro de um time de desenvolvimento WEB, sem dúvida, é manter o Banco de Dados atualizado entre todos ambientes de trabalho. Volta e meia um desenvolvedor faz alguma alteração no banco e não comunica o restante do grupo. Isto sempre causa retrabalho, bugs ou um programador arrancando o próprio cabelo.

Uma das causas deste problema é que em nenhum momento rastreamos as modificações do banco em nossos projetos. Para o código temos o SCM (source code management), para controlar as tarefas temos os gerenciadores de projetos, para os documentos temos o Google Docs, mas para o banco de dados? Foi pensando nesses problemas que se criou o técnica de Migrations. O Migrations é uma forma de manter organizadas as modificações na estrutura do banco de dados, permitindo, dentre algumas facilidades, construir seu banco incrementalmente, retroceder alteração que não sejam mais adequadas ou trabalhar em ambientes com diversos programadores.

O conceito básico de Migrations consiste em armazenar as modificações do banco em pequenos arquivos numa ordem cronológica. Esses arquivos devem conter informações que consigam construir ou destruir seu banco de uma versão para qualquer outra. Como se faz isto? Simples, indique no seu arquivo como proceder numa determinada atualização (UP) e como retroceder (DOWN), assim, quando quer ir para uma versão mais nova, execute todos os UPs dos arquivos mais recentes, e quando quer retroceder, execute os DOWNs até a versão mais antiga. Com ajuda de um programa auxiliar, que geralmente é um automatizador, você consegue executar facilmente tarefas como (re)construção de banco, atualização de alterações ou rollback’s de algo que não saiu como se devia.

Em algumas implementações de Migrations é possível fazer manipulação de dados. Esta é uma facilidade muito interessante e os DBA’s devem adorar. Imagine que você, em um determinado momento, queira fazer uma modificação no campo “nome_completo” quebrando-o em dois: “nome” e “sobrenome”. Com a manipulação você consegue fazer o tratamento dos dados e migrar, não só a estrutura do banco, mas também os dados que por ventura podem estar armazenados. Esta funcionalidade dá um pouco mais de poder ao Migrations, mas nem sempre esta presente em todas as implementações.

Como alguns podem estar acompanhando, eu e Juan Basso estamos criando uma implementação de Migrations para CakePHP. Numa iniciativa de não tentar reinventar a roda, estamos fazendo alguns estudos sobre implementações de Migrations em PHP. No momento temos três implementações que acreditamos ser interessantes: CakeSchema, Migrations do JoelMoss para Cake e o Ruckusing. Cada um possui qualidades e defeitos, por isso tivemos a idéia de convidar a comunidade para discutir a necessidade de se criar uma nova implementação. Quem puder nos ajudar testando estas implementações e nos falando seus pontos pró e contras, ou mesmo apontando outras implementações, agradecemos.

Bem, está ai uma breve explicação de Migrations, espero que você tenham entendido um pouco e estamos esperando a participação de todos na discussão.

Posts relacionados:

  1. Improved Cake Shell: feedbacks coloridos no console Eu e o Lucas tinhamos um trabalho bem divertido: criar...