Anomalías por redundancia, dependencias funcionales y el camino de normalización de 1NF a BCNF, con el algoritmo de descomposición de cada forma.
Guardar el mismo dato más de una vez en una relación no es solo un desperdicio de espacio: abre la puerta a inconsistencias. A esos problemas se les llama anomalías, y son la razón de fondo por la que se normaliza.
La normalización existe para eliminar anomalías minimizando la pérdida de información. Cada forma normal es un criterio cada vez más estricto para decidir si un esquema es 'bueno'.
La solución de fondo, que ocupa el resto del capítulo, es descomponer la tabla problemática en tablas más pequeñas que ya no arrastren esa redundancia.
Antes de normalizar hay que poder describir con precisión cómo se relacionan los atributos entre sí. Esa herramienta es la dependencia funcional (DF).
Se lee "X determina a Y": si dos tuplas comparten el mismo valor en el conjunto de atributos X, están obligadas a compartir también el mismo valor en Y. Importante: X no tiene que ser una llave — puede ser cualquier subconjunto de atributos.
X → Y es trivial si Y ⊆ X (no aporta información nueva).X → Y e Y → Z, entonces X → Z.Z ⊆ Y y X → Y, entonces X → Z.X → Y y X → Z, entonces X → Y, Z.X → Y, entonces para cualquier Z, X, Z → Y, Z.Si X → Y y Y cubre todos los atributos de la relación que no están en X, entonces X es superllave (y llave candidata si es mínima). Este criterio se usa constantemente para encontrar todas las llaves de un esquema.
Una relación está en 2NF si está en 1NF y, además, ninguna llave candidata tiene dependencias parciales: ningún atributo no primo (uno que no pertenece a ninguna llave) depende funcionalmente de solo una parte de una llave candidata compuesta. Todo atributo no primo debe depender de la llave completa.
La dependencia parcial solo puede existir si la llave candidata es compuesta (más de un atributo). Si todas las llaves candidatas de la relación son de un solo atributo, la relación ya está en 2NF automáticamente.
Una relación está en 3NF si está en 2NF y, para toda dependencia funcional no trivial X → Y de la relación, se cumple al menos una de estas dos condiciones:
X es superllave, oY es parte de alguna llave candidata (es decir, Y es "primo").3NF es más permisivo que BCNF: acepta un poco más de redundancia a cambio de garantizar que ninguna dependencia funcional se pierda al descomponer. Es el trade-off central de esta clase.
X → Y mínima (sin dependencias inútiles), crea una tabla con esquema X ∪ Y.BCNF es la forma normal más estricta de las que ve el curso: para toda dependencia funcional no trivial X → Y de la relación, X debe ser superllave. No hay excepción como en 3NF.
Las anomalías reaparecen exactamente cuando existe una dependencia X → Y con X que no es superllave. Encontrar esa dependencia es el primer paso para descomponer.
X → Y que rompa BCNF (X no es superllave).R en dos tablas:R1(X ∪ Y), que se queda con la dependencia problemática.R2(atributos de R − Y), que remueve la parte derecha de la dependencia y conserva X.Descomponer a BCNF siempre es sin pérdida de información (el natural join reconstruye exactamente los datos originales), pero puede perder la validación directa de alguna dependencia funcional — algo que 3NF sí garantiza preservar.
Una descomposición es sin pérdida de información (lossless join) si al hacer el natural join de las tablas resultantes se recupera exactamente la relación original, sin filas fantasma. Es la condición mínima que cualquier descomposición debe cumplir — y por eso el énfasis constante en descomponer usando la dependencia funcional correcta.
El objetivo de toda esta cadena de formas normales es eliminar anomalías minimizando la pérdida — de información en 1NF/2NF/3NF, y aceptando en BCNF que a veces se pierde la validación directa de una dependencia a cambio de eliminar toda la redundancia.
A → B y A no es superllave").