Desmistificando o MySQL: Quando a Normalização Atrapalha Microserviços

Onde a Normalização Começa a Sabotar Microserviços

O problema não é o MySQL. O problema é achar que normalização extrema é virtude universal. Em microserviços, isso vira dívida técnica disfarçada de “boas práticas”.

O cenário clássico das trincheiras: times tentando dividir tabelas 3FN entre serviços diferentes, joins virando requisições remotas, latência explodindo e logs mostrando cascatas de timeouts dignos de filme de terror.

A verdade crua: quando você normaliza demais um domínio que já é distribuído, você transforma comunicação interna em gargalo de rede. E ninguém te conta isso na faculdade.

Normalização Inteligente: O Jeito Pragmático de Fazer MySQL Trabalhar a Seu Favor

A solução não é jogar normalização pela janela. É aplicar com critério. Em microserviços, o jogo muda: isolamento de dados vale mais do que pureza relacional.

Quer pragmatismo? Aqui vai:

  • Normalização só até o nível em que cada microserviço controla seu próprio agregado.
  • Nada de dividir tabelas entre serviços. Se precisa disso, seu boundary está errado.
  • Consistência eventual é amiga, não inimiga.

Implementação de Sênior: Modelando um Domínio Sem Over‑Engineering

Exemplo prático com um microserviço de Orders que NÃO depende de joins remotos e NÃO vira refém de outro banco.

Modelo simplificado e propositalmente desnormalizado para refletir o agregado completo:

CREATE TABLE orders (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  customer_id BIGINT NOT NULL,
  total DECIMAL(10,2) NOT NULL,
  status VARCHAR(30) NOT NULL,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

CREATE TABLE order_items (
  id BIGINT PRIMARY KEY AUTO_INCREMENT,
  order_id BIGINT NOT NULL,
  product_id BIGINT NOT NULL,
  product_name VARCHAR(255) NOT NULL,
  unit_price DECIMAL(10,2) NOT NULL,
  quantity INT NOT NULL,
  FOREIGN KEY (order_id) REFERENCES orders(id)
);

“Mas Rei, por que repetir product_name e unit_price?”

Porque esse microserviço não é catálogo. Ele precisa da fotografia do pedido no momento da compra, não dos dados atuais do produto. Isso é domínio, não é gambiarra.

Fluxo de consistência eventual via evento simplificado:

// Pseudocódigo de publicação de evento
publish("order.created", {
  orderId: id,
  total: total,
  items: orderItems
});

Assim, outro serviço pode reagir sem obrigar o Order Service a fazer chamadas remotas.

O Preço da Liberdade: Trade-offs da Normalização Controlada

Aqui é onde os adultos conversam. Não existe escolha sem custo:

  • Desnormalizar exige disciplina. Se espalhar dado demais, vira bagunça. Faça apenas dentro do agregado.
  • Consistência eventual não é para ansiosos. Se o negócio exige estado global atualizadíssimo, microserviços podem não ser o melhor caminho.
  • Mais armazenamento. Sim, vai duplicar dados. E sim, é barato. O tempo do seu time não é.

Direto das Trincheiras

  • Antes de normalizar, valide se o dado realmente pertence ao mesmo contexto de negócio.
  • Se seu serviço precisa fazer join remoto para funcionar, seu design já quebrou.
  • Quando um microserviço exige mais de três integrações síncronas para responder uma requisição, isso é cheiro de monólito distribuído.

Fontes Relacionadas

CURSO DE BACHARELADO EM CIÊNCIA DA COMPUTAÇÃO,
Ciência da Computação | Graduação Unifor – Graduação

Obrigado por acompanhar essa reflexão até o fim!

Espero que esses pontos ajudem você a tomar decisões mais lúcidas no seu próximo projeto. Não deixe de conferir outros artigos aqui no blog, onde descascamos outros hypes da nossa área.

Valeu e até a próxima! 😉

Facebook
Twitter
LinkedIn
Arquitetura Limpa

Microservices vs Monolitos: A falsa sensação de simplicidade que custa caro

Muita gente ainda acha que monolito é sinônimo de simplicidade e microservices é hype. A realidade nas trincheiras é bem menos romântica: ambos podem virar um inferno caro se escolhidos fora do contexto de negócio. Neste artigo eu abro o jogo, sem gourmetização, mostrando por que microservices fazem sentido em algumas arquiteturas — e por que o “monolito simples” frequentemente vira uma bola de neve de dívida técnica.

Test Driven Development

REST vs GraphQL sem gourmetização: a escolha que realmente impacta sua escalabilidade

Quando o assunto é escalar uma plataforma, muita gente trava no dilema REST vs GraphQL — e boa parte dessa trava vem de hype, não de necessidade real. Aqui eu, Rei Nascimento, corto o excesso, foco no que importa e mostro como essa escolha pode gerar dívida técnica ou salvar sua arquitetura. Direto das trincheiras, sem poesia arquitetural.

Profissionalismo em Tecnologia

A Obsessão por Microserviços Está Criando Monólitos na Cabeça de Muita Gente

Microserviços viraram religião. E, como toda religião mal interpretada, criou fanático achando que qualquer API com três rotas já merece dez serviços, quatro filas e um diagrama que parece um ninho de marimbondo. Neste artigo, falo direto da trincheira: quando microserviços viram over‑engineering, como isso destrói produtividade e por que a obsessão pelo hype cria monólitos mentais — mesmo quando o código está “distribuído”. Sem firula, só pragmatismo.

3 comentários em “Desmistificando o MySQL: Quando a Normalização Atrapalha Microserviços”

  1. santos.felipe

    Essa é a pura verdade. Na última refatoração, tivemos que desnormalizar umas tabelas pra parar de estrangular a performance e evitar o monólito distribuído.

  2. Passei por isso com um cluster de microserviços onde o DB normalizado virou o gargalo principal. Aquele famoso ‘monólito distribuído’ é real e dói no deploy.

  3. Passei por isso esses dias! Normalização excessiva em microserviço vira join distribuído na query, matando a performance. Realmente é melhor focar no contexto do negócio.

Deixe um comentário para santos.felipe Cancelar resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *