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
Automação de processos com IA

Quando o Serverless Seduz e Destrói sua Arquitetura de Microserviços

Muita gente trata serverless como o novo martelo universal da arquitetura moderna. O problema é que, quando você já vive a realidade de microserviços, essa sedução pode virar caos: latência imprevisível, explosão de integrações assíncronas e um festival de over-engineering sem entregar valor. Aqui eu destrincho, sem gourmetização, onde essa combinação quebra, como fazer direito e quando você devia simplesmente dizer não.

DevOps

A Armadilha do No-Code em Microserviços: Quando a Promessa de Simplicidade Destrói Arquiteturas

Muita gente abraça no‑code achando que está ganhando velocidade, quando na verdade está plantando uma bomba-relógio arquitetural. Em microserviços, onde cada decisão vira multiplicador de complexidade, ferramentas no‑code viram gargalo, não solução. Aqui eu explico, sem gourmetização, por que depender de plataformas mágicas é um atalho direto para dívida técnica, acoplamento disfarçado e pipelines frágeis. E, claro: mostro como resolver isso de forma pragmática, com código e arquitetura de verdade.

Gestão Estratética de TI

O mito da ‘agilidade’ em 47 microserviços: por que sua equipe está ficando mais lenta

Quando uma equipe acha que dividir tudo em microserviços é sinônimo de maturidade técnica, o desastre já começou. O hype promete autonomia, escalabilidade e deploy contínuo. A realidade? Dependências cruzadas, arquitetura Frankenstein e metade da sprint resolvendo quebra-cabeças de infraestrutura. Neste artigo, eu — Rei Nascimento — explico como o uso excessivo de microserviços virou fábrica de dívida técnica e destruidor de foco. E, mais importante, mostro como sair desse buraco.

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

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