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

Kafka vs RabbitMQ: a verdade nua sobre escalabilidade em microserviços

Chega de romantizar mensageria. Quando o sistema começa a chiar, fila travando e consumidor engasgando, é aí que o arquiteto leva culpa. Kafka e RabbitMQ não são mágicos, têm propósitos distintos — e escolher errado vira dívida técnica que assombra por anos. Neste artigo, trago a visão de trincheira: onde cada um brilha, onde cada um quebra, e quando abandonar o hype e focar no que realmente resolve o problema do negócio.

Banco de dados

Mensageria em Microssistemas: Quando Ela Entrega Valor — e Quando Só Aumenta Sua Dívida Técnica

A verdade nua e crua: muita gente coloca mensageria em microserviços porque viu num diagrama bonito no slide do arquiteto da moda. Só que hype não paga boleto — e muito menos salva sistema mal modelado. Aqui eu explico onde a mensageria realmente resolve dor de negócio, quando ela vira over-engineering e como implementar sem transformar sua stack em um zoológico distribuído impossível de manter.

Discussões

A Ilusão do Low‑Code: Quando a Promessa de Velocidade Destrói Sua Arquitetura

Low‑code funciona… até o dia em que você precisa entender o que realmente está acontecendo lá dentro. Como arquiteto nas trincheiras, já vi mais projetos ruírem por dependência cega em plataformas mágicas do que por falta de framework moderno. Neste artigo, vou direto à dor: o low‑code vende eficiência, mas frequentemente entrega dívida técnica embrulhada para presente. Hora de desmontar o hype e mostrar onde ele realmente funciona — e onde vira armadilha arquitetural.

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 *