¿Qué es la normalización de bases de datos?

La normalización de bases de datos es un proceso que se usa en el diseño de bases de datos para organizar los datos de manera eficiente. Puede ayudar a reducir la redundancia de datos (datos duplicados) y mejorar la integridad de los datos (exactitud y coherencia de los datos). Es como organizar un archivador desordenado: en lugar de tener la misma información en varios lugares, colocas cada pieza de información en un lugar y luego usas un sistema de referencias cruzadas para conectarlas.

¿A qué nos referimos con "base de datos"?

Una base de datos es simplemente una colección organizada de datos, que generalmente se almacena de forma electrónica en un sistema informático. Piensa en ella como un gabinete de archivos digital. En lugar de cajones y carpetas de papel, usas tablas estructuradas (o cualquier otro método de organización de datos) que te permiten almacenar, administrar y recuperar información de forma rápida y eficiente.

Las empresas modernas usan bases de datos para hacer un seguimiento de todo, desde los pedidos de los clientes y los niveles de inventario hasta los detalles de las cuentas de los usuarios y las transacciones financieras, y muchas eligen ejecutar sus bases de datos en la nube.

¿Qué es una base de datos relacional?

Una base de datos relacional organiza los datos en una o más tablas de columnas y filas. Se llama “relacional” porque establece relaciones específicas y predefinidas entre estas tablas. La idea principal es dividir la información compleja en partes más pequeñas y manejables, lo que evita la necesidad de almacenar la misma información varias veces.

Ejemplo de normalización de bases de datos

Imagina una base de datos simple para una tienda en línea. Tendrías una tabla para los clientes (nombre, dirección, teléfono) y otra para los pedidos (fecha, total). Cuando un cliente hace un pedido, no tienes que copiar toda su dirección en la tabla Orders; solo usas su ID de cliente único para conectar el pedido con los detalles completos del cliente.

Si el cliente se muda y cambia su dirección, solo tienes que actualizarla en un lugar: la tabla Customers. Si lo copiaste en 100 registros de pedidos, tendrías que actualizar los 100, lo que probablemente generaría datos desordenados y no coherentes. Este problema de tener que actualizar la información en muchos lugares se denomina anomalía de datos.

Sin embargo, quieres copiar el precio de un producto en el registro del pedido en el momento de la compra. ¿Por qué? Porque el precio del producto podría cambiar en el futuro en tu tabla principal de Productos, pero el registro del pedido debe reflejar el precio que el cliente pagó realmente en la fecha de la transacción. En este caso, copiar y congelar los datos (o crear una instantánea) es la opción de diseño correcta.

La normalización es el proceso sistemático de diseñar tus tablas relacionales y las relaciones entre ellas para eliminar estas incoherencias y ahorrar espacio de almacenamiento. Las "formas normales" (1FN, 2FN, 3FN, etc.) son una serie de reglas prescriptivas. Son una solución para la redundancia de datos y las anomalías de datos que crea, lo que proporciona una ruta clara para organizar los datos de manera eficiente y confiable en función de las necesidades de tu aplicación.

Diferentes formas normales (1FN, 2FN, 3FN)

La normalización es una guía paso a paso para estructurar tus tablas, en la que cada paso (o "forma") se basa en el anterior. Para estar en la tercera forma normal (3NF), una tabla debe pasar las pruebas de 1NF y 2NF. La mayoría de las bases de datos operativas están diseñadas para cumplir al menos con el estándar 3NF, ya que puede proporcionar un equilibrio entre la integridad de los datos y el rendimiento.

La regla de la 1FN se trata de asegurarse de que las tablas estén estructuradas correctamente desde el principio, como configurar una hoja de cálculo limpia.

Regla: Cada columna debe tener un nombre único y cada celda debe contener solo un valor único e indivisible.

Qué soluciona: No puedes colocar una lista de elementos en una sola celda. Por ejemplo, en una tabla de "Pedidos", no puedes enumerar "Leche, huevos, pan" en una celda de la columna "Productos pedidos". En cambio, cada producto debe tener su propia fila, lo que garantiza que los datos se puedan buscar y administrar.

La regla de la 2ª forma normal solo se aplica si tu tabla usa una clave compuesta, es decir, una clave primaria formada por dos o más columnas combinadas (como un ID de pedido más un ID de producto). Una clave primaria es la columna o el conjunto de columnas cuyos valores identifican de manera única cada fila de una tabla. Una columna sin clave es cualquier columna que no forma parte de la clave primaria.

Regla: Una tabla ya debe estar en 1FN, y todas las columnas que no son clave deben depender de la clave compuesta completa, no solo de una parte de ella.

Qué resuelve: Solo debes almacenar datos donde realmente corresponde. Si tienes una tabla en la que la clave es (OrderID, ProductID), una columna como Product Price no debería estar en ella porque el precio solo depende del ProductID, no del OrderID. La solución es mover el ProductID y el Product Price a una tabla de Products separada, en la que el ProductID es la clave primaria única. Esto evita que el precio del producto se repita innecesariamente en cada pedido que lo contenga.

La regla 3NF es el objetivo más común para el diseño de bases de datos y se trata de quitar las relaciones indirectas entre los datos.

Regla: Una tabla debe estar en 2FN y las columnas que no son clave deben depender solo de la clave primaria, no de ninguna otra columna que no sea clave.

Qué resuelve: Evita que un dato no clave determine el valor de otro dato no clave. Considera una tabla "Employees" que almacena un ID de oficina (una columna que no es clave) y la ubicación de la oficina (otra columna que no es clave). La ubicación de la oficina se determina por el ID de la oficina, no por el ID del empleado (la clave principal de la tabla). Este vínculo indirecto es una dependencia transitiva. Para corregirlo, creas una nueva tabla de Offices que solo contiene el ID de la oficina y la ubicación de la oficina, y luego vinculas las dos tablas con el ID de la oficina. Esto garantiza que solo tengas que actualizar la ubicación de la oficina en un lugar si alguna vez cambia.

Normalización frente a desnormalización

Función

Normalización

Desnormalización

Objetivo principal

Reduce la redundancia y mejora la integridad de los datos.

Mejora en el rendimiento de lectura

Ejemplos de casos de uso

Bases de datos transaccionales (actualizaciones frecuentes).

Bases de datos analíticas y almacenes de datos (lecturas frecuentes); datos que no deben cambiar después de la creación (por ejemplo, una instantánea de un contrato o una factura).

Resultado

Más tablas, menos duplicación de datos.

Menos tablas, duplicación intencional de datos

Función

Normalización

Desnormalización

Objetivo principal

Reduce la redundancia y mejora la integridad de los datos.

Mejora en el rendimiento de lectura

Ejemplos de casos de uso

Bases de datos transaccionales (actualizaciones frecuentes).

Bases de datos analíticas y almacenes de datos (lecturas frecuentes); datos que no deben cambiar después de la creación (por ejemplo, una instantánea de un contrato o una factura).

Resultado

Más tablas, menos duplicación de datos.

Menos tablas, duplicación intencional de datos

La desnormalización es la adición intencional de datos redundantes a una base de datos, a menudo para mejorar el rendimiento de las consultas para informes o análisis. Es un intercambio: sacrificas algo de integridad y aumentas el espacio de almacenamiento para una recuperación de datos más rápida. Sin embargo, en situaciones como un contrato legal, es posible que quieras esta redundancia intencional para crear una instantánea de los datos que sea independiente de los cambios futuros. Esto garantiza que los términos, nombres y precios registrados en el momento de la firma del contrato permanezcan fijos y disponibles de forma permanente, incluso si los datos principales del cliente o del producto se actualizan más tarde.

¿Por qué es importante la normalización de bases de datos?

La normalización hace que las bases de datos relacionales (como Cloud SQL o Spanner) sean más eficientes, confiables y fáciles de administrar usando "formas normales" para estructurar los datos y evitar problemas comunes. 

Reducir la redundancia de datos

Almacenar cada dato, como la dirección de un cliente, en un solo lugar para ahorrar espacio de almacenamiento y aumentar la eficiencia.

Eliminar anomalías en los datos

Evita las incoherencias que pueden ocurrir con datos redundantes, como anomalías de inserción, borrado o actualización.

Mejora la integridad de los datos

Garantiza que cada dato sea correcto y se almacene en una sola ubicación para que los datos sean exactos y coherentes en toda la base de datos.

Si tu prioridad es un rendimiento muy alto, una escala masiva o un esquema flexible, elige una base de datos no relacional (NoSQL), como Bigtable o Firestore. Las bases de datos NoSQL se diseñan con principios diferentes que incluyen intencionalmente la redundancia de datos para optimizar las lecturas rápidas y la disponibilidad.

Resuelve tus desafíos más difíciles con Google Cloud

Los clientes nuevos obtienen $300 en créditos gratuitos que pueden usar en Google Cloud.

Da el siguiente paso

Comienza a desarrollar en Google Cloud con el crédito gratis de $300 y los más de 20 productos del nivel Siempre gratuito.

Google Cloud