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
- Dependencia funcional (FD): X → Y (X determina Y de forma única)
- Dependencia multivaluada (MVD): X →→ Y (X determina múltiples valores Y)
- Dependencia de unión (JD): (A, B, C) (la tabla puede reconstruirse desde uniones)
- Determinante: Atributo que determina otros atributos
- Clave candidata: Identificadores únicos mínimos
- Clave primaria: Clave candidata seleccionada
- Dependencia parcial: Dependencia de parte de una clave compuesta
- 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
-
¿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).
-
¿Cuál es la diferencia entre 3NF y BCNF? BCNF es más estricta: toda determinante debe ser una clave candidata.
-
¡Explica las dependencias multivaluadas! X →→ Y significa que para cada valor de X, el conjunto de valores Y es independiente de otros atributos.
-
¿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
- https://de.wikipedia.org/wiki/Normalisierung_(Datenbank)
- https://www.gatech.edu/coe/cse/database-normalization
- https://www.sql-tutorial.ru/sql-normalization-complete.html
Literatura recomendada: Bases de datos
Keine Bücher für Kategorie "datenbanken" gefunden.



