4.1.3 Dependencias Funcionales

Dependencia Funcional

Una dependencia funcional, denotada por X -> Y, entre dos conjuntos de atributos X y Y que son subconjuntos de R (R ={A1, A2,...,A3}) especifica una restricción sobre las posibles tuplas que podrían formar un ejemplar de relación r de R.  La restricción dice que, para  cualesquier dos tuplas t1 y t2 de r tales que t1[X] = t2[X], debemos tener también t1[Y] = t2[Y].  Esto significa que los valores componentes de Y de una tupla de r dependen de los valores del componente X, o están determinados por ellos; o bien, que los valores del componente X de una tupla determinan de manera única (o funcionalmente) los valores del componente Y.  También decimos que hay una dependencia funcional de X a Y o que Y depende funcionalmente de X. 
 

Sean a y b atributos de una misma tabla o relación T. Se dice que b es funcionalmente dependiente de a y se denota T.a -> T.b o bien simplemente a -> b si todo posible valor de a tiene asociado un único valor de b, o lo que es lo mismo, en todas las tuplas de T en las que el atributo a toma el mismo valor v1, el atributo b toma también un mismo valor v2.  Claramente a -> b no implica b -> a. Pueden repetirse los valores del atributo b para distintos valores de a. Un mismo atributo puede determinar funcionalmente a varios atributos lo cual se denota a -> (b1, b2, ...). Puede darse una  dependencia funcional mutua: a -> b y b -> a o lo que es lo mismo a <-> b. Nóse que el concepto de dependencia funcional no depende de la extensión concreta (contenido) que en un momento determinado tenga la tabla sino de cualquier posible extensión que pudiera tener.

Los atributos a y b pueden ser simples o compuestos (formados por la agregación de varios atributos). Los atributos funcionalmente dependientes pueden o no formar parte de la clave primaria de la tabla, de una clave altenativa o de una clave ajena de otra tabla.

El atributo b es funcionalmente dependiente de forma completa de a si a -> b y b no depende funcionalmente de ningún subconjunto de atributos de a. Si a es un atributo simple y a -> b entonces la dependencia funcional es con seguridad completa.

Las dependencias funcionales verifican una serie de propiedades denominadas axiomas de Armstrong:

    Reflexividad. A partir de cualquier atributo o conjunto de atributos siempre puede deducirse él mismo. Dependencia trivial: x -> x.

    Aumentatividad. Si x -> y entonces x+z -> y. Así se puede aumentar trivialmente el antecedente de una dependencia. Ejemplo: si con el dni se determina el nombre de una persona, entonces con el dni más la dirección también se determina el nombre.

    Proyectividad. Si x -> y+z entonces x -> y. Ejemplo: si a partir del dni es posible deducir el nombre y la dirección de una persona, entonces con el dni es posible determinar el nombre.

    Aditividad. Si x -> y y z -> w entonces x+z -> y+w. Ejemplo: si con el dni se determina el nombre y con la dirección el teléfono de una persona, entonces con el dni y la dirección podrá determinarse el nombre y el teléfono.

    Transitividad o enlace de dependencias funcionales. Si x -> y e y -> z entonces x -> z. Ejemplo: si con el dni puede determinarse el código de la provincia de residencia de una persona y con éste código puede determinarse el nombre de la provincia, entonces con el dni puede determinarse el nombre de la provincia. Éste es el mecanismo básico de funcionamiento del enlace entre tablas a partir de claves ajenas.

Ejemplo: Dependencias funcionales 
Ejemplo: 
a.Empleado_departameto 
    nombre    nss    fecha_n    dirección    numero_dep    nombre_dep

b.Empleado_proyecto 
    nss    numero_proy    horas    nombre_emp    nombre_proy    lugar_proy

Emp_proy 
- nss -> nombre (el nss del empleado determina de forma única el nombre de ese empleado) 
- numero_proy -> {nombre_proy,lugar_proy} 
- {nss, numero_proy} -> horas