Denormalização é uma abordagem para acelerar o desempenho da recuperação de dados orientada para a leitura numa base de dados relacional, onde o administrador da base de dados adiciona selectivamente instâncias específicas de dados redundantes após a estrutura de dados ter sido normalizada. Uma base de dados desnormalizada não deve ser confundida com uma base de dados que nunca foi normalizada.
Usando a normalização em SQL, uma base de dados armazenará tipos de dados diferentes mas relacionados em tabelas lógicas separadas, chamadas relações. Quando uma consulta combina dados de várias tabelas numa única tabela de resultados, é chamada de join. O desempenho de tal join face a consultas complexas é muitas vezes a ocasião para o administrador explorar a alternativa de desnormalização.
Normalização vs. desnormalização
Múltiplas uniões na mesma consulta podem ter um impacto negativo no desempenho. À medida que o número de tabelas geradas pelo desenho aumenta, a complexidade das junções pode criar uma sobrecarga informática inaceitável. As junções podem ser intensivas em E/S, e a execução de consultas relacionadas pode consumir uma quantidade desordenada de tempo, por vezes até mesmo aplicações que colidem.
Com a desnormalização da base de dados, os designers de dados cosem tabelas díspares. Isto acontece à custa de uma série de redundâncias de dados, mas pode ser útil para reduzir o número de junções, e assim acelerar as operações. A contrapartida para o desenhador de bases de dados reside na criação de sistemas de bases de dados com menos tabelas grandes ou mais tabelas pequenas, com base em recursos e requisitos de interactividade de consultas. O desenhador deve também pesar isto contra problemas de redundância de dados, especialmente a possibilidade de maior inconsistência de dados.
Após a duplicação de dados, o desenhador da base de dados deve ter em conta a forma como as múltiplas instâncias dos dados serão mantidas. Uma forma de desnormalizar uma base de dados é permitir que o sistema de gestão de bases de dados armazene dados redundantes em disco. Isto tem a vantagem adicional de assegurar a consistência das cópias redundantes. Como os custos do disco têm diminuído ao longo dos anos, tais abordagens têm crescido em popularidade. Os fabricantes de bases de dados relacionais têm melhorado as bases de dados para assegurar uma melhor consistência quando se emprega a desnormalização.
Concepção de dados lógicos
Uma das abordagens à desnormalização é a desnormalização da concepção de dados lógica real. Isto pode conduzir rapidamente a dados inconsistentes. Regras chamadas restrições podem ser usadas para especificar como as cópias redundantes de informação são sincronizadas, mas aumentam a complexidade da concepção da base de dados e também correm o risco de ter impacto no desempenho de escrita.
Casos comuns em que a desnormalização pode ser efectivamente utilizada incluem tabelas pré-juntas que embalam dados para usos comuns, tabelas divididas à medida de grupos de utilizadores específicos e tabelas combinadas que consolidam relações um-a-um e um-a-muitos.
Desnormalização em armazenamento de dados e NoSQL
Em armazéns de dados relacionais, a desnormalização desempenha frequentemente um papel importante. Isto é particularmente verdadeiro em bases de dados dimensionais, tal como prescrito pelo influente arquitecto e autor Ralph Kimball. A sua ênfase em estruturas dimensionais que utilizam a desnormalização destina-se a acelerar a execução de consultas, o que pode ser especialmente importante em armazéns de dados utilizados para inteligência empresarial. A desnormalização ajuda os administradores de armazéns de dados a assegurar desempenhos mais previsíveis.
Exemplos de desnormalização vão além da desnormalização em SQL. Um tipo de desnormalização também tem utilização fora das bases de dados relacionais. A técnica é frequentemente empregada em aplicações baseadas em bases de dados NoSQL, particularmente em bases de dados NoSQL orientadas para documentação. Tais bases de dados estão frequentemente subjacentes a arquitecturas de gestão de conteúdos para páginas de perfil web que beneficiam de optimizações de leitura. O objectivo da desnormalização neste contexto é reduzir a quantidade de tempo necessário para a montagem de páginas que incluem dados de perfil díspares. Em tais casos, a manutenção da consistência dos dados torna-se a tarefa da aplicação e, por sua vez, do criador da aplicação.