¿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 forma eficiente. Puede ayudar a reducir la redundancia de datos (datos duplicados) y mejorar la integridad de los datos (precisión y coherencia de los datos). Es como organizar una página de almacenamiento de archivos desordenada: en lugar de tener la misma información en varios sitios, pones cada dato en un lugar y luego usas un sistema de referencias cruzadas para conectarlos.

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

Una base de datos es simplemente una colección organizada de datos, que normalmente se almacena de forma electrónica en un sistema informático. Piensa en él como un archivador digital. En lugar de usar carpetas y cajones de papel, utilizas tablas estructuradas (u otros métodos de organización de datos) que te permiten almacenar, gestionar 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 usuario 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 varias 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, evitando la necesidad de almacenar la misma información varias veces.

Ejemplo de normalización de bases de datos

Imagina una base de datos sencilla para una tienda online. 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 de pedidos, sino que solo tienes que usar su ID de cliente único para conectar el pedido con todos los datos del cliente.

Si el cliente se muda y cambia de dirección, solo tienes que actualizarla en un sitio: la tabla Clientes. Si lo copias en 100 registros de pedidos, tendrás que actualizar los 100, lo que probablemente dará lugar a datos desordenados e incoherentes. Este problema de tener que actualizar la información en muchos sitios 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 normalizadas" (1FN, 2FN, 3FN, etc.) son una serie de reglas prescriptivas. Son una solución a la redundancia de datos y a las anomalías que crea, ya que proporcionan un camino claro para organizar los datos de forma eficiente y fiable en función de las necesidades de tu aplicación.

Diferentes formas normalizadas (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 normalizada (3FN), una tabla debe superar las pruebas de la 1FN y la 2FN. La mayoría de las bases de datos operacionales están diseñadas para cumplir al menos el estándar de la 3FN, ya que puede proporcionar un equilibrio entre la integridad de los datos y el rendimiento.

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

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

Qué problema resuelve: no puedes poner una lista de elementos en una sola celda. Por ejemplo, en una tabla de pedidos, no puedes poner "Leche, huevos, pan" en una sola celda de la columna "Productos pedidos". En su lugar, cada producto debe tener su propia fila, lo que garantiza que los datos se puedan buscar y gestionar.

La regla de la 2FN 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 principal es la columna o el conjunto de columnas cuyos valores identifican de forma única cada fila de una tabla. Una columna no clave es cualquier columna que no forme parte de la clave principal.

Regla: una tabla debe estar ya en la primera forma normal y todas las columnas que no sean clave deben depender de toda la clave compuesta, no solo de una parte.

Qué problema resuelve: solo debes almacenar datos donde corresponda. Si tiene 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 ProductID y Product Price a una tabla de productos independiente, donde ProductID sea la única clave principal. De esta forma, el precio del producto no se repite innecesariamente en cada pedido que lo incluya.

La regla de la 3FN es el objetivo más común en el diseño de bases de datos y consiste en eliminar las relaciones indirectas entre puntos de datos.

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

Qué problema resuelve: evita que un dato no clave determine el valor de otro dato no clave. Imagina 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 enlace indirecto es una dependencia transitiva. Para solucionarlo, creas una nueva tabla de oficinas que solo contenga el ID de la oficina y la ubicación de la oficina, y luego vinculas las dos tablas usando el ID de la oficina. De esta forma, solo tendrás que actualizar la ubicación de la oficina en un sitio si 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 el rendimiento de lectura.

Ejemplos 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 crearse (por ejemplo, una copia de un contrato o una factura).

Resultado

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

Menos tablas y duplicación de datos intencionada.

Función

Normalización

Desnormalización

Objetivo principal

Reduce la redundancia y mejora la integridad de los datos.

Mejora el rendimiento de lectura.

Ejemplos 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 crearse (por ejemplo, una copia de un contrato o una factura).

Resultado

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

Menos tablas y duplicación de datos intencionada.

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

¿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, fiables y fáciles de gestionar mediante el uso de "formas normalizadas" para estructurar los datos y evitar problemas comunes. 

Reducir la redundancia de datos

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

Elimina las anomalías en los datos

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

Mejorar la integridad de los datos

Asegúrate de que la información sea precisa y coherente en toda la base de datos garantizando que cada dato sea correcto y se almacene en una sola ubicación.

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

Soluciona los retos empresariales que se te presenten con Google Cloud

Los nuevos clientes reciben 300 USD en crédito gratis para invertirlos en Google Cloud.

Ve un paso más allá

Empieza a crear en Google Cloud con 300 USD en crédito gratis y más de 20 productos Always Free.

Google Cloud