Chama-se schema_version (ou migrations, ou o que for mais conveniente para você) e sua finalidade é acompanhar as alterações estruturais ou de dados no banco de dados. Uma possível estrutura (exemplo em MySQL) é:
insira em schema_version( key, extra) valores ('001', 'versão do esquema');
Depende de você adicionar essa tabela desde o início do projeto ou logo depois de implantar a primeira versão em um servidor de teste ou produção.
Sempre que você precisar executar um script SQL para alterar a estrutura do banco de dados ou realizar uma migração de dados, você também deve adicionar uma linha nessa tabela. E faça isso por meio de uma instrução de inserção no início ou no final desse script (que é confirmado no repositório de código do projeto).
Outra pergunta do SO me leva ao Migrator Dot Net , que vou começar a investigar durante meu abundante tempo livre. Parece um bom método, mas pode ser mais um investimento de tempo/overhead do que você está disposto a fazer.
eiefai já mencionado Uma tabela que deve existir em todos os projetos com banco de dados . Esta é uma ótima postagem de blog, mas IMO é apenas parte do caminho para uma solução funcional para controle de revisão de banco de dados. Acho que qualquer tentativa de "responder" a essa pergunta no mundo real precisa considerar algumas das outras informações sobre VCS e bancos de dados:
Há alguns ângulos diferentes para abordar esta questão, eu acho. O ângulo "ferramenta primeiro", acredito, vai variar de acordo com a plataforma e a preferência pessoal. Caso em questão: estou usando um projeto de banco de dados no MS Visual Studio, mas não tenho certeza se esta é uma ótima solução para o MySQL. Também conheço pessoas que são bastante vendidas em suas ferramentas favoritas da Redgate, Erwin, Embarcadero, etc.
Há também um ângulo de "primeiro processo" para esta pergunta, que (espero) será revisitado neste site em perguntas subsequentes. As pedras angulares neste processo são colocar seu esquema sob controle de origem e gerenciar alterações de forma que você possa aplicar alterações de esquema da versão "x" para a versão "y" praticamente sob demanda.
Uma resposta definitiva para este tópico vai acabar parecendo um livro, então provavelmente vale a pena começar fazendo referência a um: Redgate publicou recentemente um ebook gratuito chamado " The Red Gate Guide to SQL Server Team-based Development ", e embora haja há muito para ser debatido, é um bom lugar para começar a debater, IMO. Ao contrário do nome, grande parte do material deste livro é geral o suficiente para ser aplicado a qualquer banco de dados (não apenas SQL Server) e qualquer conjunto de ferramentas (não apenas Redgate). Se você ainda não viu isso, definitivamente vale a pena dar uma olhada, pelo menos.
SchemaCrawler é minha ferramenta para produzir um arquivo de texto com todos os objetos de esquema do banco de dados. Eu projetei esta saída de texto para ser legível por humanos, bem como diferenciável de uma saída semelhante de outro servidor.
Na prática, o que descobri é que a saída de um arquivo de texto do esquema do banco de dados é útil, quando feito como parte do build. Dessa forma, você pode verificar o arquivo de texto em seu sistema de controle de código-fonte e ter um histórico de versão de como seu esquema evoluiu ao longo do tempo. O SchemaCrawler foi projetado para automatizar isso também, a partir da linha de comando.
apenas alguns minutos atrás eu estava verificando isso: Uma tabela que deveria existir em todos os projetos com banco de dados , parece simples o suficiente para colocar em prática, confira:
Acho que o melhor método é gerar o banco de dados como parte do processo de compilação . Mantenha todos os scripts no controle de origem com o restante do código e todos são responsáveis por seus próprios ambientes.
Caso contrário, o RedGate possui uma ferramenta para integrar o controle de origem ao SSMS e o SQL Compare é útil para comparar/sincronizar esquemas do MS SQL Server. O Visual Studio Database Edition também possui uma ferramenta de comparação de esquema integrada .
Outra pergunta do SO me leva ao Migrator Dot Net , que vou começar a investigar durante meu abundante tempo livre. Parece um bom método, mas pode ser mais um investimento de tempo/overhead do que você está disposto a fazer.
eiefai já mencionado Uma tabela que deve existir em todos os projetos com banco de dados . Esta é uma ótima postagem de blog, mas IMO é apenas parte do caminho para uma solução funcional para controle de revisão de banco de dados. Acho que qualquer tentativa de "responder" a essa pergunta no mundo real precisa considerar algumas das outras informações sobre VCS e bancos de dados:
Há alguns ângulos diferentes para abordar esta questão, eu acho. O ângulo "ferramenta primeiro", acredito, vai variar de acordo com a plataforma e a preferência pessoal. Caso em questão: estou usando um projeto de banco de dados no MS Visual Studio, mas não tenho certeza se esta é uma ótima solução para o MySQL. Também conheço pessoas que são bastante vendidas em suas ferramentas favoritas da Redgate, Erwin, Embarcadero, etc.
Há também um ângulo de "primeiro processo" para esta pergunta, que (espero) será revisitado neste site em perguntas subsequentes. As pedras angulares neste processo são colocar seu esquema sob controle de origem e gerenciar alterações de forma que você possa aplicar alterações de esquema da versão "x" para a versão "y" praticamente sob demanda.
Uma resposta definitiva para este tópico vai acabar parecendo um livro, então provavelmente vale a pena começar fazendo referência a um: Redgate publicou recentemente um ebook gratuito chamado " The Red Gate Guide to SQL Server Team-based Development ", e embora haja há muito para ser debatido, é um bom lugar para começar a debater, IMO. Ao contrário do nome, grande parte do material deste livro é geral o suficiente para ser aplicado a qualquer banco de dados (não apenas SQL Server) e qualquer conjunto de ferramentas (não apenas Redgate). Se você ainda não viu isso, definitivamente vale a pena dar uma olhada, pelo menos.
Por fim, provavelmente vale a pena vincular a "resposta herdada" de stackoverflow .
SchemaCrawler é minha ferramenta para produzir um arquivo de texto com todos os objetos de esquema do banco de dados. Eu projetei esta saída de texto para ser legível por humanos, bem como diferenciável de uma saída semelhante de outro servidor.
Na prática, o que descobri é que a saída de um arquivo de texto do esquema do banco de dados é útil, quando feito como parte do build. Dessa forma, você pode verificar o arquivo de texto em seu sistema de controle de código-fonte e ter um histórico de versão de como seu esquema evoluiu ao longo do tempo. O SchemaCrawler foi projetado para automatizar isso também, a partir da linha de comando.