Lory desenvolveu um sistema de e-commerce. Inicialmente, a aplicação usava um modelo normalizado com tabelas para Ordem, Pedido, Cliente e NotaFiscal. Tudo ia bem, mas conforme o número de pedidos crescia, os problemas começaram a aparecer:
Consultas lentas em horários de pico.
Relatórios demorados, afetando as decisões estratégicas.
Sobrecarregamento do banco de dados, prejudicando integrações como o ERP.
A Desnormalização como Solução
Lory percebeu que muitas das consultas mais lentas envolviam joins complexos entre tabelas grandes. Por exemplo, um relatório básico de pedidos por cliente demorava vários minutos:
sql
Copiar código
SELECT
c.ClienteID,
c.Nome AS Cliente,
COUNT(p.PedidoID) AS TotalPedidos,
SUM(o.Quantidade * o.Preco) AS ValorTotal,
MAX(nf.DataEmissao) AS UltimaNotaFiscal
FROM Cliente c
JOIN Pedido p ON c.ClienteID = p.ClienteID
JOIN Ordem o ON p.PedidoID = o.PedidoID
JOIN NotaFiscal nf ON p.PedidoID = nf.PedidoID
GROUP BY c.ClienteID, c.Nome;
Lory decidiu desnormalizar os dados, criando uma tabela que consolidava as informações frequentemente consultadas:
sql
Copiar código
CREATE TABLE ResumoPedidos (
ClienteID INT,
Nome VARCHAR(100),
TotalPedidos INT,
ValorTotal DECIMAL(18, 2),
UltimaNotaFiscal DATE
);
E preencheu os dados com uma query agendada periodicamente:
sql
Copiar código
INSERT INTO ResumoPedidos
SELECT
c.ClienteID,
c.Nome,
COUNT(p.PedidoID),
SUM(o.Quantidade * o.Preco),
MAX(nf.DataEmissao)
FROM Cliente c
JOIN Pedido p ON c.ClienteID = p.ClienteID
JOIN Ordem o ON p.PedidoID = o.PedidoID
JOIN NotaFiscal nf ON p.PedidoID = nf.PedidoID
GROUP BY c.ClienteID, c.Nome;
Resultados da Desnormalização
Consultas mais rápidas: Dados consolidados reduziram o tempo de execução de queries de minutos para segundos.
Relatórios instantâneos: Relatórios complexos tornaram-se viáveis em tempo real.
Integração facilitada: O ERP agora consumia dados da tabela desnormalizada, diminuindo sua dependência de joins pesados.
Limitações da Desnormalização
Apesar das melhorias, Lory enfrentou alguns desafios:
Manutenção Complexa: Alterar os dados exigia sincronizar tabelas normalizadas e desnormalizadas.
Armazenamento Adicional: Dados duplicados aumentaram o consumo de espaço.
Dados Desatualizados: Se o processo de atualização falhasse, os relatórios poderiam apresentar informações inconsistentes.
SOCIAL SHARE CARD GENERATOR