AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 2
Accepted
Toby
Toby
Asked: 2011-01-04 12:46:32 +0800 CST2011-01-04 12:46:32 +0800 CST 2011-01-04 12:46:32 +0800 CST

Como um grupo pode rastrear alterações no esquema do banco de dados?

  • 772

Quais metodologias de controle de versão ajudam equipes de pessoas a rastrear alterações de esquema de banco de dados?

mysql version-control
  • 5 5 respostas
  • 11653 Views

5 respostas

  • Voted
  1. Best Answer
    eiefai
    2011-01-04T12:49:46+08:002011-01-04T12:49:46+08:00

    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:

    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) é:

    create table schema_version (
         `when` timestamp not null default CURRENT_TIMESTAMP,
         `key` varchar(256) not null,
         `extra` varchar(256),
         primary key (`key`)
    ) ENGINE=InnoDB;
    

    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).

    …

    • 46
  2. Larry Smithmier
    2011-01-04T13:22:04+08:002011-01-04T13:22:04+08:00

    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.

    • 24
  3. TML
    2011-01-05T23:05:53+08:002011-01-05T23:05:53+08:00

    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:

    • A metodologia Agile Data
    • O livro "Refatoração de banco de dados"
    • Artigo de Martin Fowler sobre "Evolutionary Database Design"
    • A ferramenta Liquibase
    • Um vídeo decente com Scott Ambler apresentando seus pensamentos sobre "Agile Databases"
    • 12
  4. D. Lambert
    2011-01-04T13:21:58+08:002011-01-04T13:21:58+08:00

    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 .

    • 8
  5. Sualeh Fatehi
    2011-02-07T17:59:52+08:002011-02-07T17:59:52+08:00

    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.

    • 5

relate perguntas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve