image

Acesse bootcamps ilimitados e +650 cursos pra sempre

75
%OFF
Ysmael Júnior
Ysmael Júnior03/12/2025 17:50
Compartilhe

Migração e Evolução de Banco de Dados

    Faz um tempinho que não dou as caras por aqui, no entanto, achei interessante compartilhar com vocês um pequeno estudo que estou fazendo entre um tempinho e outro que estou tendo. Sempre curti modelagem de dados, e já aproveitei ótimas horas da minha vida elaborando diagramas de classes e DER. No entanto, é sempre custoso, principalmente para um desenvolver, a execução do que está no papel. Horas criando scripts SQL, entendendo as particularidades de cada banco de dados, e, dependendo do projeto, batendo cabeça com N bancos de dados diferentes, um para cada ambiente.

    Calma, todo mundo sabe que existem inúmeras ferramentas responsáveis por cuidar da migração e evolução do banco de dados. E dentro do universo Java, o Liquibase possui um lugar de destaque. No entanto, o que é muito comum de se ver, o desenvolvedor utilizar o mesmo script SQL e salvando dentro de uma migration no projeto. Isso, por si só, é incrível. Ter nas mãos alguém que se responsabiliza de evoluir o teu banco com base nos seus scripts. Maravilha. Mas nem tudo são flores. 

    Aqui, entra o tema central deste artigo. Recentemente me propus a criar um micro serviço capaz de evoluir independente do banco, abstraindo essa camada e assim removendo este vendor lock-in. Já sabia que facilmente o Liquibase utiliza XML, mas estudando um pouquinho da sua documentação, descobri que da pra utilizar também JSON e, eureca, YAML.

    Meu olhos brilharam diante dessa possibilidade, e corri para minha IDE e construí uma pequena POC com essa ideia. Rodei um Docker com Postgres e comecei a brincadeira.

    O trecho a seguir mostra como criar uma tabela chamada "escola" com as colunas: id, nome e inep. Sem a necessidade de nenhuma linha de SQL.

    databaseChangeLog
    - changeSet:
        id: create_table_escola-1650592472333
        author: ysmaelmarinho
        changes:
        - createTable:
            tableName:  escola  
            columns:
            - column:
                name: id
                type: bigint
            - column:
                name: nome
                type: varchar(500)
            - column:
                name: inep
                type: varchar(8)
            schemaName:  matricula 
    

    E o resultado foi esse:

    image

    A evolução da tabela segue na mesma linha, elegância e beleza das extensões .yaml

    databaseChangeLog
    - changeSet:
        id: add_primary_key_on_escola-1650593981628
        author: ysmaelmarinho
        changes:
        - addPrimaryKey:
            clustered:  true  
            columnNames:  id  
            constraintName:  pk_escola  
            schemaName:  matricula  
            tableName:  escola  
            validate:  true:
    

    Auto increment da primary key

    databaseChangeLog
    - changeSet:
        id: add_autoincrement_on_id_on_escola-1650595341785
        author: ysmaelmarinho
        changes:
        - addAutoIncrement:
            columnDataType: bigint
            columnName: id
            defaultOnNull: false
            generationType: ALWAYS
            incrementBy: 1
            schemaName: matricula
            startWith: 1
            tableName: escola   :
    

    E o resultado final:

    image

    O legal disso tudo é que dá pra utilizar outros formatos de migration, como o XML, JSON, SQL...

    Este artigo tem como finalidade apresentar a você, desenvolvedor, possibilidades de manter seu banco de dados sem se preocupar tanto com a gestão dos scripts. Convido você a conhecer um pouco mais do Liquibase e sinta-se à vontade para opinar e contribuir com o assunto. 

    Grande abraço

    Compartilhe
    Recomendados para você
    GitHub Copilot - Código na Prática
    CI&T - Backend com Java & AWS
    Nexa - Machine Learning e GenAI na Prática
    Comentários (1)
    DIO Community
    DIO Community - 03/12/2025 18:02

    Excelente, Ysmael! Que artigo cirúrgico, inspirador e essencial! Você tocou no ponto crucial do Desenvolvimento Java Backend: a migração de schema é um processo custoso e propenso a erros, e a abstração dessa camada com Liquibase é a melhor prática para remover o vendor lock-in.

    É fascinante ver como você aborda o tema, mostrando que o Liquibase permite evoluir o banco de dados com arquivos declarativos (YAML, JSON, XML), eliminando o esforço manual de criar scripts SQL para cada ambiente.

    Qual você diria que é o maior desafio para um desenvolvedor ao implementar os princípios de IA responsável em um projeto, em termos de balancear a inovação e a eficiência com a ética e a privacidade, em vez de apenas focar em funcionalidades?