Regularmente los textos que hablan sobre la normalización de bases de datos se detienen en la tercera forma por que asegura un buen nivel de calidad en el modelado. Sin embargo existen más formas normales. En este caso se hará una revisión general de la cuarta forma normal o 4FN.
Al igual que en las otras formas, la cuarta forma normal tiene como requisito el cumplir con su predecesora (la 3FN); si se cumple dicha condición, entonces se tienen que eliminar todas las relaciones muchos a muchos del modelo de datos para cumplir con la cuarta forma.
Las relaciones muchos a muchos provocan redundancia, y esto es lo que se quiere eliminar con la 4FN.
Modelo que no cumple con la cuarta forma normal
Consideremos una tabla de rutas de distribución de farmacias:
- ClaveFarmacia (Llave foránea de la clave de la farmacia)
- ClaveLineaProductos (Llave foránea de la clave de la línea de producto que se vende)
- ClaveZonaDistribucion (Llave foránea de la clave de la zona donde se distribuye la línea de producto en determinada farmacia).
Existen, obviamente, la tabla correspondiente a los datos generales de Farmacias, de Línea de productos y de Zonas de distribución, siendo la tabla mencionada solamente la tabla que «une» a todas ellas para determinar qué líneas de productos se venden en las farmacias y a qué zonas distribuye cada una de ellas.
Si bien el modelo cumple con la tercera forma normal (y por consiguiente con la segunda y por tanto con la primera) este modelo tiene una tabla que guarda varias relaciones muchos a muchos que podría tener algunas situaciones indeseables:
- Si la farmacia distribuye todas sus líneas de producto a sus Zonas de distribución, cada vez que se añada una nueva Línea se tendrán que generar varios registros (uno por cada Farmacia-Zona);
- Por otro lado, si se añade una nueva farmacia a la red, entonces hay que añadir un registro para cada línea que se venda y cada zona donde se distribuye cada zona.
Mejora del modelo cumpliendo con la 4FN
Si tratamos de eliminar la tabla que «une» las tres tablas (Farmacias, Líneas y Zonas) se podría lograr por medio de dos tablas
Tabla de Zonas de distribución con los siguientes campos:
- ClaveFarmacia
- ClaveZonaDistribucion
Tabla de Líneas vendidas en cada Farmacia con:
- ClaveFarmacia
- ClaveLineaProductos
Esto facilita el que una farmacia distribuya a una nueva zona (solo se añade un registro en la primera tabla) y si una farmacia vendierá una nueva línea entonces solo se añade un registro en la segunda tabla. No hay redundancia y el modelo es más claro (aunque se tenga que añadir una tabla al modelo).