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.
Normalización
La normalización es un proceso que consiste en comprobar que las tablas
(también denominadas relaciones en terminología propia del modelo relacional de datos) definidas cumplen unas determinadas condiciones. Se pretente garantizar la no existencia de redundancia y una cierta coherencia en la representación mediante un esquema relacional de las entidades y relaciones del modelo conceptual (diagrama E-R). Mediante la normalización se pueden solucionar diversos errores en el diseño de la base de datos así como mejorarlo. También se facilita el trabajo posterior del administrador de la base de datos y de los desarrolladores de aplicaciones.