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

  1. Eliminar la redundancia de datos: Reducir la duplicación de datos para ahorrar espacio y evitar inconsistencias.
  2. Asegurar la integridad de los datos: Mantener la precisión y consistencia de los datos a lo largo del tiempo.
  3. 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:

  1. 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)
);
  1. 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)
);
  1. 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

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

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

Módulo 10: Estudios de Caso y Aplicaciones del Mundo Real

© Copyright 2024. Todos los derechos reservados