Oi colegas do i-Educar;
Uma coisa que tem me deixado preocupado é a questão da aplicação dos deltas no Banco de dados. Hoje, essencialmente, temos um método que consiste em:
- Criar um arquivo em ieducar/misc/database/deltas/ com as alterações, e dar um nome sequencial para ele.
- Executar esse arquivo.
- Repetir para futuras alterações no banco de dados.
Não é um procedimento complicado, e futuros problemas em potencial são:
- Sequenciação por numeração: isso começou com um dígito, e em seguida foram para dois dígitos. Hoje estamos no número 71.
- Rastreabilidade: é preciso ter um controle separado ao banco para saber qual foi o último delta aplicado. Ou ficar olhando a estrutura do banco o tempo todo quando se for aplicar uma atualização.
- Segmentação: hoje temos dois sub-diretórios abaixo de deltas. Diversos da Portabilis, e um da mytdt. Aqui no SERPRO temos um nosso, mas por padrão eu já replico os deltas da Portabilis. E futuros colaboradores, como podem proceder?
Por último porém não menos importante, tem a questão de novas instalações. Eu mantenho o arquivo ieducar/misc/database/ieducar.sql atualizado com os novos deltas, e é algo que dá um pouco de trabalho para manter.
Existem soluções geniais que resolvem isso tudo e automatizam o processo todo. No nosso caso não via como amarrarmos algum framework em PHP que cuide disso sem dar muito trabalho, até descobrir esse cara aqui:
https://github.com/robmorgan/phinx
Ele é instalado via Composer e tem uma abordagem bem parecida com a do Django. Você cria uma nova Migration, que é especifica para aquela mudança, e tudo fica tão simples quanto:
public function change() { // create the table $table = $this->table('user_logins'); $table->addColumn('user_id', 'integer') ->addColumn('created', 'datetime') ->create(); }
E ele ainda permite que você visualize o estado do banco de dados e veja quais deltas foram aplicados e quando, e faz todo o trabalho sujo, e resolve potenciais problemas futuros.
Eu cogitei a hipótese de criar uma tabela 'deltas' no banco de dados e uma página boba para visualizar ela, pelo menos para finalidade de rastreabilidade. Hoje mesmo, os deltas que eu gero eu já coloco data para facilitar a sequenciação, mas vejo a utilização do Phinx como uma garantia necessária para longo prazo.
O que vocês pensam de eu fazer algo nessa linha?
Autor: Carlos Morais dos Santos
22 comentários