En una base de datos relacional, se produce una dependencia cuando la información almacenada en la misma tabla de base de datos determina de manera única otra información almacenada en la misma tabla. Una dependencia multivaluada ocurre cuando la presencia de una o más filas en una tabla implica la presencia de una o más filas en esa misma tabla. Dicho de otra manera, dos atributos (o columnas) en una tabla son independientes entre sí, pero ambos dependen de un tercer atributo.
Una dependencia multivaluada impide la normalización estándar de la cuarta forma normal (4NF). Las bases de datos relacionales siguen cinco formas normales que representan pautas para el diseño de registros. Evitan anomalías de actualización e inconsistencias en los datos. El cuarto formulario normal trata de las relaciones entre varios en una base de datos.
Dependencia funcional frente a dependencia multivaluada
Para entender una dependencia multivaluada, es útil volver a examinar lo que es una dependencia funcional.
Si un atributo X determina unívocamente un atributo Y, entonces Y depende funcionalmente de X. Esto se escribe como X -> Y. Por ejemplo, en la tabla de Estudiantes de abajo, el Nombre_Estudiante determina el Mayor:
Nombre_del_estudianteNombreMayorRaviArte HistoriaBetoQuímicaEstudiantes
Esta dependencia funcional se puede escribir: Student_Name -> Major .
Si quieres que la base de datos también rastree los deportes que practican estos estudiantes, puedes pensar que la forma más fácil de hacerlo es añadir otra columna titulada Deporte:
Nombre_del_estudianteMayor parte delSportRaviArt HistoriaSoccerRaviArt HistoriaVolleyballRaviHistoria delArteTenisBethChemistryTenisBethChemistrySoccerStudents
El problema aquí es que tanto Ravi como Beth practican varios deportes. Es necesario añadir una nueva fila para cada deporte adicional.
Esta tabla ha introducido una dependencia multivaluada porque la carrera y el deporte son independientes entre sí, pero ambos dependen del estudiante. Este es un ejemplo simple y fácilmente identificable, pero una dependencia de valores múltiples podría convertirse en un problema en una base de datos grande y compleja.
Una dependencia multivaluada se escribe X ->-> Y. En este caso:
Student_Name ->-> Major
Student_Name ->-> Sport
Se lee como «Student_Name multidetermines Major» y «Student_Name multidetermines Sport».
Una relación de objetos multivaluada siempre requiere al menos tres atributos, ya que consta de al menos dos atributos que dependen de un tercero.
Dependencia y normalización multivaluada
Una tabla con una dependencia multivaluada viola el estándar de normalización de la cuarta forma normal (4NK) porque crea redundancias innecesarias y puede contribuir a la obtención de datos inconsistentes. Para llevar esto a 4NF, es necesario dividir esta información en dos tablas.
La siguiente tabla ahora tiene una dependencia funcional de Student_Name -> Major, y ninguna dependencia multivaluada:
Nombre_del_estudianteNombreMayoritariaHistoria deRaviArteHistoria deRaviArteBethChemistryBethChemistryStudents & Majors
Mientras que esta tabla también tiene una única dependencia funcional de Student_Name -> Sport:
Nombre_EstudianteSportRaviSoccerRaviVolleyballRaviTennisBethTennisBethSoccerStudents & Sports
Está claro que la normalización a menudo se aborda simplificando tablas complejas para que contengan información relacionada con una sola idea o tema, en lugar de tratar de hacer que una sola tabla contenga demasiada información dispar.