4.3 DEPENDENCIAS FUNCIONALES Y TRANSITIVAS
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
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
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
- 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
Comentarios
Publicar un comentario