En una base de datos relacional, se produce una dependencia cuando la información almacenada en la misma tabla de la base de datos determina de forma ú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 de la cuarta forma normal estándar. 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. La cuarta forma normal se ocupa de las relaciones de muchos a uno en una base de datos.
Dependencia funcional versus dependencia multivaluada
Para comprender una dependencia multivaluada, es útil revisar qué es una dependencia funcional.
Si un atributo X determina de forma única un atributo Y, entonces Y depende funcionalmente de X. Esto se escribe como X -> Y. Por ejemplo, en la siguiente tabla de Estudiantes, Student_Name determina la Carrera:
Nombre_del_estudiante | Mayor |
---|---|
Ravi | Historia del Arte |
Beth | Química |
Esta dependencia funcional se puede escribir: Student_Name -> Major. Cada Student_Name determina exactamente una especialización y no más.
Si desea que la base de datos también realice un seguimiento de los deportes que practican estos estudiantes, podría pensar que la forma más sencilla de hacerlo es simplemente agregar otra columna titulada Deporte:
Nombre_del_estudiante | Mayor | Deporte |
---|---|---|
Ravi | Historia del Arte | Fútbol |
Ravi | Historia del Arte | Voleibol |
Ravi | Historia del Arte | Tenis |
Beth | Química | Tenis |
Beth | Química | Fútbol |
El problema aquí es que tanto Ravi como Beth practican varios deportes. Es necesario agregar una nueva fila por cada deporte adicional.
Esta tabla ha introducido una dependencia multivaluada porque la especialidad 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 varios valores podría convertirse en un problema en una base de datos grande y compleja.
Una dependencia multivaluada se escribe X ->-> Y. En este caso:
Nombre_Estudiante ->-> Major
Nombre_Estudiante ->- > Deporte
Esto se lee como "Student_Name multidetermina Major" y "Student_Name multidetermina Sport".
Una dependencia multivaluada siempre requiere al menos tres atributos porque consta de al menos dos atributos que dependen de un tercero.
Dependencia multivalor y normalización
Una tabla con una dependencia multivaluada viola el estándar de normalización de la cuarta forma normal porque crea redundancias innecesarias y puede contribuir a la inconsistencia de los datos. 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 no tiene dependencias multivaluadas:
Nombre_del_estudiante | Mayor |
---|---|
Ravi | Historia del Arte |
Ravi | Historia del Arte |
Ravi | Historia del Arte |
Beth | Química |
Beth | Química |
Si bien esta tabla también tiene una sola dependencia funcional de Student_Name -> Deporte:
Nombre_del_estudiante | Deporte |
---|---|
Ravi | Fútbol |
Ravi | Voleibol |
Ravi | Tenis |
Beth | Tenis |
Beth | Fútbol |
La normalización a menudo se logra 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.