Teoría:
R está en 3FN si y sólo si está en 2FN y todos los atributos no clave dependen de manera no transitiva de la clave primaria. |
En la práctica:
Tenemos que conseguir que NO haya dependencias funcionales de la forma ClavePrimaria --> B -->...--> C. NO hay que permitir que se pueda llegar desde la clave primaria hasta un atributo C siguiendo las dependencias funcionales entre atributos intermedios. Esta son las relaciones que tenemos hasta ahora:
Lo que hacemos es buscar dependencias funcionales entre los atributos que no son clave primaria de una misma relación. Sólo tenemos esa característica en la tabla S, escribimos el diagrama de dependencias funcionales sólo para los atributos implicados:
Fig.2. Depedencias transitivas existentes. |
Existe por tanto una dependencia transitiva, ya que si seguimos la flecha que parte de S# hasta ciudad podemos seguir hasta País.
El problema:
Las dependencias transitivas producen una serie de anomalías que afectan al rendimiento de la base de datos, éstas son:
La solución:
Teoría:
| Teorema (Heath):
Sea R una relación con atributos (A,B,C) y con clave primaria (A) tal que B --> C, entonces la relación R puede descomponerse como: R --> R1(A,B) y R2(B,C) |
En la práctica:
Tal y como dice el teorema, si tenemos ClavePrimaria --> B --> C, creamos una nueva relación R1(B,C) y dejamos en la relación anterior R(ClavePrimaria,B). En nuestro caso tenemos S# --> ciudad --> país. Con lo que finalmente podemos dividir la relación en las siguientes tablas:
o bien en
Ambas descomposiciones están en 3FN, pero ¿cuál es la mejor opción?.
En el primer caso podemos introducir información sobre las ciudades sin tener que conocer información alguna sobre el proveedor. Ceuta es una ciudad española independientemente de que el proveedor S1 resida en ella o no. En el segundo caso no podemos introducir información del país sin conocer antes el proveedor, es más, si cambia un proveedor la actualización será más dificil. En general las operaciones son más complejas según la última descomposición.
El motivo de todo esto tiene un nombre y es INDEPENDENCIA. En el primer caso ambas relaciones son indipendientes la actualización en una no afecta en otra y viceversa. En general esta propiedad es más que desable por eso si tenermos varias opciones nos decantaremos por aquellas descomposiciones que sean independientes, sin embargo hay que hacer constar que muchas veces nos encontraremos con relaciones que no pueden ser descompuestas en otras que no sean dependientes. Existe un teorema que nos servirá para comprobar si dos relaciones, R1 y R2, resultantes de haber descompuesto R son independientes.
Teoría:
| Teorema de Rissanen:
La descomposición en R1 y R2 de R es independiente si y sólo si:
|
En la práctica:
Hazlo tu mismo:
| Anterior | [1] | [2] | [3] | [4] | [5] | [6] | Siguiente |