La normalización es el proceso de estructurar una base de datos para reducir la redundancia de datos y mejorar la integridad. Este proceso organiza los datos en tablas y establece relaciones entre ellas para eliminar dependencias anómalas y minimizar problemas de actualización, eliminación y duplicación. La normalización se realiza en una serie de pasos o formas normales, cada una con criterios específicos.
A continuación, describo los pasos de normalización con ejemplos para cada forma normal.
Supongamos una tabla que almacena información sobre pedidos de clientes:
PedidoID | ClienteNombre | ClienteTeléfono | ProductoID | ProductoNombre | Cantidad | Precio |
---|---|---|---|---|---|---|
1 | Juan Pérez | 555-1234 | 101 | Laptop | 1 | 800 |
2 | Ana Gómez | 555-5678 | 102 | Monitor | 2 | 200 |
2 | Ana Gómez | 555-5678 | 103 | Teclado | 1 | 50 |
La tabla tiene redundancia de datos (el cliente Ana Gómez
aparece dos veces) y contiene datos de clientes, productos y pedidos mezclados, lo que complica su mantenimiento.
Criterios de 1NF:
Conversión:
Para convertir a 1NF, separamos las celdas multivaluadas y aseguramos que cada dato sea único. En nuestro ejemplo, esto ya se cumple, pues cada campo tiene un solo valor por celda. Sin embargo, notamos que los datos están redundantes en varias filas.
Resultado:
PedidoID | ClienteNombre | ClienteTeléfono | ProductoID | ProductoNombre | Cantidad | Precio |
---|---|---|---|---|---|---|
1 | Juan Pérez | 555-1234 | 101 | Laptop | 1 | 800 |
2 | Ana Gómez | 555-5678 | 102 | Monitor | 2 | 200 |
2 | Ana Gómez | 555-5678 | 103 | Teclado | 1 | 50 |
Criterios de 2NF:
Para identificar la clave primaria, observamos que el identificador único aquí es la combinación de PedidoID
y ProductoID
. Los datos de cliente (ClienteNombre
y ClienteTeléfono
) dependen solo de PedidoID
, no de ProductoID
, creando una dependencia parcial.
Conversión:
Dividimos la tabla en dos:
Pedido
que contiene información sobre los pedidos y los clientes.Pedido_Producto
que contiene información sobre los productos pedidos.Resultado:
Tabla Pedido:
PedidoID | ClienteNombre | ClienteTeléfono |
---|---|---|
1 | Juan Pérez | 555-1234 |
2 | Ana Gómez | 555-5678 |
Tabla Pedido_Producto:
PedidoID | ProductoID | ProductoNombre | Cantidad | Precio |
---|---|---|---|---|
1 | 101 | Laptop | 1 | 800 |
2 | 102 | Monitor | 2 | 200 |
2 | 103 | Teclado | 1 | 50 |
Criterios de 3NF:
En nuestra tabla Pedido_Producto
, ProductoNombre
depende de ProductoID
, no directamente de PedidoID
. Esto crea una dependencia transitiva, ya que ProductoID
identifica de manera única ProductoNombre
.
Conversión:
Creamos una tabla Producto
que almacena información de cada producto. Esto elimina la dependencia transitiva de ProductoNombre
respecto a PedidoID
.
Resultado:
Tabla Pedido:
PedidoID | ClienteNombre | ClienteTeléfono |
---|---|---|
1 | Juan Pérez | 555-1234 |
2 | Ana Gómez | 555-5678 |
Tabla Pedido_Producto:
PedidoID | ProductoID | Cantidad | Precio |
---|---|---|---|
1 | 101 | 1 | 800 |
2 | 102 | 2 | 200 |
2 | 103 | 1 | 50 |
Tabla Producto:
ProductoID | ProductoNombre |
---|---|
101 | Laptop |
102 | Monitor |
103 | Teclado |
La Forma Normal de Boyce-Codd (BCNF) es una versión más estricta de la 3NF. Se aplica cuando existen dependencias adicionales entre atributos clave que pueden generar redundancias.
Para nuestro ejemplo, la base de datos ya cumple con BCNF, ya que no existen dependencias adicionales entre las claves.
Después de aplicar todas las formas normales, nuestro diseño final de base de datos se compone de las siguientes tablas:
Tabla Pedido:
PedidoID
, ClienteNombre
, ClienteTeléfono
Tabla Pedido_Producto:
PedidoID
, ProductoID
, Cantidad
, Precio
Tabla Producto:
ProductoID
, ProductoNombre
Este proceso asegura que los datos estén bien organizados y optimizados para consultas y operaciones, además de facilitar la escalabilidad y la consistencia en sistemas de bases de datos.