Las dependencias funcionales son restricciones que generalizan la idea de una llave para una relación, que nos permitirá mejorar nuestro diseño realizando el proceso de descomposición de relaciones.
1. Definición de dependencia funcional
Una dependencia funcional (DF) A1, A2, …, An → B1, B2, …, Bn en una relación R es una sentencia de la forma “Si dos tuplas de R coinciden en todos los atributos de A1, A2, …, An entonces ellos deben coincidir en todos los atributos B1, B2, …, Bn“; y se dice que “A1, A2, …, An determina funcionalmente a B1, B2, …, Bn“.
Si cada instancia de una relación R cumple una dependencia funcional dada, entonces se dice que R satisface la DF. En otras palabras, estamos afirmando una restricción en R.
A1, A2, …, An → B es llamada una dependencia “funcional” porque en principio hay una función que toma una lista de valores, uno por cada uno de los atributos de A1, A2, …, An y produce un valor único (o ninguno en absoluto) para B. Sin embargo, esta función no es el tipo usual de la función que conocemos en matemáticas, porque no hay manera de hacer cálculos. Por ejemplo, no podemos hacer cálculos en cadenas como “Star Wars”.
Ejemplo
Notamos que la relación Movies1 intenta hacer mucho, ya que mantiene información de tres diferentes relaciones: Movies, Studio, y StarsIn. Así que definimos las dependencias funcionales de esta relación.
title year → length genre studioName
Informalmente, esta dependencia funcional dice que si dos tuplas tienen el mismo valor en sus componentes title, y ellos también tienen el mismo valor en sus componentes year, entonces estas dos tupas deben tener el mismo valor en sus componentes lenght y sus componentes studioName. Esta afirmación tiene sentido, ya que creemos que no es posible que haya dos películas que se estrenen el mismo año con el mismo titulo (aunque podría haber películas con el mismo titulo estrenadas en diferente año). Por lo tanto, esperamos que dado un titulo y año, haya solo una única película.
title year → starName
Por otro lado, observamos que la sentencia anterior no es una dependencia funcional; ya que dado una película, es posible que hay mas de una estrella. Por lo que una dependencia funcional se debe cumplir para todas las posibles instancias de la relación, no sobre solo una de sus instancias.
2. Llaves de relaciones
Un conjunto de atributos {A1, A2, …, An} es una llave para una relación R si:
- Estos atributos determinan funcionalmente todos los otros atributos de la relación. Es decir, es imposible para dos tuplas distintas de R coincidir en todo A1, A2, …, An
- Un sunconjunto no propio de {A1, A2, …, An} determina todos los otros atributos de R. Es decir, una llave debe ser minimal.
Cuando una llave consiste de un solo atributo A, solemos decir que A – no {A} – es un llave.
Ejemplo
Los atributos {title, year, starName} forman una llave para la relación Movies1 de la figura 1.1.
- Mostramos que ellos determinan funcionalmente todos los otros atributos. Esto es, suponemos que dos tuplas coinciden en estos tres atributos: title, year, y starName. Porque ellos coinciden en title y year, entonces ellos deben coincidir en los otros atributos – lenght, genre, y studioName -. Por lo tanto, dos diferentes tuplas no pueden coincidir en todo title, year, y starName; de hecho ellos serían la misma tupla.
- Debemos argumentar que un subconjunto no propuo de {title, year, starName} determina funcionalmente a los otros atributos. Esto es, que title y year no determinan starName, porque muchas peliculas tienen más que una estrella. Por lo tanto {title, year} no es una llave. Por otro lado, {year, starName} no es una llave porque podríamos tener una estrella en dos películas en el mismo año; por lo tanto year starName → title no es una dependencia funcional. Además {title, starName} no es una llave, porque dos películas con el mismo titulo, realizadas en diferentes años, ocasionalmente tienen una estrella en común.
A veces una relación tiene más que una llave. Si es así, es común diseñar una de las llaves como llave primaria. En los sistemas de bases de datos comerciales, la opción de llave primaria puede influencias algunos problemas de implementación. Sin embargo, la teoría de dependencias funcionales no da un rol especial para las “llaves primarias”.
3. Super llaves
Un conjunto de atributos que contiene una llave es llamado super llave. Por lo tanto, cada llave es una super llave. Sin embargo, algunas super llaves no son llaves (minimales). Se nota que cada super llave satisface la primer condición de una llave: determina funcionalmente todos los atributos de la relación. Sin embargo, una super llave no necesita satisfaces la segunda condición: ser minimal.
Ejemplo
En la figura 1.1 hay muchas super llaves. No solo la llave {title, year, starName} es una super llave, cualquier conjunto que contenga estos atributos es una super llave, por ejemplo {title, year, starName. length, studioName}.
Comentarios
Publicar un comentario