2.2. Quando desnormalizar (ou não normalizar)?

Há algumas situações em que é interessante desnormalizar um modelo excessivamente modelado, ou não normalizar determinadas tabelas. O que motiva essa estratégia são dois fatores que já comentamos anteriormente: performance e simplicidade.

Imagine essa situação: uma ou mais tabelas que possuam cerca de cinco campos numéricos, e outros 5 campos que são resultados de uma série de cálculos complexos com esses valores. Agora suponha que, a todo momento, os usuários realizem consultas em todos ou vários desses registros. Nesse cenário você tem duas alternativas:

  1. Manter o modelo normalizado ao máximo fará que em toda consulta dos usuários os cálculos sejam refeitos, o que pode consumir tanto processamento que o sistema fique muito lento.
  2. Realizar o cálculo uma vez no momento do cadastro das informações e armazenar os resultados, dessa forma, aos usuários realizarem as consultas, o SGBD irá apenas ler dados e resultados armazenados, não haverá “desperdício de tempo” realizando os cálculos.

Um cenário assim, que envolva centenas ou milhares de cálculos, pode significar o sucesso ou fracasso (por travamento dos cálculos) de um sistema de informação. Dessa forma, todo modelo de dados não deve ser analisado somente sobre as diretrizes e regras de normalização, mas principalmente pelos requisitos dos usuários, que poderão fornecer subsídios essenciais para manter uma parte do modelo não normalizada.

Modelos de dados do tipo Data Warehouse são exemplos claros de modelos extremamente desnormalizados para fins de ganho de performance. Falaremos sobre eles em outro momento.

Copyright © 2014 AIEC.