¿Cómo Normalizar una Base de Datos SQL?

Fecha: 01/10/2024

La normalización de una base de datos es un proceso fundamental en el diseño de bases de datos relacionales. Su objetivo es minimizar la redundancia y dependencia, organizando los datos de manera eficiente. En este tutorial, exploraremos cómo normalizar una base de datos SQL, incluyendo ejemplos prácticos. La normalización se compone de varias ‘formas normales’ a las que llamaremos (1NF, 2NF, 3NF, etc.), cada una con sus propios requisitos.

Ejemplo Práctico

Para ilustrar, consideremos una base de datos sencilla de una tienda en línea que incluye información sobre clientes, pedidos y productos.

Diseño No Normalizado

Supongamos que tenemos una tabla con la siguiente estructura y datos:

-- Escenario: 
CREATE TABLE Pedidos (
PedidoID int,
FechaPedido date,
ClienteID int,
NombreCliente varchar(255),
Dirección varchar(255),
ProductoID int,
NombreProducto varchar(255),
Precio decimal
);

INSERT INTO Pedidos (PedidoID, FechaPedido, ClienteID, NombreCliente, Dirección, ProductoID, NombreProducto, Precio)
VALUES (1, '2024-01-23', 123, 'Juan Pérez', 'Calle Falsa 123', 456, 'Producto X', 19.99);

Esta tabla contiene información redundante como el nombre del cliente y los detalles del producto, lo cual no es ideal.

Primera Forma Normal (1NF)

Para alcanzar la primer forma normal, cada columna debe contener valores atómicos y cada fila debe ser única.

Normalización a 1NF: Separamos la tabla en diferentes entidades:

  1. Clientes: ClienteID, NombreCliente, Dirección.
  2. Productos: ProductoID, NombreProducto, Precio.
  3. Pedidos: PedidoID, FechaPedido, ClienteID, ProductoID.

Segunda Forma Normal (2NF)

Una tabla está en la segunda forma normal si está en 1NF y todos los atributos no clave dependen de la clave primaria de manera completa.

Normalización a 2NF: Nuestra estructura actual ya cumple con la segunda forma normal, ya que cada atributo no clave depende completamente de la clave primaria en sus respectivas tablas.

Tercera Forma Normal (3NF)

Una tabla está en su tercer forma normal si está en su segunda forma normal y todos sus campos no clave son mutuamente independientes.

Normalización a 3NF: Si en la tabla Pedidos tenemos campos que dependen únicamente de ClienteID (como 'Dirección'), deberíamos mover esos campos a la tabla Clientes.

SQL para Normalización

-- Crear tabla Clientes
CREATE TABLE Clientes (
ClienteID int PRIMARY KEY,
NombreCliente varchar(255),
Dirección varchar(255)
);

-- Crear tabla Productos
CREATE TABLE Productos (
ProductoID int PRIMARY KEY,
NombreProducto varchar(255),
Precio decimal
);

-- Crear tabla Pedidos
CREATE TABLE Pedidos (
PedidoID int PRIMARY KEY,
FechaPedido date,
ClienteID int,
ProductoID int,
FOREIGN KEY (ClienteID) REFERENCES Clientes(ClienteID),
FOREIGN KEY (ProductoID) REFERENCES Productos(ProductoID)
);

-- Insertando un cliente
INSERT INTO Clientes (ClienteID, NombreCliente, Dirección)
VALUES (123, 'Juan Pérez', 'Calle Falsa 123');

-- Insertando un producto
INSERT INTO Productos (ProductoID, NombreProducto, Precio)
VALUES (456, 'Producto X', 19.99);

-- Insertando un pedido
INSERT INTO Pedidos (PedidoID, FechaPedido, ClienteID, ProductoID)
VALUES (1, '2024-01-23', 123, 456);

SELECT * FROM Clientes;

Conclusión

La normalización es un paso crítico en el diseño de una base de datos eficiente y confiable. Al seguir las formas normales, se puede asegurar que la base de datos esté libre de redundancias innecesarias y sea fácil de mantener y actualizar. Si bien la normalización puede aumentar la complejidad de las consultas, los beneficios en cuanto a la integridad y consistencia de los datos suelen superar este inconveniente.