Cargando aplicación...
Preparando tu experiencia meskeIA
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.
Cuatro relaciones clásicas de clase, cada una con un defecto distinto. Cárgalas y mira el diagnóstico.
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.
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.
Dependencias funcionales, cierres, claves y las cuatro formas normales, con ejemplos
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 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.
{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.
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.
Están encajadas: BCNF implica 3FN, que implica 2FN, que implica 1FN. Por eso, cuando una falla, todas las de arriba fallan también.
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.
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).
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).
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.
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ía | Qué ocurre | Ejemplo |
|---|---|---|
| De inserción | No 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 borrado | Al 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ón | El 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.
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:
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.