Clase practica de DF y FN.

Anuncio
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Ej.1.Sea la relación R = (A, B, C, D, E, F) y el conjunto de dependencias funcionales
FD1: {ABD, BCD, ACE}
FD2: {ABD, BCD, ACE, CA}
FD3: {ABD, BACD, ACE, CB}
¿Cuál es la clausura de A, B y C respecto de F1?
A+FD1?
X0 = A
B+ FD1?
X1 = ABD
por ABD
X2 = ABDC
por BCD
X3 = ABDCE
por ACE
X4 = ABDCE
Como X3 = X4, terminamos el algoritmo, y tenemos que A+ FD1 = ABCDE
X0 = B
C+ FD1?
X1 = BCD
por BCD
X2 = BCD
Como X1 = X2, terminamos el algoritmo, y tenemos que B+ FD1 = BCD
X0 = C
X1 = C
Como X0 = X1, terminamos el algoritmo y tenemos que C+ FD1 = C
Notar que de lo anterior se desprende que ni A, ni B, ni C son superclaves de la relación, ya que la clausura de ninguno
de ellos es todo R.
Pregunta: Si tenemos calculada X1+ y X2+... ¿Podemos decir que (X1X2)+ = X1+ U X2+?
¿Son equivalentes FD1 y FD2?
(Equivalentes: FD1+ = FD2+)
Hay que verificar que todas las DF de FD1 se infieren de FD2 (FD2 cubre a FD1) y que todas las
de FD2 se infieren de FD1 (FD1 cubre a FD2). O lo que es lo mismo, que para cada DF XY de
FD1, entonces Y pertenece a X+FD2, y que para cada DF XY de FD2, entonces Y pertenece a
X+FD1.
Para las dependencias que están en la intersección de FD1 y FD2 esto se cumple trivialmente… sólo queda por analizar
las dependencias que no pertenecen a la intersección.
1
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Como FD1 está incluido en FD2, entonces FD2 cubre a FD1.
Para ver que todas las DF de FD2 se infieren de FD1, nos falta analizar la única dependencia que pertenece a FD2-FD1:
¿CA se infiere de FD1? O lo que es lo mismo… ¿A pertenece a C+ FD1?
Como lo habíamos calculado anteriormente, C+ FD1 = C.
Como A no pertenece a C+ FD1, CA no se infiere de FD1 y por lo tanto FD1 no cubre a FD2.
Por lo tanto, FD1 y FD2 no son equivalentes. (Notar que con encontrar una DF que no se infiera alcanza para decir que
los conjuntos de DF no son equivalentes, no hace falta encontrar todas las que no se infieran)
¿Son equivalentes FD2 y FD3?
Procediendo igual que antes, hay que verificar que todas las DF de FD3-FD2 se infieren de
FD2 y que todas las de FD2-FD3 se infieren de FD3.
FD2-FD3: {CA}
FD3-FD2: {BA, CB}

¿FD2-FD3 se infiere de FD3?
Hay que verificar CA respecto de FD3
Recordemos que FD3: {ABD, BACD, ACE, CB}
A está en C+FD3?
X0 = C
X1 = CB
por CB
X2 = CBAD
por BACD
Podemos detener el cálculo acá, ya que encontramos A en C+ FD3 (CA pertenece a FD3+…)
Luego, FD2-FD3 se infiere de FD3.

¿FD3-FD2 se infiere de FD2?
Hay que verificar BA y CB respecto de FD2
Recordemos que FD2: {ABD, BCD, ACE, CA}
A está en B+FD2?
X0 = B
X1 = BCD
por BCD
X2 = BCDA
por CA
Podemos detener el cálculo acá, ya que encontramos A en B+ FD2
B está en C+FD2?
2
X0 = C
X1 = CA
por CA
X2 = CABD
por ABD
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Podemos detener el cálculo acá, ya que encontramos B en C+ FD2
Luego, FD3-FD2 se infiere de FD2.
Por lo tanto, FD2 y FD3 son equivalentes.
¿Cuál es el cubrimiento minimal de FD1?
El algoritmo dice:
1. Descomponer todas las DF en dependencias normalizadas (lado derecho con un único atributo)
2. Eliminar todos los atributos redundantes del lado izquierdo.
3. Eliminar todas las dependencias funcionales redundantes.
Recordemos FD1: {ABD, BCD, ACE}
Paso 1: Dejar todos los lados derechos con un único atributo
Hay que descomponer dos DF: ABD, BCD. Queda así:
CubMin = {AB, AD, BC, BD, ACE}
Paso 2: Eliminar todos los atributos redundantes del lado izquierdo.
Hay que analizar solamente la DF que tiene lado izquierdo compuesto: ACE
C es redundante en ACE? Hay que verificar si E está en A+FD1
Como habíamos calculado antes, A+ FD1 = ABCDE.
Como E está en A+FD1, entonces C es redundante en ACE y podemos reemplazar esta DF por AE
Si el primer atributo que analizamos no fuese redundante, hay que seguir analizando uno a uno el resto de los
atributos del lado izquierdo hasta encontrar uno redundante y proceder como hicimos acá. Si no encontramos
ningún atributo redundante del lado izquierdo, la dependencia tiene que quedar sin modificaciones en CubMin.
Ojo, podría pasar que más de un atributo sea redundante. En ese caso hay que quitar sólo uno de ellos y volver
a verificar de nuevo la redundancia para esa dependencia (si el lado izquierdo quedó compuesto).
CubMin = {AB, AD, BC, BD, AE}
Paso 3: Eliminar todas las dependencias funcionales redundantes.
Hay que revisar una por una todas las DF. En caso de que una sea redundante, se la elimina de CubMin y se sigue
analizando el resto tomando como referencia el nuevo CubMin.
AB es redundante en CubMin? Hay que verificar si B está en A+CubMin-{AB}
Tenemos que CubMin - {AB} = {AD, BC, BD, AE}.
A+CubMin-{AB} = ADE. Luego AB no es redundante. CubMin queda igual.
AD es redundante en CubMin? Hay que verificar si D está en A+CubMin-{AD}
3
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Tenemos que CubMin - {AD} = {AB, BC, BD, AE}.
A+CubMin-{AD} = ABECD. Luego AD es redundante. La eliminamos de CubMin.
El nuevo CubMin queda {AB, BC, BD, AE}
BC es redundante en CubMin? Hay que verificar si C está en B+CubMin-{BC}
Tenemos que CubMin - {BC} = {AB, BD, AE}.
B+CubMin-{BC} = BD. Luego BC no es redundante. CubMin queda igual.
BD es redundante en CubMin? Hay que verificar si D está en B+CubMin-{BD}
Tenemos que CubMin - {BD} = {AB, BC, AE}.
B+CubMin-{BD} = BC. Luego BD no es redundante. CubMin queda igual.
AE es redundante en CubMin? Hay que verificar si E está en A+CubMin-{AE}
Tenemos que CubMin - {AE} = {AB, BC, BD}.
A+CubMin-{AE} = ABCD. Luego AE no es redundante. CubMin queda igual.
No quedan más DF por analizar.
Por lo tanto, tenemos que {AB, BC, BD, AE} es un cubrimiento minimal de FD1
Comparando los diagramas, se puede apreciar intuitivamente lo que pasó…
4
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Muy importante!!! No alterar el orden de los pasos en el algoritmo, podría no alcanzarse un cubrimiento minimal…
Por ejemplo, supongamos que tenemos R=ABCD y F = {ABC, ABCD y DC} y apliquemos el algoritmo
intercambiando los pasos 2 y 3… (no lo haremos en detalle, sólo mostramos aspectos relevantes… queda como ejercicio
verificar las afirmaciones de este ejemplo…)
Paso 1.- Como todas las partes derechas tienen un único elemento, FMin = F
Paso 3.- Eliminar dependencias redundantes… No hay. FMin no cambia
Paso 2.- Eliminamos atributos redundantes de partes izquierdas…
-
En ABC no hay atributos redundantes
-
En ABCD, el atributo C es redundante (verificar!), por lo cual lo eliminamos, dejando la
dependencia como ABD
-
DC trivialmente no tiene atributos redundantes en la parte izquierda
Habiendo realizado los 3 pasos, el conjunto de dependencias obtenido es {ABC, ABD, DC}, y claramente
no es un cubrimiento minimal, ya que la dependencia ABC es redundante !!!
Ejercicios para pensar:
-
Calcular un cubrimiento minimal de FD2… ¿Se pueden obtener distintos cubrimientos minimales aplicando el
algoritmo? (Pista: tomar F={AB, BA, ABC})
-
Sean FD4 = {AB, BC, CA} y FD5 = {AC, CB, BA}. ¿Es FD5 en cubrimiento minimal de FD4?
¿Es ACF una clave de la relación R respecto de FD1?
Para ello, debería cumplirse que ACF es superclave y además es minimal.

Veamos si es superclave… Hay que verificar si ACF+ FD1=R …
Recordemos que FD1: {ABD, BCD, ACE}
ACF+ FD1?
X0 = ACF
X1 = ACFBDE
por ABC y ADE
Como X1 = R, entonces ACF es superclave…

Veamos si es minimal… Hay que verificar minimal que no existe ningún subconjunto estricto de ADF que determine
funcionalmente a todo R.
Probemos por ejemplo con AF
AF+FD1?
X0 = AF
X1 = AFBD
por ABD
X2 = AFBDC
por BCD
X3 = AFBDCE
por ACE
Como X3 = R, entonces AF es superclave…
5
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Como ACF es superclave pero no es minimal, entonces podemos afirmar que ADF no es una clave de la relación R
respecto de FD1
Si quisiéramos encontrar todas las claves, podríamos probar este procedimiento con las diferentes combinaciones de
atributos, aunque claramente no sería eficiente … Más adelante veremos el algoritmo para encontrar claves de una
relación respecto de un conjunto de dependencias funcionales, que evita probar con todas las combinaciones.
¿La descomposición de R en R1=(A, D, E, F) y R2= (B, C, D) es SPI respecto de FD1?
(Repasando… SPI = …)
Recordemos que FD1: {ABD, BCD, ACE}
Como la descomposición es binaria, para saber si es SPI basta con verificar si R1∩R2  R1-R2 o R1∩R2  R2-R1. Si
alguna de las dos dependencias se cumple, entonces es SPI.
Instanciando, tenemos que R1∩R2 = D, R1-R2 = AEF y R2-R1=BC.
Como D+FD1=D, vemos que no se cumplen ni DAEF ni DBC . Por lo tanto, esta descomposición no es SPI.
Tarea: encontrar un ejemplo que permita mostrar que la descomposición anterior no es SPI.
¿La descomposición de R en R1=(A, E, F) y R2= (A, B, C, D) es SPI respecto de FD1?
Recordemos que FD1: {ABD, BCD, ACE}
Igual que antes, basta con verificar si R1∩R2  R1-R2 o R1∩R2  R2-R1. Si alguna de las dos dependencias se cumple,
entonces es SPI.
Instanciando, tenemos que R1∩R2 = A, R1-R2 = EF y R2-R1=BCD.
Como A+FD1=ABCDE, vemos que se cumple que ABCD. Por lo tanto, esta descomposición es SPI.
¿La descomposición de R en R1=(A, E, F), R2= (A, B, C) y R3= (B, D) es SPI respecto de FD1?
Recordemos que FD1: {ABD, BCD, ACE}
Al ser una descomposición en más de dos relaciones, tenemos que aplicar el Algoritmo del Tableaux.
Se arma una matriz con las relaciones en las filas y los atributos en las columnas. Cada elemento (i,j) tendrá valor aj si el
atributo de la columna j está en la relación de la fila i, En caso contrario, tendrá valor bij.
Luego se realizan iteraciones aplicando las siguientes transformaciones: Para cada DF XY, si varias filas tienen idéntico
valor en la columnas correspondientes a los atributos X, igualar para esas filas las columnas correspondientes a los
atributos Y, de acuerdo a lo siguiente: si alguno de ellos es aj , todos los de esa columna quedarán con valor aj para las
filas mencionadas. Si ninguno es aj , todos se igualarán con alguno de los bij. La iteración termina cuando se pasó por
todas las DF, o cuando alguna fila tiene todos valores ai. Si luego de la iteración no se logró esta condición se deben
volver a realizar iteraciones hasta encontrar todos valores ai en una fila o hasta que una iteración completa no modifique
la matriz. Si se encontró una fila con ai, la descomposción es SPI, si no, no lo es.
6
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Apliquemos el algoritmo:
Inicio:
A
B
C
D
E
F
R1 = AEF
a1
b12
b13
b14
a5
a6
R2 = ABC
a1
a2
a3
b24
b25
b26
R3 = BD
b31
a2
b33
a4
b35
b36
Iteración 1:
-
-
-
ABD
A
B
C
D
E
F
R1 = AEF
a1
a2
b13
b14
a5
a6
R2 = ABC
a1
a2
a3
b14
b25
b26
R3 = BD
b31
a2
b33
a4
b35
b36
A
B
C
D
E
F
R1 = AEF
a1
a2
a3
a4
a5
a6
R2 = ABC
a1
a2
a3
a4
b25
b26
R3 = BD
b31
a2
a3
a4
b35
b36
BCD
ACE…
No hace falta seguir, la primer fila tiene todos ai ¡!! Por lo tanto, la descomposición es SPI
Pregunta: si hubiésemos elegido las DF en otro orden (por ej a la inversa)… ¿hubiésemos obtenido el mismo resultado?
¿Hubiese podido terminar el algoritmo en la primera iteración?
7
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
¿La descomposición de R en R1=(A, B,C, D) y R2= (A, E, F) es SPDF respecto de FD1?
(Repasando… SPDF = …)
El algoritmo para determinar si una descomposición es SPDF es el siguiente:
Para toda df XY en el conjunto DF hacer
Si todos los atributos de df pertenecen a una de las relaciones ri , esa dependencia se conserva trivialmente.
Si no pasa lo anterior, verificar si df se conserva mediante el siguiente método
Z := X
Repetir
Para cada relación Ri
Z := Z U ((Z∩Ri)+ ∩Ri)
Hasta que Z no cambie luego de una iteración o hasta que Z incluya a Y.
Si Z incluye a Y, la dependencia se conserva.
Veámoslo en el ejercicio
Recordemos que R1 = (A, B, C, D), R2 = (A, E, F) y FD1: {ABD, BCD, ACE}
Las dependencias ABD y BCD se preservan trivialmente ya que están incluidas en r1
Resta verificar la dependencia ACE
Aplicando el algoritmo queda…
Z:= AC
Iteración 1
(tomando R1)
Z = AC U ((AC ∩ ABCD)+ ∩ ABCD)
= AC U ( AC+ ∩ ABCD)
= AC U ( ACEBD * ABCD)
= AC U ABCD = ABCD
(tomando R2)
Z = ABCD U ((ABCD ∩ AEF)+ ∩ AEF)
= ABCD U ( A+ ∩ AEF)
= ABCD U ( ABDCE ∩ AEF)
= ABCD U AE = ABCDE
Como Z incluye a E, la dependencia se conserva, (y el algoritmo termina…)
Como todas las dependencias se conservan , la descomposición es SPDF
8
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Pregunta… si una descomposición es SPI… ¿necesariamente tiene que ser SPDF? ¿y a la inversa?
Veamos los siguientes ejemplos…
Sea R = (ABC), F={AB}. La descomposición R1=(AB) y R2=(BC), es SPDF pero no es SPI.
Sea R = (ABC), F={ABC, CA}. La descomposición R1=(BC) y R2=(CA), es SPI pero no es SPDF.
Queda como ejercicio la verificación de las afirmaciones anteriores.
¿Cuales son todas las claves de la relación R respecto de FD1?
Algoritmo para búsqueda de todas las claves.
Paso 1.- Obtener el conjunto S de atributos que no figuran en un lado derecho de una DF
Paso 2.- Verificar si ese conjunto es superclave. Si lo es, es clave UNICA!
Paso3.- Si no lo era, agregar paulatinamente a S todas las combinaciones posibles de subconjuntos de R-S (todos los de
cardinalidad 1, luego de los de 2, etc) (llamémoslo S’) y verificar si cada uno de esos conjuntos es superclave. En este
paso se deben obviar todos aquellos S’ que contienen una superclave ya calculada, ya que no van a ser minimales.
Todos los conjuntos de atributos obtenidos que determinaban a todo R son las claves.
Veámoslo en el ejercicio…
Recordemos que R = (A, B, C, D, E, F) y FD1: {ABD, BCD, ACE}
S = AF
AF+FD1?
AF+ = AFBDCE. Como es igual a R, es CLAVE UNICA !!! (y el algoritmo termina…)
¿Cuales son todas las claves de la relación R respecto de FD2?
Recordemos que R = (A, B, C, D, E, F) y FD2: {ABD, BCD, ACE, CA}
S=F
F+FD1?
F+ = F. Como no es igual a R, no es clave
Verificando con 1 atributo adicional
FA+FD4?
FA+ = FABDCE. Como es igual a R, es clave !! Igual hay que seguir buscando más…
FB+FD4?
FB+ = FBCDAE Como es igual a R, es clave !! Igual hay que seguir buscando más…
FC+FD4?
FC+ = FCABDE Como es igual a R, es clave !! Igual hay que seguir buscando más…
FD+FD4?
FD+ = FD. Como no es R, no es clave
FE+FD4?
FE+ = FE. Como no es R, no es clave
Verificando con un atributo adicional sobre los anteriores que no eran clave.
Notar que no tiene sentido agregarle A, B o C a FD o FE, ya que sería superclave (no minimal)… sólo tenemos que
considerar entonces a D y F (cuando corresponda)
9
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
FDE+FD4?
2C.2010
FDE+ = FDE. Como no es R, no es clave
El caso faltante FED en realidad es el mismo que FDE, ya que se trata de conjuntos.
Al no haber más combinaciones por probar, el algoritmo termina.
Las claves son FA, FB y FC
IMPORTANTE!
Un error común es pensar que una clave minimal es la clave que tiene menos atributos… es decir que si por ej, tengo
una clave minimal de 2 atributos, las claves de 3 atributos no son minimales… este razonamiento no es correcto!!!
Puede haber claves minimales con diferente cantidad de atributos para una misma relación y conjunto de dependencias
funcionales. Una clave es minimal si ningún subconjunto de ella es clave (y no tiene nada que ver con el tamaño de las
otras claves).
Por ejemplo, supongamos que tenemos R=ABCD y F={ABCD, CAB}
Calculemos sus claves aplicando el algoritmo:
Como todos los atributos figuran en la parte de alguna dependencia, partimos de S=vacío
Seguimos agregando atributos de a 1, 2, etc… y vemos si son clave
A+F= A.
A no es clave
B+F = B.
B no es clave
C+F=CABD.
C es clave!
D+F=D.
D no es clave
Por lo que decíamos antes, aquí no hay que frenar aunque hayamos encontrado una clave de 1 atributo, tenemos que
seguir buscando si hay claves con más atributos, siguiendo el algoritmo…
AB+F=ABCD.
AB Es clave!
+
AD no es clave
+
BD no es clave
AD F=AD.
BD F=BD.
No se puede seguir más… Si quisiéramos agregarle atributos a AD o BD, tendríamos superclaves…
Por lo tanto, todas las claves de R respecto de F son C y AB
10
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Ej.2.Sea la relación R2 = (A, B, C, D) y los siguientes conjuntos de dependencias funcionales:
FD4 = {ABC, CA, CD}
FD5 = {ABC, CD}
FD6 = {ABC, ABD, CA}
FD7 = {ABD, AC, CA}
FD8 = {ABC, ABD}
¿En qué forma normal está R2 respecto de FD4?
Recordemos…
Sean X un conjunto de atributos incluido en R y A un atributo simple perteneciente a R…
BCNF: En toda dependencia no trivial XA perteneciente a F, el lado izquierdo es siempre una superclave.
3FN: En toda dependencia no trivial XA perteneciente a F, el lado izquierdo es siempre una superclave o Y es atributo
primo.
2FN: Ningún atributo no primo depende parcialmente de alguna clave.
Vayamos al ejercicio…
Teníamos que FD4 = {ABC, CA, CD}
Calculemos la clave… arrancamos con B, ya que es el único atributo que no figura de un lado derecho…
B+FD4 = B – no es clave
Agregando 1 atributo…
BA+FD4 = BACD – por lo tanto BA es clave
BC+FD4 = BCAD – por lo tanto BC es clave
BD+FD4 = BD – no es clave
No podemos agregar más atributos, (agregando A o C se convertiría siempre en superclave)
Las claves respecto de FD4 son BA y BC
Los atributos primos son A, B y C, en tanto que D es el único atributo no primo.
Veamos ahora la forma normal:
Está en BCNF? No, porque CA y CD violan BCNF, ya que C no es superclave
Está en 3FN? No, porque CD viola 3FN, ya que C no es superclave y D no es primo
Está en 2FN? No, porque CD viola 2FN, ya que D no es primo y depende parcialmente de la clave BC.
Por lo tanto, la relación R2 está en 1FN respecto de FD4
11
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
¿En qué forma normal está R2 respecto de FD5?
Recordemos que FD5 = {ABC, CD}
Calculemos la clave… arrancamos con AB, ya que son los atributos que no figuran de un
lado derecho…
AB+FD5 = ABCD – Por lo tanto AB es CLAVE UNICA (la unicidad se da porque ningún
atributo de la clave figura del lado derecho de un dependencia…
Los atributos primos son A y B, en tanto que los no primos son C y D
Veamos ahora la forma normal:
Está en BCNF? No, porque CD viola BCNF, ya que C no es superclave
Está en 3FN? No, porque CD viola 3FN, ya que C no es superclave y D no es primo
Está en 2FN? Sí, porque tanto C como D (los atributos no primos) dependen totalmente de todas las claves (en este caso
hay clave única)
Por lo tanto, la relación R2 está en 2FN respecto de FD5
¿En qué forma normal está R2 respecto de FD6?
Recordemos que FD6 = {ABC, ABD, CA}
Calculemos la clave… arrancamos con B, ya que es el atributo que no figura de un lado
derecho…
B+FD6 = B – Por lo tanto no es clave
Agregando 1 atributo…
BA+FD4 = BACD – por lo tanto BA es clave
BC+FD4 = BCAD – por lo tanto BC es clave
BD+FD4 = BD – no es clave
No podemos agregar más atributos, (agregando A o C se convertirtía siempre en superclave)
Las claves respecto de FD4 son BA y BC
Los atributos primos son A, B y C, en tanto que D es el único atributo no primo
Veamos ahora la forma normal:
Está en BCNF? No, porque CA viola BCNF, ya que C no es superclave
Está en 3FN? Sí, porque ABD (la única DF con un atributo no primo del lado derecho) tiene una superclave en el lado
izquierdo. Esto es válido para F+
Por lo tanto, la relación R2 está en 3FN respecto de FD6
12
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
¿En qué forma normal está R2 respecto de FD7?
Recordemos que FD7 = {ABD, AC, CA}
Calculemos la clave… arrancamos con B, ya que es el atributo que no figura de un lado
derecho…
B+FD6 = B – Por lo tanto no es clave
Agregando 1 atributo…
BA+FD4 = BACD – por lo tanto BA es clave
BC+FD4 = BCAD – por lo tanto BC es clave
BD+FD4 = BD – no es clave
No podemos agregar más atributos, (agregando A o C se convertirtía siempre en superclave
Las claves respecto de FD7 son BA y BC
Los atributos primos son A, B y C, en tanto que D es el único atributo no primo
Veamos ahora la forma normal:
Recordemos que FD7 = {ABD, AC, CA}
Está en BCNF? No, porque CA y AC violan BCNF, ya que ni C ni A son superclaves
Está en 3FN? Sí, porque ABD (la única DF con trivial on un atributo no primo del lado derecho) tiene una superclave en
el lado izquierdo. Esto es válido para F+
Por lo tanto, la relación R2 está en 3FN respecto de FD7
¿En qué forma normal está R2 respecto de FD8?
Recordemos que FD8 = {ABC, ABD}
Calculemos la clave… arrancamos con AB, ya que es el atributo que no figura de un lado
derecho…
AB+FD8 = ABCD – – Por lo tanto AB es CLAVE UNICA (la unicidad se da porque ningún
atributo de la clave figura del lado derecho de un dependencia…
Los atributos primos son A y B, en tanto que los no primos son C y D
Veamos ahora la forma normal:
Está en BCNF? Sí, porque todas las DF tienen una superclave del lado izquierdo
13
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Ej.3.Sea la relación R3 = (A, B, C, D, E, F, G) y el siguiente conjunto de dependencias
funcionales:
FD9: {ABD, BCD, ACE, BFG, GB }.
¿En qué forma normal está R3 respecto de FD9?
Para esto calcularemos la clave y un cubrimiento minimal (esto último nos permite
trabajar a partir de F en lugar de F+).
La clave de este esquema respecto de FD9 es AF (clave única). Los atributos primos son AF y los no primos son BCDEG.
Se puede apreciar fácilmente que no está en BCNF ni en 3FN.
Igualmente lo veremos en forma detallada.
Si calculamos el cubrimiento minimal obtenemos:
FD9min: {AB, AE, BC, BD, BFG, GB }.
Está en BCNF? No, porque todas las df (son todas no triviales) violan BCNF, ya que no
tienen superclave del lado izquierdo.
Está en 3FN? No, porque todas las df (son todas no triviales) violan BCNF, ya que no
tienen superclave del lado izquierdo ni lado derecho primo.
Está en 2FN? No, ya que los atributos B, C, D y E no son primos y dependen parcialmente de la clave AF.
Por lo tanto, la relación R3 está en 1FN respecto de FD9.
Calcular para R3 y DF9 una descomposición en 3FN SPI SPDF.
El algoritmo es el siguiente:
Precondición: la relación no está ya en 3FN.
1.- Calcular las claves y un cubrimiento minimal del conjunto de DF (CubMin).
2.- Para cada DF de CubMin, crear un esquema de relación conteniendo a todos los atributos involucrados en ella.
3.- Si ninguna clave del esquema está en una relación, agregar un nuevo esquema con los atributos de una de las claves.
4.- Si las df de dos relaciones tienen idéntica parte izquierda, unificar esas dos relaciones. Lo mismo se hace si una
relación está incluida en otra.
La descomposición resultante está en 3FN y es SPI y SPDF
Vamos al ejercicio…
Como vimos, la única clave es AF, y {AB, AE, BC, BD, BFG, GB } es un cubrimiento minimal de FD9.
Creamos un esquema de relación por cada df, a saber AB, AE, BC, BD, BFG y GB.
14
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
Como la clave AF no está en ningún esquema, agregamos uno nuevo que la contenga. Tenemos entonces AB, AE, BC, BD,
BFG, GB y AF.
Como las dependencias AB y AC tienen la misma parte izquierda, se unifican AB y AE en ABE.
Como las dependencias BC y BD tienen la misma parte izquierda, se unifican BC y BD en BCD.
Como GB está incluido en BFG, se unifican en BFG.
Por lo tanto, nuestra descomposición 3FN SPI y SPDF queda {ABE, BCD, BFG, AF}
Calcular para R3 y DF9 una descomposición en BCNF SPI.
El algoritmo es el siguiente:
Precondición: la relación no está ya en BCNF.
1.- Calcular las claves y un cubrimiento minimal del conjunto de DF (Esto último no es indispensable, pero simplifica el
trabajo facilitando el cálculo de las DFs que se proyectan sobre los esquemas).
2.- Elegir una DF que viole BCNF, y generar una nueva relación con todos los atributos de esa DF. Quitar de la relación
original los atributos que estaban en la parte derecha de la DF. Esta descomposición en SPI por la regla de
descomposición binaria.
3.- Proyectar las DF de F+ sobre las dos relaciones generadas. Si todos los atributos de una DF están en una relación, se
proyecta trivialmente sobre ella. Como partimos de un cubrimiento minimal, para verificar la proyección de F+ alcanza
con aplicar transitividad y pseudotransitividad sobre las DF del cubrimiento minimal.
4.- Si alguna de las dos relaciones no quedó en BCNF, se debe proseguir con este algoritmo recursivamente hasta que
todas cumplan BCNF.
Una heurística interesante es elegir las DF cuyo lado derecho no figure en ningún lado izquierdo de otra DF (o figure en
la menor cantidad posible). Esto reduce la necesidad de aplicar transitividad o pseudotransitividad. También es
interesante generar esquemas de dos atributos, ya que estos están siempre en BCNF.
Vamos al ejercicio…
15
Sergio D’Arrigo
Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010.
2C.2010
A partir de lo desarrollado, obtenemos una descomposición BCNF SPI con los siguientes esquemas {AE, BC, BD, AB, BG y
BF}.
Con la descomposición anterior podríamos dejarlo (de hecho, en la resolución de ejercicios no exigiremos más pasos).
De todos modos, al igual que en el algoritmo de síntesis, podemos fusionar relaciones resultantes que tengan
proyectada dependencias con idéntico lado izquierdo. Aplicando lo antedicho, podríamos unificar AE con AB, y también
BC con BD. Con esta mejora, la descomposición BCNF SPI queda {ABE, BCD, AF, BG, FG}. Comentario: esto es muy
importante hacerlo en casos reales, ya que la descomposición resultante del algoritmo en general estará muy
fragmentada, como consecuencia de basarnos en dependencias que siempre tienen un único elemento en el lado
derecho (por pertenecer a un cubrimiento minimal).
Notar que si cuando teníamos la relación ABFG hubiésemos elegido para descomponer según AB, hubiesen quedado
los esquemas AB y AFG. Sobre el primero se proyectaba AB, pero BFG y GB se perdían. De todos modos,
deberíamos proyectar una nueva DF (AFG) sobre AFG , que se obtenía aplicando pseudotransitividad sobre AB y
BFG. Igualmente no hubiese sido una buena elección, ya que nos hacía perder dos DF.
16
Sergio D’Arrigo
Descargar