Skip to content
IRC-CodingIRC-Coding
Normalformas1NF 2NF 3NF BCNF4NF 5NFNormalización de bases de datosDependencias funcionales

Normalformas: 1NF, 2NF, 3NF, BCNF, 4NF y 5NF

Guía completa de normalformas en bases de datos. Dependencias funcionales, Multi-Valued Dependencies y Join Dependencies para optimizar estructuras.

S

schutzgeist

5 min read
Normalformas: 1NF, 2NF, 3NF, BCNF, 4NF y 5NF

Normalformas: 1NF, 2NF, 3NF, BCNF, 4NF y 5NF al completo

Este artículo ofrece una explicación exhaustiva de todas las normalformas en teoría de bases de datos – desde 1NF hasta 5NF con ejemplos prácticos.

En síntesis

Las normalformas son reglas formales para estructurar bases de datos relacionales, eliminando redundancia de manera gradual y garantizando la integridad de los datos. Cada normalforma superior se construye sobre la anterior.

Descripción técnica compacta

La normalización es el proceso de mejora progresiva de estructuras de base de datos mediante la aplicación de reglas formales. Cada normalforma aborda anomalías y dependencias específicas.

Resumen de las normalformas:

  • 1NF: Valores atómicos, sin grupos de repetición
  • 2NF: 1NF más ausencia de dependencias parciales
  • 3NF: 2NF más ausencia de dependencias transitivas
  • BCNF: 3NF más estricta con reglas más severas
  • 4NF: 3NF más ausencia de dependencias multivaluadas
  • 5NF: 4NF más ausencia de dependencias de unión

Fundamentos matemáticos:

  • Dependencias funcionales: X → Y
  • Dependencias multivaluadas: X →→ Y
  • Dependencias de unión: (A, B, C)

Relevancia práctica: Las tres primeras normalformas (1NF-3NF) son suficientes para la mayoría de aplicaciones. Las normalformas superiores (4NF-5NF) son relevantes para estructuras de datos complejas y contextos académicos.

Puntos clave para exámenes

  • 1NF: Valores atómicos, sin grupos de repetición, clave primaria única
  • 2NF: Sin dependencias parciales de una clave primaria compuesta
  • 3NF: Sin dependencias transitivas a través de atributos que no son clave
  • BCNF: Toda determinante es una clave candidata
  • 4NF: Sin dependencias multivaluadas excepto las triviales
  • 5NF: Sin dependencias de unión excepto las generadas por claves candidatas
  • Dependencias funcionales: Base de la normalización
  • Relevancia profesional: Especialmente 1NF-3NF para diseño de bases de datos

Componentes centrales

  1. Dependencia funcional (FD): X → Y (X determina Y de forma única)
  2. Dependencia multivaluada (MVD): X →→ Y (X determina múltiples valores Y)
  3. Dependencia de unión (JD): (A, B, C) (la tabla puede reconstruirse desde uniones)
  4. Determinante: Atributo que determina otros atributos
  5. Clave candidata: Identificadores únicos mínimos
  6. Clave primaria: Clave candidata seleccionada
  7. Dependencia parcial: Dependencia de parte de una clave compuesta
  8. Dependencia transitiva: Dependencia indirecta a través de atributos que no son clave

Ejemplos prácticos

1ª Normalforma (1NF)

-- Problema: valores no atómicos y grupos de repetición
CREATE TABLE Bestellungen_Schlecht (
    bestell_id INT,
    kunde VARCHAR(100),
    artikel_liste VARCHAR(500), -- No atómico
    telefonnummern VARCHAR(200) -- Grupo de repetición
);

-- Solución 1NF: valores atómicos
CREATE TABLE Bestellungen_1NF (
    bestell_id INT PRIMARY KEY,
    kunden_id INT,
    bestelldatum DATE
);

CREATE TABLE Bestellpositionen (
    bestell_id INT,
    positionsnummer INT,
    artikel_id INT,
    menge INT,
    PRIMARY KEY (bestell_id, positionsnummer)
);

CREATE TABLE Kunden_Telefone (
    kunden_id INT,
    telefonnummer VARCHAR(20),
    PRIMARY KEY (kunden_id, telefonnummer)
);

2ª Normalforma (2NF)

-- Problema: dependencias parciales
CREATE TABLE Bestellpositionen_2NF_Problem (
    bestell_id INT,
    artikel_id INT,
    menge INT,
    artikel_name VARCHAR(100), -- Depende solo de artikel_id
    preis DECIMAL(10,2),       -- Depende solo de artikel_id
    PRIMARY KEY (bestell_id, artikel_id)
);

-- Solución 2NF: elimina dependencias parciales
CREATE TABLE Bestellpositionen_2NF (
    bestell_id INT,
    artikel_id INT,
    menge INT,
    PRIMARY KEY (bestell_id, artikel_id)
);

CREATE TABLE Artikel (
    artikel_id INT PRIMARY KEY,
    artikel_name VARCHAR(100),
    preis DECIMAL(10,2)
);

3ª Normalforma (3NF)

-- Problema: dependencias transitivas
CREATE TABLE Mitarbeiter_3NF_Problem (
    mitarbeiter_id INT PRIMARY KEY,
    name VARCHAR(100),
    abteilungs_id INT,
    abteilungs_name VARCHAR(100), -- Transitiva: abteilungs_id → abteilungs_name
    standort VARCHAR(50)           -- Transitiva: abteilungs_id → standort
);

-- Solución 3NF: elimina dependencias transitivas
CREATE TABLE Mitarbeiter_3NF (
    mitarbeiter_id INT PRIMARY KEY,
    name VARCHAR(100),
    abteilungs_id INT
);

CREATE TABLE Abteilungen (
    abteilungs_id INT PRIMARY KEY,
    abteilungs_name VARCHAR(100),
    standort VARCHAR(50)
);

Forma Normal de Boyce-Codd (BCNF)

-- Problema: 3NF pero no BCNF
CREATE TABLE Projektmitarbeiter_BCNF_Problem (
    projekt_id INT,
    mitarbeiter_id INT,
    rolle VARCHAR(50),
    PRIMARY KEY (projekt_id, mitarbeiter_id)
);

-- Dependencias funcionales:
-- projekt_id, mitarbeiter_id → rolle
-- projekt_id, rolle → mitarbeiter_id (Determinante no es clave candidata)

-- Solución BCNF
CREATE TABLE Projektrollen (
    projekt_id INT,
    rolle VARCHAR(50),
    mitarbeiter_id INT,
    PRIMARY KEY (projekt_id, rolle)
);

4ª Normalforma (4NF)

-- Problema: dependencias multivaluadas
CREATE TABLE Mitarbeiter_Kenntnisse_4NF_Problem (
    mitarbeiter_id INT,
    programmiersprache VARCHAR(50),
    projekt_id INT,
    PRIMARY KEY (mitarbeiter_id, programmiersprache, projekt_id)
);

-- MVDs: mitarbeiter_id →→ programmiersprache, mitarbeiter_id →→ projekt_id

-- Solución 4NF: separación de MVDs
CREATE TABLE Mitarbeiter_Sprachen (
    mitarbeiter_id INT,
    programmiersprache VARCHAR(50),
    PRIMARY KEY (mitarbeiter_id, programmiersprache)
);

CREATE TABLE Mitarbeiter_Projekte (
    mitarbeiter_id INT,
    projekt_id INT,
    PRIMARY KEY (mitarbeiter_id, projekt_id)
);

5ª Normalforma (5NF)

-- Problema: dependencias de unión
CREATE TABLE Lieferanten_Produkte_Kunden_5NF_Problem (
    lieferant_id INT,
    produkt_id INT,
    kunden_id INT,
    PRIMARY KEY (lieferant_id, produkt_id, kunden_id)
);

-- JD: *(Lieferanten_Produkte, Produkte_Kunden, Lieferanten_Kunden)*

-- Solución 5NF: descomposición en proyecciones
CREATE TABLE Lieferanten_Produkte (
    lieferant_id INT,
    produkt_id INT,
    PRIMARY KEY (lieferant_id, produkt_id)
);

CREATE TABLE Produkte_Kunden (
    produkt_id INT,
    kunden_id INT,
    PRIMARY KEY (produkt_id, kunden_id)
);

CREATE TABLE Lieferanten_Kunden (
    lieferant_id INT,
    kunden_id INT,
    PRIMARY KEY (lieferant_id, kunden_id)
);

Proceso de normalización

Paso 1: Identificación de dependencias

-- Análisis de dependencias funcionales
-- Ejemplo: sistema de pedidos
-- bestell_id → bestelldatum, kunden_id
-- kunden_id → kundenname, adresse
-- bestell_id, artikel_id → menge, einzelpreis
-- artikel_id → artikelname, lagerbestand

Paso 2: Aplicación de normalformas

-- 1NF: garantizar valores atómicos
-- 2NF: eliminar dependencias parciales
-- 3NF: eliminar dependencias transitivas
-- BCNF: determinantes como claves candidatas
-- 4NF: eliminar dependencias multivaluadas
-- 5NF: eliminar dependencias de unión

Paso 3: Verificación

-- Prueba de anomalías
INSERT INTO ... -- ¿Anomalías de inserción?
UPDATE ...     -- ¿Anomalías de actualización?
DELETE ...     -- ¿Anomalías de eliminación?

Ventajas y desventajas

Ventajas de la normalización

  • Integridad de datos: Evita redundancia e inconsistencias
  • Mantenibilidad: Los cambios se requieren solo en un lugar
  • Eficiencia de almacenamiento: Reducción de redundancia
  • Consistencia: Representación uniforme de datos
  • Escalabilidad: Mejor rendimiento con grandes volúmenes de datos

Desventajas

  • Rendimiento: Más uniones requeridas
  • Complejidad: Estructura de datos más compleja
  • Rendimiento de escritura: Actualizaciones distribuidas
  • Sobre-ingeniería: Normalización excesiva puede ser contraproducente

Estrategias de desnormalización

Redundancia selectiva para rendimiento

-- Versión desnormalizada para reportes
CREATE TABLE Bestellungen_Report (
    bestell_id INT PRIMARY KEY,
    bestelldatum DATE,
    kundenname VARCHAR(100), -- Redundante de tabla de clientes
    artikelname VARCHAR(100), -- Redundante de tabla de artículos
    menge INT,
    gesamtpreis DECIMAL(10,2)
);

Preguntas frecuentes en exámenes

  1. ¿Cuándo una tabla está en 3NF pero no en BCNF? Cuando una determinante no es una clave candidata (ejemplo: empleados de proyecto con roles).

  2. ¿Cuál es la diferencia entre 3NF y BCNF? BCNF es más estricta: toda determinante debe ser una clave candidata.

  3. ¡Explica las dependencias multivaluadas! X →→ Y significa que para cada valor de X, el conjunto de valores Y es independiente de otros atributos.

  4. ¿Cuándo son prácticas las normalformas superiores (4NF, 5NF)? En estructuras de datos muy complejas con muchas relaciones, típicamente en sistemas académicos o especializados.

Fuentes principales

  1. https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
  2. https://www.gatech.edu/coe/cse/database-normalization
  3. https://www.sql-tutorial.ru/sql-normalization-complete.html

Literatura recomendada: Bases de datos

Keine Bücher für Kategorie "datenbanken" gefunden.

Volver al blog
Share:

Entradas relacionadas