1
resposta

Formas de alterar propriedades únicas dentro do banco

Não existe nenhuma forma de alterar a exclusividade de uma chave "OneToOne" para "JionColumm unique" sem limpar todo o banco de dados já existente? Pois em uma aplicação real esta característica pode ter aparecido depois da aplicação já rodando.

1 resposta

Olá Fabio, tudo bem com você?

Até onde eu sei, esse tipo de constraint só é executada no momento de criação do banco de dados, então pós criação acredito que não teria efeito

Entretanto, nada nos impede de adicionar dentro do próprio banco de dados, então um simples:

ALTER TABLE livros
ADD UNIQUE ( autor_id );

Já será suficiente para que as próximas inserções respeitem essa regra :)

Isto é até um ponto que normalmente discutido, deixar ou não deixar a JPA cuidar da estrutura do nosso banco de dados ?, algumas pessoas preferem criar todo schema e alterações, e deixar a JPA responsável apenas pelas operações de manipulação de dados, pois realmente em alguns pontos essa geração da JPA sera um pouco defasada, principalmente para migrações de dados :)

Além disso, perde-se um pouco do versionamento do banco de dados, quando ocorreu a alteração, e qual foi a a mudança se tornam perguntas difíceis de responder

Para isso existe algumas soluções mais elegantes, por exemplo, o Flyway que é um versionador de banco de dados, com ele você desenha toda a estrutura do seu banco, e vai criando as chamadas migrações que são arquivos .sql que definem as mudanças que aconteceram, então você acaba tendo uma pasta da seguinte maneira:

  • database
    • migrations
      • V1__init-database_sql
      • V1.1__add_admin_user.sql
      • V2__add_new_table.sql

E o flyway fica responsável por ler e executar essas migrações para dentro do banco de dados, e gerar a estrutura

Vou deixar um vídeo de uma introdução ao Flyway

E 2 artigos bem interessantes que falam sobre ele:

Abraços e Bons Estudos!