¿Por qué normalizar?
La normalización es el proceso de organizar las columnas y tablas para eliminar la redundancia (datos repetidos) y evitar las anomalías:
- Anomalía de inserción: no puedes guardar un dato sin inventar otro. Si la categoría de un producto vive en la tabla de productos, no puedes registrar una categoría nueva hasta que exista un producto de ella.
- Anomalía de actualización: si un dato está repetido en muchas filas, al cambiarlo tienes que actualizarlas todas; si te dejas una, quedan inconsistentes.
- Anomalía de borrado: al borrar una fila pierdes información que no querías perder (borrar el último pedido de un cliente borraría también sus datos).
Se avanza por formas normales acumulativas: para estar en 3NF hay que cumplir antes 1NF y 2NF.
Primera forma normal (1NF)
Una tabla está en 1NF si:
- Cada celda contiene un valor atómico (no listas ni varios valores).
- No hay grupos de columnas repetidas (
telefono1,telefono2, ...).
| ❌ No 1NF | ✅ 1NF |
|---|---|
telefonos = '600, 611' |
una fila por teléfono en una tabla aparte |
Segunda forma normal (2NF)
Una tabla está en 2NF si está en 1NF y, además, ningún atributo no clave depende solo de una parte de una clave primaria compuesta (no hay dependencias parciales).
Solo es relevante cuando la PK es compuesta. Ejemplo: en
linea_pedido(pedido_id, producto_id, nombre_producto), el
nombre_producto depende solo de producto_id, no de la clave completa →
viola 2NF. La solución: mover nombre_producto a la tabla productos.
Tercera forma normal (3NF)
Una tabla está en 3NF si está en 2NF y ningún atributo no clave depende de otro atributo no clave (no hay dependencias transitivas).
Ejemplo que viola 3NF:
| pedido_id | cliente_id | cliente_ciudad |
|---|
Aquí cliente_ciudad depende de cliente_id (no de la PK pedido_id).
Si Ana cambia de ciudad hay que actualizar todos sus pedidos. La solución es
separar: la ciudad vive en la tabla clientes, y pedidos solo guarda
cliente_id.
En resumen, 3NF = "cada atributo no clave depende de la clave, de toda la clave y de nada más que la clave". Es el objetivo razonable para la mayoría de esquemas de aplicación.