La normalización es un proceso fundamental en el diseño de bases de datos que tiene como objetivo reducir la redundancia y mejorar la integridad de los datos. Este proceso se lleva a cabo mediante la organización de los datos en tablas y la aplicación de ciertas reglas para asegurar que las dependencias entre los datos sean lógicas y eficientes.
Objetivos de la Normalización
- Eliminar la redundancia de datos: Reducir la duplicación de datos para ahorrar espacio y evitar inconsistencias.
- Asegurar la integridad de los datos: Mantener la precisión y consistencia de los datos a lo largo del tiempo.
- Mejorar la eficiencia de las consultas: Optimizar las consultas y operaciones de la base de datos.
Formas Normales
La normalización se lleva a cabo a través de una serie de pasos llamados "formas normales". Cada forma normal tiene un conjunto de reglas que deben cumplirse para que una tabla esté en esa forma normal.
Primera Forma Normal (1NF)
Una tabla está en la Primera Forma Normal si:
- Todos los atributos contienen valores atómicos (indivisibles).
- Todos los valores en una columna son del mismo tipo de datos.
- Cada columna contiene solo un valor por fila.
Ejemplo:
-- Tabla no normalizada CREATE TABLE Empleados ( ID INT, Nombre VARCHAR(100), Telefonos VARCHAR(100) -- Almacena múltiples números de teléfono separados por comas ); -- Tabla en 1NF CREATE TABLE Empleados ( ID INT, Nombre VARCHAR(100) ); CREATE TABLE Telefonos ( EmpleadoID INT, Telefono VARCHAR(15) );
Segunda Forma Normal (2NF)
Una tabla está en la Segunda Forma Normal si:
- Está en 1NF.
- Todos los atributos no clave dependen completamente de la clave primaria.
Ejemplo:
-- Tabla en 1NF pero no en 2NF CREATE TABLE Empleados ( ID INT, Nombre VARCHAR(100), Departamento VARCHAR(100), DepartamentoUbicacion VARCHAR(100) ); -- Tabla en 2NF CREATE TABLE Empleados ( ID INT, Nombre VARCHAR(100), DepartamentoID INT ); CREATE TABLE Departamentos ( DepartamentoID INT, Departamento VARCHAR(100), Ubicacion VARCHAR(100) );
Tercera Forma Normal (3NF)
Una tabla está en la Tercera Forma Normal si:
- Está en 2NF.
- No existen dependencias transitivas entre los atributos no clave y la clave primaria.
Ejemplo:
-- Tabla en 2NF pero no en 3NF CREATE TABLE Empleados ( ID INT, Nombre VARCHAR(100), DepartamentoID INT, DepartamentoNombre VARCHAR(100) ); -- Tabla en 3NF CREATE TABLE Empleados ( ID INT, Nombre VARCHAR(100), DepartamentoID INT ); CREATE TABLE Departamentos ( DepartamentoID INT, Nombre VARCHAR(100) );
Ejercicio Práctico
Ejercicio 1: Normalización de una Tabla
Dada la siguiente tabla no normalizada, aplique las reglas de normalización hasta la Tercera Forma Normal (3NF).
Tabla no normalizada:
CREATE TABLE Ordenes ( OrdenID INT, ClienteNombre VARCHAR(100), ClienteDireccion VARCHAR(100), ProductoID INT, ProductoNombre VARCHAR(100), Cantidad INT, Precio DECIMAL(10, 2) );
Solución:
- Primera Forma Normal (1NF):
- Asegurarse de que todos los atributos contienen valores atómicos.
CREATE TABLE Ordenes ( OrdenID INT, ClienteNombre VARCHAR(100), ClienteDireccion VARCHAR(100), ProductoID INT, ProductoNombre VARCHAR(100), Cantidad INT, Precio DECIMAL(10, 2) );
- Segunda Forma Normal (2NF):
- Eliminar dependencias parciales.
CREATE TABLE Ordenes ( OrdenID INT, ClienteID INT, ProductoID INT, Cantidad INT, Precio DECIMAL(10, 2) ); CREATE TABLE Clientes ( ClienteID INT, Nombre VARCHAR(100), Direccion VARCHAR(100) ); CREATE TABLE Productos ( ProductoID INT, Nombre VARCHAR(100) );
- Tercera Forma Normal (3NF):
- Eliminar dependencias transitivas.
CREATE TABLE Ordenes ( OrdenID INT, ClienteID INT, ProductoID INT, Cantidad INT, Precio DECIMAL(10, 2) ); CREATE TABLE Clientes ( ClienteID INT, Nombre VARCHAR(100), Direccion VARCHAR(100) ); CREATE TABLE Productos ( ProductoID INT, Nombre VARCHAR(100) );
Conclusión
La normalización es un proceso crucial en el diseño de bases de datos que ayuda a eliminar la redundancia y asegurar la integridad de los datos. Al seguir las reglas de las formas normales, podemos crear bases de datos eficientes y bien estructuradas. En el próximo tema, exploraremos las claves primarias y foráneas, que son esenciales para mantener las relaciones entre las tablas normalizadas.
Curso de PostgreSQL
Módulo 1: Introducción a PostgreSQL
Módulo 2: Operaciones Básicas de SQL
- Creando Bases de Datos y Tablas
- Insertando Datos
- Consultando Datos
- Actualizando Datos
- Eliminando Datos
Módulo 3: Consultas Avanzadas de SQL
Módulo 4: Diseño de Bases de Datos y Normalización
Módulo 5: Características Avanzadas de PostgreSQL
Módulo 6: Ajuste de Rendimiento y Optimización
- Optimización de Consultas
- Estrategias de Indexación
- Análisis del Rendimiento de Consultas
- Vacuuming y Mantenimiento
Módulo 7: Seguridad y Gestión de Usuarios
Módulo 8: Trabajando con JSON y Características NoSQL
Módulo 9: Extensiones y Herramientas Avanzadas
- PostGIS para Datos Geoespaciales
- Búsqueda de Texto Completo
- Wrappers de Datos Externos
- PL/pgSQL y Otros Lenguajes Procedurales