Crie scripts sob controle de versão e integração contínua para verificá-los
Uma abordagem que funcionou para mim foi fazer com que cada desenvolvedor trabalhasse com seu próprio esquema, com o qual eles pudessem fazer o que quisessem. O esquema deles era destrutível e preenchido com dados de teste extraídos de um conjunto de scripts controlado por versão para o qual todos os desenvolvedores contribuíram.
A construção de integração contínua noturna pegou a versão mais recente de todos os scripts e tentou criar um banco de dados de teste coeso a partir deles. O aplicativo então executou uma série de testes funcionais e de integração para verificar se o esquema atual estava alinhado com o candidato a release atual.
Antes de começar esse caminho, havia um design de banco de dados bastante sólido e um DBA estava sempre de olho nas coisas para impedir que os desenvolvedores enlouquecessem com a desnormalização e outros horrores.
O controle de versão ajudou imensamente aqui porque as alterações nos scripts foram imediatamente óbvias. Também fizemos uso de um banco de dadosVERSION
tabela de para identificar o estado geral do banco de dados. Essa era uma sequência inteira simples e não estava vinculada a nenhum aplicativo específico.
No geral, funcionou bem e significou que os desenvolvedores deixaram de ter medo de alterar as camadas de persistência, porque sempre podiam reverter seus próprios esquemas sem impactar os outros.
A abordagem que eu uso é fornecer uma tabela para parâmetros. Esta tabela terá um par de nome / valor para a versão em que o banco de dados está. Isso me dá dois benefícios: eu tenho uma maneira de verificar se uma correção de banco de dados foi aplicada apenas pelo aplicativo e posso usar esse valor para meus scripts SQL.
O script SQL criará novas tabelas, alterará colunas e qualquer trabalho necessário no banco de dados para promover o script da versão anterior. Idealmente, eu também teria um script de reversão, mas na maioria das vezes não.
BTW, toda essa abordagem foi automatizada como parte do Ruby on Rails, completa com os scripts de reversão. Eu gosto da ideia disso, mas nem todas as estruturas fazem isso. Quando não estou usando Ruby on Rails, uso a abordagem descrita acima.
fonte