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: {ABD, BCD, ACE} FD2: {ABD, BCD, ACE, CA} FD3: {ABD, BACD, ACE, CB} ¿Cuál es la clausura de A, B y C respecto de F1? A+FD1? X0 = A B+ FD1? X1 = ABD por ABD X2 = ABDC por BCD X3 = ABDCE por ACE X4 = ABDCE Como X3 = X4, terminamos el algoritmo, y tenemos que A+ FD1 = ABCDE X0 = B C+ FD1? X1 = BCD por BCD 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 XY de FD1, entonces Y pertenece a X+FD2, y que para cada DF XY 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: ¿CA 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, CA 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: {CA} FD3-FD2: {BA, CB} ¿FD2-FD3 se infiere de FD3? Hay que verificar CA respecto de FD3 Recordemos que FD3: {ABD, BACD, ACE, CB} A está en C+FD3? X0 = C X1 = CB por CB X2 = CBAD por BACD Podemos detener el cálculo acá, ya que encontramos A en C+ FD3 (CA pertenece a FD3+…) Luego, FD2-FD3 se infiere de FD3. ¿FD3-FD2 se infiere de FD2? Hay que verificar BA y CB respecto de FD2 Recordemos que FD2: {ABD, BCD, ACE, CA} A está en B+FD2? X0 = B X1 = BCD por BCD X2 = BCDA por CA Podemos detener el cálculo acá, ya que encontramos A en B+ FD2 B está en C+FD2? 2 X0 = C X1 = CA por CA X2 = CABD por ABD 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: {ABD, BCD, ACE} Paso 1: Dejar todos los lados derechos con un único atributo Hay que descomponer dos DF: ABD, BCD. Queda así: CubMin = {AB, AD, BC, BD, ACE} Paso 2: Eliminar todos los atributos redundantes del lado izquierdo. Hay que analizar solamente la DF que tiene lado izquierdo compuesto: ACE C es redundante en ACE? 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 ACE y podemos reemplazar esta DF por AE 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 = {AB, AD, BC, BD, AE} 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. AB es redundante en CubMin? Hay que verificar si B está en A+CubMin-{AB} Tenemos que CubMin - {AB} = {AD, BC, BD, AE}. A+CubMin-{AB} = ADE. Luego AB no es redundante. CubMin queda igual. AD es redundante en CubMin? Hay que verificar si D está en A+CubMin-{AD} 3 Sergio D’Arrigo Clases Prácticas Base de Datos – DF y FN – 10 y 17/09/2010. 2C.2010 Tenemos que CubMin - {AD} = {AB, BC, BD, AE}. A+CubMin-{AD} = ABECD. Luego AD es redundante. La eliminamos de CubMin. El nuevo CubMin queda {AB, BC, BD, AE} BC es redundante en CubMin? Hay que verificar si C está en B+CubMin-{BC} Tenemos que CubMin - {BC} = {AB, BD, AE}. B+CubMin-{BC} = BD. Luego BC no es redundante. CubMin queda igual. BD es redundante en CubMin? Hay que verificar si D está en B+CubMin-{BD} Tenemos que CubMin - {BD} = {AB, BC, AE}. B+CubMin-{BD} = BC. Luego BD no es redundante. CubMin queda igual. AE es redundante en CubMin? Hay que verificar si E está en A+CubMin-{AE} Tenemos que CubMin - {AE} = {AB, BC, BD}. A+CubMin-{AE} = ABCD. Luego AE no es redundante. CubMin queda igual. No quedan más DF por analizar. Por lo tanto, tenemos que {AB, BC, BD, AE} 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 = {ABC, ABCD y DC} 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 ABC no hay atributos redundantes - En ABCD, el atributo C es redundante (verificar!), por lo cual lo eliminamos, dejando la dependencia como ABD - DC trivialmente no tiene atributos redundantes en la parte izquierda Habiendo realizado los 3 pasos, el conjunto de dependencias obtenido es {ABC, ABD, DC}, y claramente no es un cubrimiento minimal, ya que la dependencia ABC es redundante !!! Ejercicios para pensar: - Calcular un cubrimiento minimal de FD2… ¿Se pueden obtener distintos cubrimientos minimales aplicando el algoritmo? (Pista: tomar F={AB, BA, ABC}) - Sean FD4 = {AB, BC, CA} y FD5 = {AC, CB, BA}. ¿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: {ABD, BCD, ACE} ACF+ FD1? X0 = ACF X1 = ACFBDE por ABC y ADE 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 ABD X2 = AFBDC por BCD X3 = AFBDCE por ACE 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: {ABD, BCD, ACE} 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 DAEF ni DBC . 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: {ABD, BCD, ACE} 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 ABCD. 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: {ABD, BCD, ACE} 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 XY, 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: - - - ABD 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 BCD ACE… 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 XY 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: {ABD, BCD, ACE} Las dependencias ABD y BCD se preservan trivialmente ya que están incluidas en r1 Resta verificar la dependencia ACE 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={AB}. La descomposición R1=(AB) y R2=(BC), es SPDF pero no es SPI. Sea R = (ABC), F={ABC, CA}. 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: {ABD, BCD, ACE} 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: {ABD, BCD, ACE, CA} 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={ABCD, CAB} 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 = {ABC, CA, CD} FD5 = {ABC, CD} FD6 = {ABC, ABD, CA} FD7 = {ABD, AC, CA} FD8 = {ABC, ABD} ¿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 XA perteneciente a F, el lado izquierdo es siempre una superclave. 3FN: En toda dependencia no trivial XA 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 = {ABC, CA, CD} 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 CA y CD violan BCNF, ya que C no es superclave Está en 3FN? No, porque CD viola 3FN, ya que C no es superclave y D no es primo Está en 2FN? No, porque CD 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 = {ABC, CD} 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 CD viola BCNF, ya que C no es superclave Está en 3FN? No, porque CD 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 = {ABC, ABD, CA} 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 CA viola BCNF, ya que C no es superclave Está en 3FN? Sí, porque ABD (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 = {ABD, AC, CA} 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 = {ABD, AC, CA} Está en BCNF? No, porque CA y AC violan BCNF, ya que ni C ni A son superclaves Está en 3FN? Sí, porque ABD (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 = {ABC, ABD} 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: {ABD, BCD, ACE, BFG, GB }. ¿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: {AB, AE, BC, BD, BFG, GB }. 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 {AB, AE, BC, BD, BFG, GB } 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 AB y AC tienen la misma parte izquierda, se unifican AB y AE en ABE. Como las dependencias BC y BD 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 AB, hubiesen quedado los esquemas AB y AFG. Sobre el primero se proyectaba AB, pero BFG y GB se perdían. De todos modos, deberíamos proyectar una nueva DF (AFG) sobre AFG , que se obtenía aplicando pseudotransitividad sobre AB y BFG. Igualmente no hubiese sido una buena elección, ya que nos hacía perder dos DF. 16 Sergio D’Arrigo