Está en la página 1de 32

Algoritmos de Diseo Relacional

BD1 Ctedra BD

Normalizacin = Descomposin de cualquier forma?


La idea bsica de normalizacin es el reemplazo de un esquema de relacin por una descompocin en una forma normal ms alta. Sirve cualquier descomposicin?

BD1 Ctedra BD

Observaciones
Cuando normalizamos no alcanza slo con las analizar las dependencias. Es necesario definir claramente los criterios con que se van a construir las descomposiciones, teniendo en cuenta:
La no generacin de tuplas errneas. La preservacin o no de dependencias.
BD1 Ctedra BD 3

Descomposicin de Join Sin Prdida (JSP)


Una descomposicin D = {R1,, Rn} de un esquema de relacin R es de join sin prdida, si para toda r instancia de R se cumple que:
*(R1(r),, Rn(r)) = r donde * es el join natural.

Esto no hace otra cosa que exigir que no aparezcan tuplas errneas.
BD1 Ctedra BD 4

Test de JSP para Descomposiciones Binarias


Dada D={R1, R2}, descomposicin de R, va a tener join sin prdida si y slo si se cumple al menos una de las siguientes dependencias:
R1R2 R1 R2 R1R2 R2 R1

En otras palabras, hay JSP si los atributos comunes de los dos esquemas determinan a todos los atributos de uno de ellos.
BD1 Ctedra BD 5

Proyeccin de un Conjunto de Dependencias


Dados un conjunto de dfs F y un esquema R, la proyeccin de F sobre Ri subesquema de R es el conjunto de las dfs XY de F+ tal que XY Ri Se escribe como: Ri(F). Es el conjunto de dependencias que se cumple en Ri.
BD1 Ctedra BD 6

Preservacin de Dependencias Funcionales


Se dice que una descomposicin D={R1,, Rn} preserva dependencias si:
(R1(F) Rn(F))+ = F+

Se preservan las dependencias si la unin de las proyecciones es equivalente a F.


BD1 Ctedra BD 7

Test de Preservacin de DFs: Algoritmo


ENTRADA: Esquema R y D= {R1,...,Rk} (descomposicin de R) SALIDA : TRUE si la descomposicin preserva DFs FOR EACH X-->Y en F RESULTADO := X WHILE (CAMBIOS EN RESULTADO) DO FOR EACH Ri DE LA DESCOMPOSICIN T = (RESULTADO Ri)+ Ri con i=1..k RESULTADO := RESULTADO U T ENDFOR ENDWHILE IF Y no es subconjunto de RESULTADO RETORNAR (FALSE) ENDIF ENDFOR RETORNAR (TRUE)
BD1 Ctedra BD 8

Test de Preservacin de DFs: Algoritmo


- Si resultado contiene todos los atributos de Y, se conserva la dependencia funcional X Y. - La descomposicin conserva las dependencias si y slo si se conservan todas las dependencias de F.

BD1 Ctedra BD

Calidad de las Descomposiciones


Las descomposiciones ideales cumplen las siguientes dos condiciones:
Tienen JSP. Tienen Preservacin de Dependencias.

Se puede aceptar la prdida de dependencias, siempre y cuando se documente cules son las que se pierden. Nunca se pueden aceptar esquemas que tengan join con prdida (no tengan JSP).
BD1 Ctedra BD 10

Ejemplo de BCNF
Considrese la siguiente descomposicin: Cliente (nombre-cliente, calle-cliente, ciudadcliente) con F (nombre-cliente calle-cliente ciudad-cliente) Sucursal (nombre-sucursal, activo, ciudadsucursal) F (nombre-sucursal activo ciudadsucursal) Info-Prestamo (nombre-sucursal, nombrecliente, nmero-prstamo, importe) con F (nmero-prstamo importe nombre-sucursal)
BD1 Ctedra BD 11

Ejemplo de BCNF
nombre-cliente es clave candidata de Cliente nombre-sucursal es clave candidata de Sucursal numero-prestamo no es superclave de InfoPrestamo
Puede haber un par de tuplas pertenecientes a un prstamo: (Centro, Sr. Pinilla, P-44, 1.000) (Centro, Sra. Pinilla, P-44, 1.000) Y numero-prestamo importe nombre-sucursal no es trivial, entonces este esquema no est en BCNF Este esquema sufre del problema de repeticin de informacin (nombre-sucursal e importe, por ejemplo)
BD1 Ctedra BD 12

Ejemplo de BCNF
Considrese la descomposicin de join sin prdida de Info-Prestamo: Prestamo (numero-prestamo, nombre-sucursal, importe) con F (nmero-prstamo nombresucursal importe) Prestatario (nombre-cliente, nmero-prstamo) En la relacin Prestamo hay exactamente una tupla para cada prstamo, y una tupla para cada cliente de cada prstamo en la relacin de Prestatario.
BD1 Ctedra BD 13

Descomposicin a BCNF y 3NF


Analizaremos como descomponer a BCNF un esquema de relacin de forma tal que la descomposicin sea de join sin prdida. Cualquier esquema puede descomponerse de esta manera. Adicionalmente, cualquier esquema se puede descomponer a 3NF de forma tal que la descomposicin sea de join sin prdida y que adems preserve las dependencias. Sin embargo pueden haber descomposiciones a BCNF tales que sean de join sin prdida pero que no preservan las dependencias.
BD1 Ctedra BD 14

Algoritmo para Descomponer en 3NF con JSP y Preservacin de DFs


1. 2. Entrada: un esquema R y un conjunto de dfs F sobre R. Salida: una descomposicin de R en 3NF con JSP y que preserva DFs. Obtener G, cobertura minimal de F. Para cada miembro izquierdo X de una DF que aparezca en G
Crear un esquema X {Aj1,,Ajn} donde {Aj1,,Ajn} es el conjunto de los lados derechos de las dependencias de G que tienen X a la izquierda.

1.

3.

4.

Colocar los atributos restantes en una nueva relacin. Si no hay una clave de R incluida en los esquemas anteriores, se agrega un nuevo esquema cuyos atributos son los de la clave.
15

BD1 Ctedra BD

Ejemplo de Descomposicin en 3NF


Univ(CodM, CiE, IdGr, HrsS, Cred) F={CodMHrsS; CiEIdGr; HrsSCred} 1. Se calcula cubrimiento minimal. En particular, F ya es minimal. 2. Agregamos un esquema para cada lado izquierdo en F. R1(CodM,HrsS), R2(CiE,IdGr), R3(HrsS,Cred) 3. No hay atributos restantes. 4. La clave de Univ es {CodM,CiE}. Como no estn en ninguno de los esquemas, se agrega R4(CodM, CiE)
BD1 Ctedra BD 16

Algoritmo para Descomponer en BCNF con JSP


Entrada: un esquema R y un conjunto de dfs F sobre R. Salida: una descomposicin de R en BCNF con JSP 1. Sea D={R} /* la descomposicion inicial contiene slo el esquema original */ 2. Mientras haya un esquema Q en D tal que no est en BCNF.
1. Considerar XY sobre Q que viola BCNF. 2. Reemplazar Q en D por 2 esquemas Q1 = {Q-Y} y Q2={XY}.
BD1 Ctedra BD 17

Ejemplo de Descomposicin en BCNF


1. 2. Univ(CodM, CiE, IdGr, HrsS, Cred) F={CodMHrsS;CiEIdGr; HrsSCred} D={Univ(CodM, CiE, IdGr, HrsS, Cred)} a. Tomamos CodMHrsS que viola BCNF en Univ y Calculamos el nuevo D={Univ1(CodM,CiE,IdGr,Cred), Univ2(CodM,HrsS)}

BD1 Ctedra BD

18

Ejemplo de Descomposicin en BCNF (cont)


2. b. Proyectamos las dependencias para ver en que FN qued la descomposicin:
Univ1(CodM,CiE,IdGr,Cred) : {CiEIdGr; CodMCred} Univ2(CodM,HrsS): {CodMHrsS}

c. Como CiEIdGr viola BCNF, cambiamos Univ1 por:


Univ11(CodM,CiE,Cred), Univ12(CiE,IdGr)
19

BD1 Ctedra BD

Ejemplo de Descomposicin en BCNF (cont)


2. d. Proyectamos para ver si estamos en BCNF:
Univ11(CodM,CiE,Cred):{CodM Cred} Univ12(CiE,IdGr): {CiEIdGr}

e. CodMCred viola BCNF en Univ11, por lo que cambiamos Univ11por:


Univ111(CodM,CiE) Univ112(CodM,Cred)

BD1 Ctedra BD

20

Ejemplo de Descomposicin en BCNF (cont)


2. f. Proyectamos para verificar la Forma normal y obtenemos:
Univ111(CodM,CiE): {} Univ112(CodM,Cred): {CodMCred}

Los dos ltimos esquemas estn en BCNF. El resultado es D={Univ111(CodM,CiE), Univ112(CodM,Cred), Univ12(CiE,IdGr), Univ2(CodM,HrsS)}
21

BD1 Ctedra BD

Ejemplo de Descomposicin en BCNF (Comentarios 1)


Este proceso se puede representar con un rbol de descomposicin, en donde el resultado est dado por los esquemas de las hojas:
Univ(CodM, CiE, IdGr, HrsS, Cred) : {CodMHrsS;CiEIdGr; HrsSCred}

Univ1(CodM,CiE,IdGr,Cred): {CiEIdGr; CodMCred} Univ11(CodM,CiE,Cred): {CodM Cred}


Univ111(CodM,CiE): {}
BD1 Ctedra BD

Univ2(CodM,HrsS): {CodMHrsS}
Univ12(CiE,IdGr): {CiEIdGr}

Univ112(CodM,Cred): {CodMCred}
22

Ejemplo de Descomposicin en BCNF (Comentarios 2)


Hay que chequear si se preservaron todas las dependencias. Para eso hay que calcular la clausura del lado izquierdo de las dependencias que no quedaron directamente con respecto a la union de las proyecciones de las dependencias. G= univ111(F) univ112(F) univ12(F) univ2(F) G= { } {CodMCred} {CiEIdGr} {CodMHrsS} G= {CodMCred; CiEIdGr; CodMHrsS} {HrsS}G+={HrS}

CONCLUSION: No se preserv la dependencia HrsCred.


BD1 Ctedra BD 23

Ejemplo de Descomposicin en BCNF (Comentarios 2)


No es posible garantizar cuando este algoritmo va a perder dependencias o no lo va a hacer. Esto puede depender de muchas cosas, entre ellas, el orden en que se eligen las dependencias.
Ejercicio: aplicar el algoritmo tomando como primera dependencia HrsSCred.
BD1 Ctedra BD 24

Otros Clculos.
Para determinar en qu forma normal est un determinado esquema, es necesario conocer todas las claves. Para determinar si se perdieron dependencias, es necesario proyectar las dependencias. Se debera determinar cuando hay JSP, incluso en descomposiciones no binarias. Se van a presentar ideas para llevar adelante estas tareas.
BD1 Ctedra BD 25

Ideas para el Clculo de Todas las Claves


Para calcular todas las claves, habra que calcular las clausuras de todos los subconjuntos de atributos de la relacin, lo que sera calcular 2n clausuras. Se pueden seleccionar los conjuntos sobre los que se deben calcular las clausuras tomando en cuenta las siguientes ideas:
Los atributos que aparecen solamente del lado derecho de algunas dependencias, no estarn en ninguna clave. Los atributos que no aparecen del lado derecho de ninguna dependencia, estarn en todas las claves. Los atributos que no estn en ninguna de las categoras anteriores, pueden estar o no en una clave.
BD1 Ctedra BD 26

Ideas para el Clculo de Todas las Claves


Por lo tanto:
Si los atributos que estn en todas las claves, conforman entre ellos una clave, entonces esa es la nica clave de la relacin. Si ya se encontr una clave, no se debe probar con un conjunto con ms atributos, dado que ese sera una superclave.

Hay que tener en cuenta que pueden existir simultneamente varias claves de tamaos distintos.
BD1 Ctedra BD 27

Ejemplo: Determinacin de Todas las Claves


R(A,B,C,D,E,G) y F={ABDG, AE, GEA} Atributos en todas las claves: Tenemos garanta
ByC D

Atributos en ninguna clave: Clausuras:


BC+={B,C} No es clave BCA+={B,C,A,D,G,E} Es clave BCG+={B,C,G} BCE+={B,C,E} BCGE+={B,C,G,E,A,D} Es clave

de que son todas porque no podemos formar ms conjuntos de cada tamao y que sean claves.

BD1 Ctedra BD

28

Obtencin de clave K para R


Algoritmo. sea R = {ATR} y F = {DFs} 1.Hacer K:= R 2.Para cada atributo A en K calcular (K-A)+ respecto al conjunto F si (K-A)+ contiene todos los atributos de R, hacer K:= K A;

BD1 Ctedra BD

29

Test de JSP en Descomposiciones No Binarias


Entrada: Una relacin R, una descomposicin D de R y un conjunto de dependencias F. Salida: True si la D tiene JSP respecto a R y F, False en caso contrario. Crear una matriz S con la fila i para cada relacin Ri en D y la columna j para cada atributo Aj de R. Inicializar la matriz segn el siguiente criterio: Si el atributo Ai est en Ri, entonces S(i,j)=aj, sino S(i,j)=bi,j Repetir hasta que no haya cambios en la matriz Para cada df XY F, si hay dos filas que tengan iguales valores en X, se igualan los valores de Y. Si se obtiene un fila completa con as, entonces D tiene JSP, en caso contrario D no tiene JSP.
30

1.
2.

3.

4.

BD1 Ctedra BD

Ejemplo Test JSP


R(CiE, NomE, NumP, NomP, LugP, Hrs) R1(CiE,NomE), R2(CiE,NumP,Hrs), Inicializacin R3(NumP,NomP,LugP) F={CiENomE;NumPNomP,LugP; acol Si CiE,NumPHrs } Acol esta CiE NomE NumP NomP LugP Hrs en Rfil R1 a1 R2 a1 R3 b3,1 a2 b2,2 b3,2 b1,3 a3 a3 b1,4 b2,4 a4 b1,5 b2,5 a5 b1,6 a6 b3,6 bfil,col en todos los dems
31

BD1 Ctedra BD

Ejemplo Test JSP (cont)


R(CiE, NomE, NumP, NomP, LugP, Hrs) CiENomE R1(CiE,NomE), R2(CiE,NumP,Hrs), R3(NumP,NomP,LugP) NumPNomP,LugP F={CiENomE; NumPNomP,LugP; Al igualar CiE,NumPHrs } a con b, CiE NomE NumP NomP LugP Hrs se deja a. R a a b b b b
1 1 2 1,3 1,4 1,5 1,6

R2 a1 R3 b3,1

b2,2 a2 a3 b3,2 a3

b2,4 a4 a4

b2,5 a5 a6 a5 b3,6

Hay una fila de as JSP


32

BD1 Ctedra BD

También podría gustarte