meskeIA

Normalización de Bases de Datos

Escribe los atributos de una tabla y sus dependencias funcionales: te dice en qué forma normal está (1FN, 2FN, 3FN o BCNF), cuáles son sus claves candidatas y, sobre todo, POR QUÉ no sube más.

Última actualización: 5 de septiembre de 2026Últ. actualización: 05/09/2026© 2026 meskeIA© 2026

Empieza por un ejemplo resuelto

Cuatro relaciones clásicas de clase, cada una con un defecto distinto. Cárgalas y mira el diagnóstico.

1. Describe la relación

Separados por coma, punto y coma o espacio. Máximo 12: las claves se buscan por subconjuntos y su número crece en 2ⁿ.

Vale escribir la flecha como ->, --> o →. A la izquierda, los atributos que determinan; a la derecha, los determinados.

3. Calculadora de cierre de atributos

Escribe un conjunto de atributos y verás paso a paso todo lo que se deduce de él con las dependencias de la relación analizada. Es la herramienta con la que se comprueba si algo es superclave.

Guía completa de normalización relacional

Dependencias funcionales, cierres, claves y las cuatro formas normales, con ejemplos

Qué es una dependencia funcional

Una dependencia funcional X → Y dice que si dos filas coinciden en los atributos de X, forzosamente coinciden en los de Y. No es una observación sobre los datos que hoy hay en la tabla: es una regla del negocio que debe cumplirse siempre.

En una tabla de matrículas, CodigoAlumno → NombreAlumno se cumple porque un código identifica a una persona. Al revés no: dos personas pueden llamarse igual, así que NombreAlumno → CodigoAlumno sería falso. Toda la normalización se apoya en esta lista de reglas; si están mal escritas, el diagnóstico saldrá mal por muy bien que se calcule.

Una dependencia es trivial cuando la parte derecha ya está dentro de la izquierda (A,B → A). Se cumple siempre y no viola ninguna forma normal, así que el análisis la ignora.

El cierre de atributos y para qué sirve

El cierre de un conjunto X, escrito X⁺, es todo lo que se puede deducir a partir de X aplicando las dependencias una y otra vez hasta que deja de crecer. Es el cálculo central: con él se responde a casi todo lo demás.

Ejemplo trazado a mano

Relación R(A, B, C, D, E) con A → B, B → C y C,D → E.

  • Partimos de {A}.
  • A → B se puede aplicar: ahora {A, B}.
  • B → C se puede aplicar: ahora {A, B, C}.
  • C,D → E NO se puede aplicar: falta D. Y ya no crece más.

Resultado: {A}⁺ = {A, B, C}. En cambio {A, D}⁺ sí llega a los cinco atributos, porque con D dentro ya se dispara C,D → E.

Con el cierre se comprueba si X → Y se deduce de las demás (basta con que Y esté en X⁺) y si X es superclave (que X⁺ contenga todos los atributos). Fíjate en un detalle del ejemplo: las dependencias se aplican en cadena, no en una sola pasada, y por eso el orden en que están escritas no cambia el resultado.

Clave candidata frente a superclave

Una superclave es cualquier conjunto de atributos cuyo cierre da toda la fila. Una clave candidata es una superclave mínima: si le quitas un atributo, deja de determinarlo todo. Toda clave candidata es superclave; casi ninguna superclave es clave candidata.

En R(Factura, Cliente, Fecha, Total) con Factura → Cliente, Fecha, Total, el conjunto {Factura, Cliente} es superclave pero no clave candidata: le sobra Cliente. La única clave candidata es {Factura}.

Una relación puede tener varias claves candidatas, y ahí es donde el análisis a ojo empieza a fallar. Los atributos que aparecen en alguna de ellas se llaman primos; los demás, no primos. Esa distinción es la que usan 2FN y 3FN: solo hablan de los no primos.

Las cuatro formas normales, con un ejemplo de cada una

Están encajadas: BCNF implica 3FN, que implica 2FN, que implica 1FN. Por eso, cuando una falla, todas las de arriba fallan también.

1FN — Primera forma normal

Cada celda contiene un valor atómico. Nada de "lápiz, goma, cuaderno" en una sola columna ni de columnas Telefono1, Telefono2, Telefono3.

Cómo se arregla: sacar los valores repetidos a filas propias, normalmente en una tabla aparte con la clave de la original.

Esta herramienta la da por supuesta: la atomicidad no se deduce de las dependencias funcionales, se ve mirando las columnas.

2FN — Segunda forma normal

Cumple 1FN y ningún atributo no primo depende solo de parte de una clave candidata. Solo puede fallar cuando alguna clave tiene dos o más atributos.

Ejemplo que falla: R(Pedido, Producto, Cantidad, NombreProducto) con Pedido,Producto → Cantidad y Producto → NombreProducto. La clave es {Pedido, Producto}, pero el nombre del producto depende solo de Producto: media clave.

Cómo se arregla: partir en LineaPedido(Pedido, Producto, Cantidad) y Producto(Producto, NombreProducto).

3FN — Tercera forma normal

Cumple 2FN y ningún atributo no primo depende de otro que no sea superclave. Es la que corta las dependencias transitivas: clave → X → Y.

Ejemplo que falla: R(Empleado, Departamento, Ciudad) con Empleado → Departamento y Departamento → Ciudad. La clave es {Empleado}, así que 2FN se cumple sin esfuerzo, pero la ciudad cuelga del departamento, no de la persona.

Cómo se arregla: Empleado(Empleado, Departamento) y Departamento(Departamento, Ciudad).

BCNF — Forma normal de Boyce-Codd

Más estricta que 3FN: toda dependencia no trivial debe arrancar de una superclave, sin la excepción que 3FN concede cuando la parte derecha es un atributo primo.

Ejemplo que falla: R(Estudiante, Asignatura, Profesor), donde cada profesor imparte una sola asignatura y cada estudiante tiene un profesor por asignatura: Estudiante,Asignatura → Profesor y Profesor → Asignatura. Hay dos claves candidatas, {Estudiante, Asignatura} y {Estudiante, Profesor}, y los tres atributos son primos: 2FN y 3FN se cumplen sin nada que objetar. Pero Profesor no es superclave, así que BCNF falla.

Cómo se arregla: Profesor(Profesor, Asignatura) y Matricula(Estudiante, Profesor). Ojo: esta descomposición conserva los datos pero pierde la dependencia Estudiante,Asignatura → Profesor, que ya no se puede comprobar en una sola tabla. A veces se acepta quedarse en 3FN precisamente por esto.

Qué anomalías evita cada paso

Normalizar no es un ejercicio de estética: cada forma normal elimina un tipo concreto de problema con los datos. Con la tabla R(Empleado, Departamento, Ciudad) del ejemplo transitivo se ven las tres.

AnomalíaQué ocurreEjemplo
De inserciónNo se puede registrar un hecho sin inventarse otro que no toca.No puedes anotar que Logística está en Rosario hasta que contrates a alguien.
De borradoAl borrar una fila se pierde información que nada tenía que ver.Si se va el único empleado de Logística, desaparece también su ciudad.
De actualizaciónEl mismo dato está repetido en muchas filas y se corrige a medias.Logística se muda: hay que tocar 40 filas y basta con olvidar una para que la base se contradiga a sí misma.

Dicho corto: 2FN quita la redundancia que provoca depender de media clave; 3FN quita la que provoca depender de un dato que tampoco es clave; y BCNF quita la que sobrevive cuando hay claves candidatas solapadas.

Cuándo NO conviene normalizar del todo

La normalización optimiza la escritura: cada dato en un solo sitio, sin contradicciones posibles. Pero lo paga la lectura, porque recomponer la información exige más uniones entre tablas. En sistemas donde se lee mucho más de lo que se escribe, esa cuenta puede no salir.

La desnormalización deliberada consiste en volver a duplicar datos a propósito, sabiendo lo que se pierde y con un plan para mantenerlos coherentes. Casos habituales:

  • Almacenes analíticos. Un esquema en estrella junta dimensiones enteras en una tabla para evitar cadenas de uniones en informes que se lanzan miles de veces al día.
  • Valores históricos. El precio de una línea de factura se guarda en la propia línea, no se consulta en el producto: no es redundancia, es que el precio de venta de aquel día es un dato distinto del precio actual.
  • Totales precalculados. Guardar el número de comentarios de una publicación evita un recuento en cada visita. A cambio, ese contador puede desviarse de la realidad y necesita mantenimiento.
  • Bases de datos documentales. Muchos motores no relacionales incrustan a propósito los datos que se leen juntos, aceptando la duplicación como parte del diseño.

El orden importa

El criterio habitual es normalizar primero hasta 3FN o BCNF y desnormalizar después, solo donde una medición demuestre que hace falta, dejando escrito por qué. Desnormalizar antes de medir es duplicar datos a ciegas: se pagan las anomalías sin cobrar el rendimiento.

Apps relacionadas