¿Qué es la normalización de datos?

La normalización de datos es el proceso de estructurar una base de datos para mejorar la eficacia, mantener la coherencia y eliminar los datos redundantes. La idea es sencilla: dividir los datos en tablas más pequeñas y relacionadas entre sí para minimizar las repeticiones y simplificar las actualizaciones. Siguiendo una serie de reglas denominadas "formas normales", la normalización ayuda a evitar la redundancia y a mantener la coherencia en una base de datos.

Ejemplo de datos normalizados

Imagine que gestiona la base de datos de una universidad. Necesita hacer un seguimiento de los estudiantes, los cursos que realizan y sus matrículas. Así es como organizarías esos datos en una tabla normalizada:

Estudiantes mesa:

StudentID Nombre Correo electrónico Mayor
1 Alice Johnson alice@univ.edu Informática
2 John Smith john@univ.edu Matemáticas

Cursos mesa:

CourseID NombreCurso Créditos
CS101 Introducción a la informática 3
MATH101 Cálculo I 4

Inscripciones tabla (vincula estudiantes y cursos): 

EnrollmentID StudentID CourseID Semestre
1 1 CS101 Otoño 2025
2 2 MATH101 Otoño 2025

Imagina que actualizas la dirección de correo electrónico de Alicia en una base de datos. Sin normalización, tendrías que cambiar su dirección de correo electrónico en todos los lugares en los que aparece, un proceso potencialmente propenso a errores. Con la normalización, los cambios aparecen en todas partes cuando Alice actualiza su dirección de correo electrónico en la base de datos. Estudiantes tabla. Esto mantiene la coherencia de los datos en toda la base de datos.

¿Qué es la desnormalización de datos?

La desnormalización de datos introduce intencionadamente redundancia en una base de datos para mejorar el rendimiento de lectura, acelerar las consultas y reducir la carga computacional. A diferencia de la normalización, que estructura los datos para eliminar la duplicación y mantener la coherencia, la desnormalización reduce la necesidad de uniones complejas almacenando los datos relacionados en una única tabla o documento.

Ejemplo de datos desnormalizados

¿Recuerdas la base de datos universitaria que hicimos antes? Aquí tienes una versión desnormalizada de los datos:

EnrollmentID Estudiante

ID

Nombre Correo electrónico Mayor CourseID NombreCurso Créditos Semestre
1 1 Alice Johnson alice@univ.edu Informática CS101 Introducción a la informática 3 Otoño 2025
2 2 John Smith john@univ.edu Matemáticas MATH101 Cálculo I 4 Otoño 2025

La información de Alice aparece junto a cada curso en el que está matriculada. Del mismo modo, los detalles del curso como CourseName y Credits se repiten para cada estudiante, lo que hace que este formulario sea adecuado para operaciones de lectura pesada como la visualización de las inscripciones de cursos para un estudiante en un tablero de instrumentos.

Datos normalizados frente a desnormalizados

He aquí un desglose conciso de las diferencias entre datos normalizados y desnormalizados:

Aspecto Datos normalizados Datos desnormalizados
Estructura Organizados en múltiples tablas relacionadas. Combinado en menos tablas con redundancia.
Redundancia Redundancia mínima. Alta redundancia.
Complejidad de la consulta Requiere JOINs para las consultas. Consultas simplificadas con menos uniones.
Almacenamiento Ahorra espacio al evitar duplicaciones. Requiere más almacenamiento debido a la redundancia.
Rendimiento Optimizado para operaciones de escritura. Optimizado para operaciones de lectura.
Coherencia Mayor facilidad para mantener la integridad de los datos. Mayor riesgo de incoherencias en los datos.

Cómo normalizar los datos

Supongamos que eres responsable de diseñar un esquema de base de datos para una empresa de reparto de pizzas. Tu diseño inicial puede tener este aspecto:

OrderID NombreCliente Dirección Teléfono DetallesPizza PrecioTotal FechaEntrega
1 John Smith 123 Elm St. 123-456-7892 Pepperoni, grande; Margherita, mediano $25.00 2025-01-15
2 Alice Johnson 456 Oak St. 987-654-3211 Veggie, Pequeño $12.00 2025-01-15

Repasemos cómo normalizar este esquema paso a paso haciéndolo pasar por varias formas de normalización.

Formularios de normalización de bases de datos

Primera forma normal (1NF)

Para que una base de datos esté en primera forma normal, cada valor de cada columna de cada tabla debe ser atómico, es decir, cada valor sólo debe representar una cosa. Si modificamos el esquema de nuestro servicio de reparto de pizzas para que se ajuste a 1NF, tendrá el siguiente aspecto:

OrderID NombreCliente Dirección Teléfono TipoPizza Talla Precio FechaEntrega
1 John Smith 123 Elm St. 123-456-7892 Pepperoni Grande 15.00 2025-01-15
1 John Smith 123 Elm St. 123-456-7892 Margherita Medio 10.00 2025-01-15
2 Alice Johnson 456 Oak St. 987-654-3211 Veggie Pequeño 12.00 2025-01-15

Observe que hemos dividido la columna PizzaDetails en dos columnas separadas: TipoPizza y Tamaño. Esto garantiza que todas las columnas almacenan valores atómicos.

Segunda forma normal (2NF)

Una tabla está en segunda forma normal si cada atributo no clave depende de la clave primaria, eliminando las dependencias parciales. Para asegurarnos de que nuestro esquema de pizza se ajusta a la 2NF, tenemos que dividir la tabla en dos para eliminarlas.

Clientes y pedidos mesa:

OrderID NombreCliente Dirección Teléfono FechaEntrega
1 John Smith 123 Elm St. 123-456-7892 2025-01-15
2 Alice Johnson 456 Oak St. 987-654-3211 2025-01-15

Detalles de la pizza mesa:

PizzaID OrderID TipoPizza Talla Precio
1 1 Pepperoni Grande 15.00
2 1 Margherita Medio 10.00
3 2 Veggie Pequeño 12.00

Tercera forma normal (3NF)

Se dice que una tabla está en tercera forma normal si ya está en 2NF y todos los atributos no clave dependen sólo de la clave primaria, no de otros atributos no clave. La 3NF elimina las relaciones indirectas para garantizar que la tabla esté bien estructurada y evitar la redundancia.

Para convertir nuestro esquema de pizza a la tercera forma normal, necesitamos:

    • Traslade los datos reutilizables a tablas separadas.
    • Crear un Tipos de pizza tabla para información sobre pizzas, como tipo y tamaño.

Clientes y pedidos mesa:

OrderID CustomerID FechaEntrega
1 1 2025-01-15
2 2 2025-01-15

Clientes mesa:

CustomerID NombreCliente Dirección Teléfono
1 John Smith 123 Elm St. 123-456-7892
2 Alice Johnson 456 Oak St. 987-654-3211

Detalles del pedido mesa:

OrderDetailID OrderID PizzaID
1 1 1
2 1 2
3 2 3

Tipos de pizza mesa:

PizzaID TipoPizza Talla Precio
1 Pepperoni Grande 15.00
2 Margherita Medio 10.00
3 Veggie Pequeño 12.00

En Juramento 3NF es también un buen resumen de las tres primeras formas normales:

"Cada atributo no clave debe proporcionar un hecho sobre la clave, toda la clave, y nada más que la clave, así que ayúdame Codd".

Cómo desnormalizar los datos

La desnormalización de datos suele implicar la duplicación de datos en varias tablas o bases de datos. Este enfoque puede aplicarse mediante:

  1. Identificación de cuellos de botella en el rendimiento
    • Analizar las consultas lentas que implican múltiples uniones.
    • Identificar las tablas que se unen con frecuencia en operaciones de lectura intensiva.
    • Utilice herramientas de creación de perfiles de consulta para medir el impacto en el rendimiento.
  1. Añadir datos redundantes
    • Duplique columnas de acceso frecuente de tablas relacionadas en una única tabla.
    • Almacene los valores calculados (por ejemplo, las ventas totales y el último inicio de sesión) en lugar de calcularlos sobre la marcha.
  1. Fusión de tablas (datos pre-join)
    • Combine tablas normalizadas que se unen con frecuencia para reducir los tiempos de búsqueda.
    • Por ejemplo: En lugar de almacenar Clientes y Detalles del pedido por separado y uniéndolos, almacenar los datos de los clientes directamente en el Detalles del pedido mesa.
  1. Creación de tablas agregadas
    • Almacene resúmenes o rollups precalculados para evitar cálculos costosos.
    • Por ejemplo: En lugar de calcular las ventas totales por mes de forma dinámica, mantenga un Ventas mensuales mesa.
  1. Utilizar almacenes de valores clave o de documentos
  1. Desnormalización selectiva
    • Equilibrio entre redundancia y mantenibilidad.
    • Sólo desnormalice cuando las ganancias de rendimiento justifiquen la complejidad potencial.
  1. Implementación de disparadores o actualizaciones por lotes

Ejemplo de desnormalización

Antes (datos normalizados)

Clientes mesa:

CustomerID NombreCliente Teléfono
1 John Smith 123-456-7892

Detalles del pedido mesa:

OrderID CustomerID Precio
1 1 25.00

Después (datos desnormalizados)

Detalles del pedido tabla (incluye datos del cliente):

OrderID CustomerID NombreCliente Teléfono Precio
1 1 John Smith 123-456-7892 $25.00

Esto elimina la necesidad de una unión al recuperar la información de los clientes con sus pedidos.

Casos prácticos

Normalización de datos

Sistemas bancarios:

    • Se utiliza para almacenar cuentas de clientes, transacciones y detalles de préstamos para mantener la precisión.
    • Los sistemas bancarios utilizan la normalización para evitar la duplicación de datos financieros sensibles y garantizar que las actualizaciones (por ejemplo, el cambio de dirección de los clientes) se propaguen correctamente.

Sistemas sanitarios:

    • Se utiliza para almacenar datos de pacientes, historiales médicos y citas en tablas independientes.
    • Los sistemas sanitarios confían en la normalización para reducir la duplicación de datos y garantizar la exactitud de la información de los pacientes, lo que resulta esencial para mantener el cumplimiento de la HIPAA.

Aplicaciones de comercio electrónico:

    • Se utiliza para almacenar productos, pedidos, clientes e inventario.
    • Las aplicaciones de comercio electrónico utilizan la normalización para garantizar el correcto seguimiento del inventario y la exactitud de los pedidos de los clientes.

Desnormalización de datos

Datos almacenamiento:

    • Se utiliza en sistemas de inteligencia empresarial para consolidar datos de ventas, marketing y operaciones.
    • Los almacenes de datos utilizan la desnormalización para agilizar la generación de informes y la presentación de cuadros de mando, ya que los datos agregados reducen la necesidad de realizar uniones en tiempo de ejecución.

Plataformas de medios sociales:

    • Se utiliza para almacenar las publicaciones de los usuarios, los "me gusta", los comentarios y los datos de los seguidores.
    • Las plataformas de medios sociales utilizan la desnormalización para mejorar el rendimiento de la generación de feeds almacenando datos preagregados o redundantes, lo que reduce la complejidad de las consultas.

Sistemas de distribución de contenidos (CDN):

    • Utilizado por los servicios de streaming para almacenar metadatos de vídeo e historial de visionado de los usuarios.
    • Las CDN se basan en la desnormalización para garantizar una rápida recuperación de las recomendaciones y el historial de visitas. durante los picos de carga.

Aplicaciones de juego:

    • Se utiliza para almacenar perfiles de jugadores, logros y eventos del juego en estructuras simplificadas.
    • Sistemas de juego utilizan la desnormalización para recuperar datos de baja latencia y mejorar la experiencia de juego en tiempo real.

Ventajas y retos 

Ventajas de la normalización de datos

    • Elimina la redundancia de datos: La normalización reduce la duplicación de datos, lo que permite un uso eficiente del almacenamiento y minimiza las incoherencias.
    • Garantiza la integridad y coherencia de los datos: Como los datos se almacenan de forma estructurada y las relaciones se mantienen mediante claves, las actualizaciones y eliminaciones son más coherentes en toda la base de datos.
    • Reduce las anomalías de actualización: Con menos datos redundantes, los cambios (como la actualización de una dirección) sólo tienen que hacerse en un lugar, lo que reduce el riesgo de actualizaciones incoherentes.
    • Mejora la seguridad de los datos: La información sensible puede almacenarse en tablas separadas con acceso restringido, lo que mejora las medidas de seguridad.
    • Mejora la mantenibilidad: Una base de datos bien estructurada es más fácil de modificar, ampliar y escalar con el tiempo, ya que los cambios se localizan en tablas específicas en lugar de repartirse entre datos redundantes.
    • Optimiza el rendimiento transaccional: Las bases de datos normalizadas garantizan una gestión eficaz de las transacciones en los sistemas que requieren inserciones, actualizaciones y supresiones frecuentes (sistemas OLTP).
    • Aplica la integridad referencial: Las claves foráneas garantizan que las relaciones entre tablas se mantengan correctamente, evitando registros huérfanos o no válidos.

Retos de la normalización de datos

    • Consultas de lectura lenta: Las bases de datos normalizadas suelen requerir múltiples uniones para recuperar datos relacionados, lo que ralentiza el rendimiento, especialmente en aplicaciones de lectura intensiva.
    • Mayor complejidad de las consultas: La recuperación de datos requiere escribir consultas SQL complejas con múltiples uniones.
    • Mayor uso de CPU y memoria: Cada operación de unión requiere un procesamiento adicional, lo que puede sobrecargar los recursos de la base de datos.
    • Más difícil de escalar horizontalmente: Las bases de datos normalizadas funcionan bien en entornos de un solo nodo, pero pueden no ser eficientes en entornos de un solo nodo. arquitecturas distribuidas.
    • Mayor esfuerzo de desarrollo y mantenimiento: Diseñar un esquema bien normalizado requiere una planificación cuidadosa y experiencia (sobre todo para aplicaciones de gran tamaño).
    • Retos en materia de informes y análisis: Las bases de datos normalizadas no son ideales para los sistemas de procesamiento analítico en línea (OLAP) porque la agregación de datos para los informes suele requerir uniones y cálculos costosos.
    • Restricciones de integridad de los datos: La aplicación de restricciones de clave externa y reglas de normalización a veces puede ralentizar las inserciones y actualizaciones masivas.

Ventajas de la desnormalización de datos

    • Mejora del rendimiento de lectura: La desnormalización acelera las consultas de lectura al reducir el número de uniones necesarias para recuperar datos, lo que resulta especialmente útil en aplicaciones de lectura intensiva.
    • Reducción de la complejidad de las consultas: Al estar los datos preunidos o duplicados, las consultas se simplifican, lo que facilita a los desarrolladores la escritura y el mantenimiento de las consultas.
    • Informes y agregación más rápidos: Las estructuras desnormalizadas son muy adecuadas para tareas analíticas y de elaboración de informes, en las que es necesario acceder rápidamente a los datos de forma masiva.
    • Mejor rendimiento de la caché: Almacenando datos redundantes en un único documento o tabla, cachés puede servir con mayor eficacia registros completos y reducir la carga de la base de datos.
    • Junta inferior por encima: La desnormalización minimiza el uso de CPU y memoria al reducir la necesidad de uniones.
    • Escalabilidad: Los datos desnormalizados suelen ser más adecuados para bases de datos distribuidas (por ejemplo, bases de datos NoSQL) que priorizan escala horizontal y rápida recuperación de datos.
    • Indexación más rápida: Como los datos relacionados se almacenan juntos, los índices pueden ser más eficaces y agilizar las búsquedas.

Desafíos de la desnormalización de datos

    • Mayor redundancia de datos: Los datos se duplican en varias tablas o documentos, lo que aumenta las necesidades de almacenamiento.
    • Riesgos de incoherencia de los datos: Dado que la desnormalización implica datos redundantes, es crucial acordarse de aplicar los cambios en todas las copias de forma coherente.
    • Mayor sobrecarga de actualización y eliminación: Para actualizar o eliminar registros es necesario modificar varias instancias de los mismos datos.
    • Más difícil de mantener y escalar: Los cambios de esquema requieren la actualización de varias ubicaciones, lo que aumenta el esfuerzo de mantenimiento.
    • Operaciones de escritura más complejas: Las escrituras se encarecen porque las actualizaciones deben aplicarse a varios lugares.
    • Aumento de los costes de almacenamiento: Almacenar datos redundantes conlleva un mayor uso del disco, lo que puede resultar costoso para aplicaciones de gran tamaño.
    • Resulta más difícil imponer restricciones: La desnormalización suele reducir el uso de claves externas, lo que dificulta el cumplimiento de la integridad referencial.

Principales conclusiones y recursos

El uso de la normalización o desnormalización de datos depende de las necesidades específicas de su aplicación. La normalización garantiza la integridad de los datos, su coherencia y la eficacia de las actualizaciones, por lo que es ideal para sistemas transaccionales (OLTP) en los que es crucial minimizar la redundancia. Por otro lado, la desnormalización mejora el rendimiento de las consultas y la eficiencia de la lectura, por lo que es muy adecuada para cargas de trabajo analíticas (OLAP), informes y bases de datos NoSQL. En última instancia, entender su patrones de uso de la base de datosLa mejor manera de determinar cuál es el mejor enfoque para su sistema es tener en cuenta sus necesidades de escalabilidad y sus objetivos de rendimiento.

Para saber más sobre la gestión de datos, consulte los recursos siguientes:



Autor

Publicado por Tim Rottach, Director de Marketing de Línea de Productos

Tim Rottach es Director de Marketing de Línea de Productos en Couchbase.

Dejar una respuesta