Dependencias multivaluadas

Si existe más de un atributo multivaluado es cuando se presentan dependencias multivaluadas.

Definición: en una relación con los atributos X, Y y Z existe una dependencia multivaludada de Y con respecto a X si los posibles valores de Y para un par de valores de X y Z dependen únicamente del valor de X.

Supongamos que en nuestra relación anterior de Agenda añadimos otro atributo para guardar direcciones de correo electrónico. Se trata, por supuesto, de otro atributo multivaluado, ya que cada persona puede tener más de una dirección de correo, y este atributo es independiente del número de teléfono:

Agenda(nombre, fecha_nacimiento, estado_civil, teléfono, correo)

Ahora surgen los problemas, supongamos que nuestro amigo "Fulano", además de los tres números de teléfono, dispone de dos direcciones de correo. ¿Cómo almacenaremos la información relativa a estos datos? Tenemos muchas opciones:

Agenda
nombre    fecha_nacimiento   estado_civil   teléfono   correo
Fulano    13/02/1960         casado         13321232   fulano@sucasa.eko
Fulano    13/02/1960         casado         25565445   fulano@sutrabajo.aka
Fulano    13/02/1960         casado         36635363   fulano@sucasa.eko

Si optamos por crear tres tuplas, ya que hay tres teléfonos, y emparejar cada dirección con un teléfono, en la tercera tupla estaremos obligados a repetir una dirección. Otra opción sería usar un NULL en esa tercera tupla.

Agenda
nombre    fecha_nacimiento   estado_civil   teléfono   correo
Fulano    13/02/1960         casado         13321232   fulano@sucasa.eko
Fulano    13/02/1960         casado         25565445   fulano@sutrabajo.aka
Fulano    13/02/1960         casado         36635363   NULL

Pero estas opciones ocultan el hecho de que ambos atributos son multivaluados e independientes entre si. Podría parecer que existe una relación entre los números y las direcciones de correo.

Intentemos pensar en otras soluciones:

Agenda
nombre    fecha_nacimiento   estado_civil   teléfono   correo
Fulano    13/02/1960         casado         13321232   fulano@sucasa.eko
Fulano    13/02/1960         casado         25565445   fulano@sucasa.aka
Fulano    13/02/1960         casado         36635363   fulano@sucasa.eko
Fulano    13/02/1960         casado         13321232   fulano@sutrabajo.eko
Fulano    13/02/1960         casado         25565445   fulano@sutrabajo.aka
Fulano    13/02/1960         casado         36635363   fulano@sutrabajo.eko
Agenda
nombre    fecha_nacimiento   estado_civil   teléfono   correo
Fulano    13/02/1960         casado         13321232   NULL
Fulano    13/02/1960         casado         25565445   NULL
Fulano    13/02/1960         casado         36635363   NULL
Fulano    13/02/1960         casado         NULL       fulano@sutrabajo.eko
Fulano    13/02/1960         casado         NULL       fulano@sucasa.eko

Ahora está claro que los atributos son independientes, pero el precio es crear más tuplas para guardar la misma información, es decir, mayor redundancia.

Pero no sólo eso. Las operaciones de inserción de nuevos datos, corrección o borrado se complican. Ninguna de esas operaciones se puede hacer modificando sólo una tupla, y cuando eso sucede es posible que se produzcan inconsistencias.

Cuarta forma normal (4FN)

La cuarta forma normal tiene por objetivo eliminar las dependencias multivaluadas.

Definición: Una relación está en 4NF si y sólo si, en cada dependencia multivaluada X ->-> Y no trivial, X es clave candidata.

Una dependencia multivaluada A ->-> B es trivial cuando B es parte de A. Esto sucede cuando A es un conjunto de atributos, y B es un subconjunto de A.

Tomemos por ejemplo la tabla de Agenda, pero dejando sólo los atributos multivaluados:

Agenda(nombre, teléfono, correo)

Lo primero que debemos hacer es buscar las claves y las dependencias. Recordemos que las claves candidatas deben identificar de forma unívoca cada tupla. De modo que estamos obligados a usar los tres atributos para formar la clave candidata.

Pero las dependencias que tenemos son:

  • nombre ->-> teléfono
  • nombre ->-> correo

Y nombre no es clave candidata de esta relación.

Resumiendo, debemos separar esta relación en varias (tantas como atributos multivaluados tenga).

Teléfonos(nombre, teléfono)
Correos(nombre, correo)

Ahora en las dos relaciones se cumple la cuarta forma normal.

Quinta forma normal (5FN)

Existe una quinta forma normal, pero no la veremos en este curso. Sirve para eliminar dependencias de proyección o reunión, que raramente se encuentran en las bases de datos que probablemente manejaremos. Si tienes interés en saber más sobre este tema, consulta la bibliografía.