Las dependencias funcionales son propiedades de nuestro sistema de información que implican denpendencias entre sus atributos y por tanto deben formar parte del esquema de nuestro sistema, que podemos representar de la siguiente manera:
R(A:D, DEP)
Siendo: R la relación.
A: el conjunto de atributos.
D dominio de los atributos.
DEP: restricciones del sistema.
En este apartado vamos a estudiar las dependencias funcionales y no tienen interés los dominios por tanto representaremos nuestras relaciones de la siguiente manera:
R (A, DF)
Tenemos una relación R y A es el conjunto de sus atributos si X e Y son dos subconjuntos de A, también llamados descriptores X e Y:
Se dice que un atributo o conjunto de atributos (descriptor) Y depende funcionalmente del atributo o conjunto de atributos (descriptor) X (X -> Y) si y solo si cada valor de X determina un único valor de Y.
Por ejemplo entre DNI y NOMBRE existe una dependencia funcional ya que un DNI determina un y solo un NOMBRE.
DNI -> NOMBRE (DNI determina NOMBRE, o NOMBRE depende funcionalmente de DNI)
Si suponemos que los nombres no se repiten tendríamos que:
NOMBRE -> DNI (NOMBRE determina DNI)
en este caso tenemos que la dependencia funcional se produce de forma biunívoca, pero no se da siempre esta situación.
Supongamos que una persona vive en una sola casa y los atributos DNI, CALLE:
DNI -> CALLE (DNI determina CALLE)
pero CALLE /-> DNI (CALLE no determina DNI) porque en una misma calle viven muchas personas.
Hay atributos entre los que no existe ninguna dependencia funcional, si consideramos DNI_AUTOR y TITULO_LIBRO, tendremos:
DNI_AUTOR / -> TITULO_LIBRO ya que un autor puede haber escrito muchos libros.
TITULO_LIBRO / -> DNI_AUTOR ya que hay libros escritos por varios autores y por tanto:
DNI_AUTOR <- / -> TITULO_LIBRO
Hay situaciones en las que no basta un atributo para determinar un único valor de otro atributo. Consideremos la situación (DNI, EMPRESA, SUELDO) en la que una misma persona puede trabajar en varias empresas y dependiendo de la empresa percibe diferente sueldo:
DNI,EMPRESA à SUELDO
También se da la situación contraria, un único atributo determina varios atributos:
DNI à NOMBRE|CALLE
El significado de las dependencias funcionales es el siguiente: tenemos la relación:
DNI -> NOMBRE
Por tanto siempre que tome dos tuplas de esta relación que tengan el mismo valor de DNI tendrán el mismo valor de NOMBRE, sin embargo como
DNI / -> ASIGNATURA
puedo tomar dos tuplas de la relación con el mismo valor de DNI y tendrán distinto valor para el atributo ASIGNATURA.
DEPENDENCIA FUNCIONAL TOTAL:
Tenemos una relación R y sea X un descriptor (atributo o conjunto de atributos de R) compuesto
X(X1,X2) se dice que un descriptor Y de R tiene una dependencia funcional total de X si:
Y depende funcionalmente del descriptor X y no depende funcionalmente de ningún subconjunto de X.
X -> Y pero X1 / -> Y y X2 / -> Y por tanto X => Y
Por ejemplo si tenemos un sistema formado por las personas que trabajan, donde una misma persona puede trabajar en varias empresas y dependiendo de la empresa percibe diferentes sueldos, tendremos:
R( DNI, NOMBRE, EMPRESA, SUELDO)
DNI,EMPRESA à NOMBRE
esta dependencia no es total ya que nombre queda determinado si solamente damos DNI, pero
DNI,EMPRESA à SUELDO
si es una dependencia funcional total ya que para conocer el sueldo necesitamos determinar la persona y la empresa.
DNI,EMPRESA => SUELDO
DEPENDENCIA FUNCIONAL TRIVIAL
Dada una relación R y dos descriptores de la relación X e Y, de manera que X -> Y, se dice que la dependencia funcional es trivial si Y es un subconjunto de X.
R( DNI, NOMBRE, EMPRESA, SUELDO)
DNI,EMPRESA à EMPRESA
Este tipo de dependencias no son útiles para la teoría de la normalización.
Dados dos descriptores X e Y de una relación R, se dice que son equivalentes sí X -> Y e
Y ->X.
Por ejemplo en la relación (NUM_MATRICULA, DNI, ASIGNATURA), siendo único el número de matrícula para cada alumno/a
NUM_MATRICULA -> DNI
DNI -> NUM_MATRICULA
Si tenemos una relación R(X, Y, Z) en la que existen las siguientes dependencias funcionales
X àY, Y à X pero Y à Z, se dice que Z tiene una dependencia funcional transitiva de X a través de Y y se representa
Si se da la situación de que Z /à Y se dice que la dependencia transitiva es estricta.
Consideremos el siguiente ejemplo: son datos asociados a un alumno: NUMMAT (número de matrícula), GRUASI (grupo asignado), AULGRU (aula correspondiente al grupo). Se cumplen los siguientes requisitos:
Un alumno solo tiene asignado un grupo.
A un grupo le corresponde un solo aula.
En este caso nos encontramos ante las siguientes dependencias funcionales:
NUMMAT -> GRUASI | AULGRU
GRUASI -> AULGRU
el atributo AULGRU depende transitivamente de NUMMAT ya que se puede conocer por medio del atributo GRUASI:
Se puede realizar un gráfico que nos de una visión clara de los datos utilizados por nuestro sistema y las dependencias que existen entre ellos.
El gráfico se realiza trazando un cuadrado y poniendo dentro los atributos primarios que no dependen de ningún otro, los atributos derivados se representan fuera de la caja. Si existen dependencias de varios atributos que no son clave irán en una caja pero en un rectángulo discontinuo para no confundirlo con la clave primaria:
Si consideramos el siguiente ejemplo: (A, B, C, M, N, O, P, Q, R, S)
A,B,C -> M|N|S
M -> N
B,C -> O|P|R
O -> P
C -> Q
el gráfico asociado será el siguiente: