La desnormalización es un enfoque para acelerar el rendimiento de la recuperación de datos orientados a la lectura en una base de datos relacional, donde el administrador de la base de datos añade selectivamente instancias específicas de datos redundantes después de que la estructura de datos haya sido normalizada. Una base de datos desnormalizada no debe confundirse con una base de datos que nunca ha sido normalizada.
Usando la normalización en SQL, una base de datos almacenará tipos de datos diferentes pero relacionados en tablas lógicas separadas, llamadas relaciones. Cuando una consulta combina datos de varias tablas en una única tabla de resultados, se denomina join. El rendimiento de dicho join ante consultas complejas suele ser la ocasión para que el administrador explore la alternativa de la desnormalización.
Normalización vs. desnormalización
Múltiples joins en la misma consulta pueden tener un impacto negativo en el rendimiento. A medida que aumenta el número de tablas generadas por el diseño, la complejidad de las uniones puede crear una sobrecarga de cálculo que es inaceptable. Las uniones pueden ser intensivas en E/S, y la ejecución de las consultas relacionadas puede consumir una cantidad de tiempo desmesurada, llegando incluso a colapsar las aplicaciones.
Con la desnormalización de la base de datos, los diseñadores de datos cosen tablas dispares. Esto ocurre a costa de una serie de redundancias de datos, pero puede ser útil para reducir el número de uniones y, por tanto, acelerar las operaciones. Para el diseñador de bases de datos, el compromiso consiste en crear sistemas de bases de datos que tengan menos tablas grandes o más tablas pequeñas, en función de los recursos y los requisitos de interactividad de las consultas. El diseñador también debe sopesar esto frente a los problemas de redundancia de datos, especialmente la posibilidad de que aumente la inconsistencia de los datos.
Después de que los datos se hayan duplicado, el diseñador de la base de datos debe tener en cuenta cómo se mantendrán las múltiples instancias de los datos. Una forma de desnormalizar una base de datos es permitir que el sistema de gestión de bases de datos almacene los datos redundantes en el disco. Esto tiene la ventaja añadida de garantizar la consistencia de las copias redundantes. Como los costes de los discos han disminuido a lo largo de los años, estos enfoques se han hecho más populares. Los fabricantes de bases de datos relacionales han mejorado las bases de datos para asegurar una mejor consistencia cuando se emplea la desnormalización.
Diseño de datos lógicos
Una de las aproximaciones a la desnormalización es desnormalizar el diseño real de los datos lógicos. Esto puede conducir rápidamente a datos inconsistentes. Se pueden utilizar reglas llamadas restricciones para especificar cómo se sincronizan las copias redundantes de la información, pero aumentan la complejidad del diseño de la base de datos y también corren el riesgo de afectar al rendimiento de escritura.
Los casos comunes en los que la desnormalización puede utilizarse de forma efectiva incluyen tablas pre-unidas que empaquetan datos para usos comunes, tablas divididas adaptadas a grupos de usuarios específicos y tablas combinadas que consolidan relaciones uno a uno y uno a muchos.
Denormalización en almacenes de datos y NoSQL
En los almacenes de datos relacionales, la desnormalización a menudo juega un papel importante. Esto es especialmente cierto en las bases de datos dimensionales, tal y como prescribe el influyente arquitecto y autor de almacenes de datos Ralph Kimball. Su énfasis en las estructuras dimensionales que utilizan la desnormalización pretende acelerar la ejecución de las consultas, lo que puede ser especialmente importante en los almacenes de datos utilizados para la inteligencia empresarial. La desnormalización ayuda a los administradores de almacenes de datos a garantizar un rendimiento más predecible.
Los ejemplos de desnormalización van más allá de la desnormalización en SQL. Un tipo de desnormalización también tiene uso fuera de las bases de datos relacionales. La técnica se emplea a menudo en aplicaciones basadas en bases de datos NoSQL, particularmente en bases de datos NoSQL orientadas a documentos. Dichas bases de datos suelen ser la base de arquitecturas de gestión de contenidos para páginas de perfiles web que se benefician de las optimizaciones de lectura. El objetivo de la desnormalización en este contexto es reducir la cantidad de tiempo necesario para ensamblar páginas que comprenden datos de perfiles dispares. En estos casos, mantener la consistencia de los datos se convierte en el trabajo de la aplicación y, a su vez, del desarrollador de la misma.