Como você modifica / controla as alterações nas tabelas SQL?

16

Ao trabalhar em uma equipe de desenvolvedores, onde todos estão fazendo alterações nas tabelas locais e nas tabelas de desenvolvimento, como você mantém todas as alterações sincronizadas? Um arquivo de log central onde todos mantêm suas alterações sql? Uma página wiki para rastrear as alterações de tabelas alteradas, arquivos .sql individuais que os desenvolvedores podem executar para levar seus bancos de dados locais à versão mais recente? Usei algumas dessas soluções e estou tentando encontrar uma boa solução sólida que funcione, por isso aprecio suas idéias.

Gabe.
fonte

Respostas:

4

Eu uso uma ferramenta de migração de banco de dados baseada em código e mantenho o código de migração no controle de origem.

Ao usar carimbos de data e hora como números de versão, qualquer número de desenvolvedores é livre para adicionar migrações como quiserem e podemos executar a ferramenta de migração em qualquer cópia do nosso banco de dados com confiança.

Eu costumava usar scripts SQL sob controle de versão, mas acho muito mais fácil trabalhar com a abordagem baseada em código, porque todos eles estão em um "local" lógico e são capazes de executar todos os scripts necessários com um único comando.

quentin-starin
fonte
4

Eu não faço isso sozinho, mas alguns desenvolvedores mantêm uma coleção de scripts SQL sob controle de origem que, quando executados, podem recriar as tabelas do banco de dados para fins de teste e criar um banco de dados vazio para fins de produção.

A mesma técnica pode ser usada para a versão do banco de dados no site do cliente, quando campos ou tabelas precisam ser adicionados ou removidos ou transformações de dados precisam ocorrer.

Robert Harvey
fonte
3

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.

Gary Rowe
fonte
2

Se você estiver em uma loja da MS, o Visual Studio 2010 possui algumas boas ferramentas de controle de versão de banco de dados, que também podem gerar scripts de alteração / implantação com base nas diferenças entre dois bancos de dados.

CaffGeek
fonte
2

Além de manter esquemas e outros scripts SQL sob controle de versão, outra prática prática é manter uma tabela 'versão do esquema' no banco de dados real .

create table schema_migrations (
    `appliedAt` timestamp not null default CURRENT_TIMESTAMP,
    `migrationCode` varchar(256) not null,
    `extraNotes` varchar(256),
    primary key (`migrationCode`)
)
Dan McGrath
fonte
1

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.

Berin Loritsch
fonte