La normalización es el proceso sistemático de organizar los atributos y tablas de una base de datos relacional para minimizar la redundancia de datos y eliminar las anomalías de actualización, inserción y eliminación. Una base de datos no normalizada puede contener el mismo dato en múltiples lugares: si ese dato cambia, hay que actualizarlo en todos lados simultáneamente, y si alguna actualización falla, la base de datos queda en un estado inconsistente. La teoría de la normalización, desarrollada por Edgar F. Codd y posteriormente extendida por otros investigadores, ofrece un conjunto de reglas formales —las formas normales— que guían el diseño hacia esquemas más robustos, predecibles y fáciles de mantener.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/tutosrive/db-relacionales-2026-1/llms.txt
Use this file to discover all available pages before exploring further.
Dependencias funcionales
Antes de aplicar cualquier forma normal es necesario entender el concepto central de la normalización: la dependencia funcional. Definición: Dado un esquema de relación R, se dice que el atributo B depende funcionalmente del atributo A (notación:A → B) si, para cada valor de A en R, existe exactamente un valor de B asociado.
Ejemplos en el dominio del curso:
| Dependencia | Lectura |
|---|---|
cedula → nombre, apellido | La cédula de un alumno determina unívocamente su nombre y apellido |
codcurso → nombrecurso, num_horas | El código del curso determina su nombre y duración |
codcurso → cedprofesor | Cada curso tiene asignado exactamente un profesor |
{cedula_alumno, codcurso} → inscripción | La inscripción depende de la combinación alumno-curso |
La dependencia funcional es una restricción semántica del dominio del negocio, no algo que se infiere automáticamente de los datos actuales. Que en este momento dos alumnos tengan la misma dirección no significa que
direccion → cedula; hay que entender las reglas del negocio.El proceso de normalización
Partir de una tabla universal (relación universal)
El punto de partida es una única tabla que contiene todos los atributos del dominio. Esta tabla generalmente viola varias formas normales y sirve como entrada al proceso.Tabla inicial —
Anomalías visibles:
inscripcion_completa (no normalizada):| cedula | nombre_alumno | apellido_alumno | codcurso | nombrecurso | num_horas | cedprofesor | nombre_profesor | nota_final | telefonos_alumno |
|---|---|---|---|---|---|---|---|---|---|
| 101 | Ana | Gómez | C01 | SQL Avanzado | 40 | P01 | Martínez | 4.5 | 3001234, 3109876 |
| 101 | Ana | Gómez | C02 | Modelado ER | 30 | P02 | Rodríguez | 3.8 | 3001234, 3109876 |
| 102 | Luis | Pérez | C01 | SQL Avanzado | 40 | P01 | Martínez | 4.0 | 3205555 |
- Actualización: si el profesor Martínez cambia de nombre, hay que actualizarlo en cada fila donde aparezca.
- Inserción: no se puede registrar un curso sin tener al menos un alumno inscrito.
- Eliminación: si Luis Pérez cancela C01, se pierde la información de que el profesor P01 imparte ese curso.
Aplicar la Primera Forma Normal (1FN)
Primera Forma Normal (1FN)
Una tabla está en 1FN si:- Todos los atributos contienen valores atómicos (indivisibles).
- No existen grupos repetitivos ni listas de valores en una sola celda.
- Cada fila es única (existe una clave primaria).
telefonos_alumno contiene múltiples valores separados por comas → viola la atomicidad.Tabla que viola 1FN:| cedula | nombre_alumno | telefonos_alumno |
|---|---|---|
| 101 | Ana Gómez | 3001234, 3109876 |
| 102 | Luis Pérez | 3205555 |
Aplicar la Segunda Forma Normal (2FN)
Segunda Forma Normal (2FN)
Una tabla está en 2FN si:- Está en 1FN.
- Todos los atributos no clave dependen de toda la clave primaria (no solo de una parte de ella).
{cedula_alumno, codcurso}:| cedula_alumno | codcurso | nombre_alumno | nombrecurso | num_horas |
|---|---|---|---|---|
| 10000001 | 101 | Ana | Base de Datos I | 100.1 |
| 10000001 | 102 | Ana | Programacion Web | 150 |
| 10000002 | 101 | Pedro | Base de Datos I | 100.1 |
cedula_alumno → nombre_alumno(depende solo de cedula_alumno, no de la PK completa)codcurso → nombrecurso, num_horas(depende solo de codcurso){cedula_alumno, codcurso}identifica correctamente cada inscripción
Aplicar la Tercera Forma Normal (3FN)
Tercera Forma Normal (3FN)
Una tabla está en 3FN si:- Está en 2FN.
- No existen dependencias transitivas: ningún atributo no clave depende de otro atributo no clave.
| codcurso | nombrecurso | cedprofesor | nombre_profesor | titulo_profesor |
|---|---|---|---|---|
| 101 | Base de Datos I | 12345678 | Juan | Ingeniero de Sistemas |
| 102 | Programacion Web | 23456789 | Maria | Licenciada en Matematicas |
| 103 | Redes de Datos | 12345678 | Juan | Ingeniero de Sistemas |
nombre_profesor no depende directamente de codcurso (la PK), sino transitivamente a través de cedprofesor.Solución — extraer la información del profesor a su propia tabla:La regla informal de la 3FN es: “cada atributo no clave debe depender de la clave, solo de la clave y nada más que de la clave” (paráfrasis del juramento anglosajón, popularizada por William Kent).
Verificar BCNF (opcional pero recomendado)
Forma Normal de Boyce-Codd (BCNF)
La BCNF es una versión más estricta de la 3FN. Una tabla está en BCNF si, para toda dependencia funcional no trivialX → Y, X es una superclave de la relación.La diferencia con 3FN aparece en tablas con múltiples claves candidatas solapadas. En la práctica, la mayoría de los esquemas en 3FN ya están en BCNF; los casos que violan BCNF pero no 3FN son relativamente raros.Consulta la sección de preguntas frecuentes al final de esta página para un ejemplo detallado de cuándo 3FN ≠ BCNF.Esquema final normalizado (3FN)
El siguiente DDL representa el esquema del curso completamente normalizado hasta 3FN:Resumen de las formas normales
| Forma Normal | Requisito principal | Problema que elimina |
|---|---|---|
| 1FN | Valores atómicos, sin grupos repetitivos | Celdas con múltiples valores, columnas repetidas |
| 2FN | Sin dependencias parciales de la PK | Redundancia en tablas con PK compuesta |
| 3FN | Sin dependencias transitivas | Redundancia por cadenas de dependencia |
| BCNF | Todo determinante es superclave | Anomalías residuales con claves candidatas solapadas |
Preguntas frecuentes sobre normalización
¿Cuándo BCNF es diferente de 3FN? Ejemplo concreto
¿Cuándo BCNF es diferente de 3FN? Ejemplo concreto
Imagina una tabla para asignar tutores a alumnos en cursos, donde:Claves candidatas:Esta dependencia no viola 3FN porque
- Cada alumno en un curso tiene exactamente un tutor.
- Cada tutor solo imparte un curso (pero un curso puede tener varios tutores).
{cedula_alumno, codcurso}— un alumno en un curso tiene un tutor.{cedula_alumno, cedula_tutor}— un alumno con un tutor determina el curso.
cedula_tutor forma parte de una clave candidata. Pero sí viola BCNF porque cedula_tutor por sí sola no es superclave de la relación.La solución BCNF descompone la tabla, pero puede impedir expresar directamente la restricción de que el alumno y el tutor deben pertenecer al mismo curso, lo que requeriría un trigger adicional. Por eso a veces se prefiere mantener 3FN en estos casos.¿La normalización afecta el rendimiento de las consultas?
¿La normalización afecta el rendimiento de las consultas?
Sí, hay un trade-off. Más tablas significan más
JOIN en las consultas, lo que puede ser más lento si las tablas son muy grandes y los índices no están bien definidos. Sin embargo:- Los índices en las claves foráneas mitigan en gran medida este costo.
- Las bases de datos normalizadas son más rápidas en escritura (menos filas que actualizar por cambio).
- Para cargas de trabajo de lectura intensiva (reportería, BI), considera vistas materializadas o esquemas estrella en una capa separada de analítica.
¿Cómo identifico dependencias funcionales en la práctica?
¿Cómo identifico dependencias funcionales en la práctica?
Sigue estos pasos:
- Entrevista al negocio: pregunta “¿puede haber dos registros con el mismo valor de X pero diferente valor de Y?”. Si la respuesta es no, tienes
X → Y. - Analiza las reglas de negocio documentadas, no solo los datos de muestra.
- Busca atributos descriptivos de otra entidad: si una tabla tiene
nombre_ciudadjunto acodigo_postal, sospecha decodigo_postal → nombre_ciudad. - Usa el diagrama E-R como guía: los atributos de cada entidad deben depender funcionalmente de la clave de esa entidad.
¿Qué pasa con las formas normales superiores (4FN, 5FN)?
¿Qué pasa con las formas normales superiores (4FN, 5FN)?
- 4FN elimina dependencias multivaluadas: cuando una tabla registra combinaciones independientes de dos atributos respecto a una clave (p. ej., un profesor puede enseñar varios cursos Y hablar varios idiomas, de forma independiente entre sí).
- 5FN (forma normal de proyección-unión) maneja casos aún más raros de dependencias de join cíclicas.