La normalización es un proceso de estructuración de las tablas de una base de datos para minimizar la redundancia y evitar problemas de inconsistencia. Consiste en dividir los datos en varias tablas relacionadas, asegurando que cada tabla contenga datos sobre una sola cosa.
Se organiza en una serie de pasos llamados formas normales (FN), donde cada forma normal tiene reglas específicas que deben cumplirse antes de pasar a la siguiente.
Una tabla está en 1NF si:
Ejemplo de no 1NF:
ID | Nombre | Teléfonos |
---|---|---|
1 | Juan Pérez | 555-1234, 555-5678 |
2 | Ana Gómez | 555-9876 |
Solución (en 1NF):
ID | Nombre | Teléfono |
---|---|---|
1 | Juan Pérez | 555-1234 |
1 | Juan Pérez | 555-5678 |
2 | Ana Gómez | 555-9876 |
Una tabla está en 2NF si:
Ejemplo de no 2NF:
Supongamos una tabla de pedidos:
PedidoID | Producto | Cantidad | PrecioProducto |
---|---|---|---|
1 | Lápiz | 10 | 0.50 |
1 | Cuaderno | 5 | 1.50 |
En esta tabla, PrecioProducto depende solo de Producto, no de toda la clave primaria compuesta (PedidoID, Producto).
Solución (en 2NF):
Dividimos la tabla en dos:
Tabla de Pedidos:
PedidoID | Producto | Cantidad |
---|---|---|
1 | Lápiz | 10 |
1 | Cuaderno | 5 |
Tabla de Productos:
Producto | PrecioProducto |
---|---|
Lápiz | 0.50 |
Cuaderno | 1.50 |
Una tabla está en 3NF si:
Ejemplo de no 3NF:
ID | Nombre | Departamento | JefeDepartamento |
---|---|---|---|
1 | Juan Pérez | Ventas | Ana Gómez |
2 | Ana Gómez | Ventas | Ana Gómez |
Aquí, JefeDepartamento depende de Departamento, no directamente de ID.
Solución (en 3NF):
Dividimos la tabla en dos:
Tabla de Empleados:
ID | Nombre | Departamento |
---|---|---|
1 | Juan Pérez | Ventas |
2 | Ana Gómez | Ventas |
Tabla de Departamentos:
Departamento | JefeDepartamento |
---|---|
Ventas | Ana Gómez |
Una tabla está en BCNF si:
Ejemplo de no BCNF:
Curso | Profesor | Horario |
---|---|---|
SQL | Prof. A | Lunes |
SQL | Prof. A | Miércoles |
HTML | Prof. B | Lunes |
En este caso, Profesor determina Horario, pero no es clave primaria.
Solución (en BCNF):
Tabla de Cursos:
Curso | Profesor |
---|---|
SQL | Prof. A |
HTML | Prof. B |
Tabla de Horarios:
Profesor | Horario |
---|---|
Prof. A | Lunes |
Prof. A | Miércoles |
Prof. B | Lunes |
Una tabla está en 4NF si:
Ejemplo de no 4NF:
Estudiante | Curso | Deporte |
---|---|---|
Juan | Matemáticas | Fútbol |
Juan | Física | Fútbol |
Juan | Matemáticas | Baloncesto |
Aquí, Curso y Deporte son atributos multivalorados independientes.
Solución (en 4NF):
Dividimos en dos tablas:
Tabla de Cursos:
Estudiante | Curso |
---|---|
Juan | Matemáticas |
Juan | Física |
Tabla de Deportes:
Estudiante | Deporte |
---|---|
Juan | Fútbol |
Juan | Baloncesto |
Una tabla está en 5NF si:
Ejemplo de no 5NF:
En un caso de relaciones complejas entre varias tablas (Producto, Proveedor y Proceso de Ensamblaje), 5NF se aplica para asegurar que cada combinación de datos se almacene de manera correcta y sin redundancia.
La normalización mejora la eficiencia, elimina redundancia y asegura integridad. Sin embargo, puede aumentar la complejidad de consultas en bases muy normalizadas. Se suele aplicar hasta 3NF o BCNF, y las formas superiores son menos comunes.