Examen Final - 75.15. Base de Datos - 25/02/2009 [Foros-FIUBA::Wiki]
 

Examen Final - 75.15. Base de Datos - 25/02/2009

Cátedra: Ale (catedra unica)
Fecha: 5° Oportunidad - (2° Cuatrimestre) 2008
Día: 25/02/2009

Esta página está incompleta; podés ayudar completando el material.

Enunciado

Ejercicio I

Dadas las siguientes consultas en SQL:

Q1. SELECT A FROM R r1
      WHERE EXISTS (SELECT * FROM R
                      WHERE A=r1.B)
Q2. SELECT A FROM R
      WHERE B=ANY (SELECT A FROM R)

Elija y justifique una opción:

  1. Q1 y Q2 retornan exactamente el mismo resultado
  2. El resultado de Q1 siempre está contenido en el de Q2
  3. El resultado de Q2 siempre está contenido en el de Q1
  4. Ambas queries retornan resultados diferentes

Ejercicio II

Dado el siguiente esquema R(A,B,C,D):

  • <tex>AB \rightarrow C</tex>
  • <tex>ABC \rightarrow D</tex>
  • <tex>AC \rightarrow \rightarrow B</tex>

Elija y justifique una opción:

  1. El esquema no se encuentra en 3FN
  2. El esquema se encuentra en 3FN pero no en FNBC
  3. El esquema se encuentra en FNBC pero no en 4FN
  4. El esquema se encuentra en 4FN

Ejercicio III

En un momento dado se toma una imagen de la base de datos (persistida en disco) y se observa lo siguiente:

Atributo Valor
A 13
B 40
C 35
D 4
E 18

En ese mismo instante se examina el Log y se ve lo siguiente:

Caso a)

(T1,START;);(T1,C;35);(T1,D;450);(T2,START;);(T2,C;18);(T2,B;40);(T1,COMMIT;);
(START CHECKPOINT, (T2) ;);(END CHECKPOINT,;);(T2,D;18);(T3,START;);(T3,C;35);
(T3,E;18);(T2,A;13);(T3,COMMIT;);(T2,COMMIT;);

Caso B)

(T1,START;);(T1,D;4);(T2,START;);(T2,E;6);(T1,A;5);(START CHKPNT, (T1,T2) ;);
(T1,E;18);(T3,START;);(T3,C;35);(T3,A;13);(T2,COMMIT;);(T3,B;40);(T3,COMMIT;);
(END CHKPNT,;);(T1,A;18);(T1,COMMIT;);

Lo que se pide es indicar y justificar para cada caso si: El log fue generado con UNDO, o REDO, u otro.

Resolución

Ejercicio I

Q1 y Q2 retornan exactamente el mismo resultado.
Q1 retorna la columna A de todas las tuplas de R para las que existe alguna tupla que tenga en A, lo que esta tiene en B.
Q2 retorna la columna A de todas las tuplas de R para las que su valor de B pertenece a la columna A de otra tupla.

Por ejemplo, si tengo una tabla llamada Correlativas:

cod_mat Nombre Correlativa
61.03 AM2
62.03 F2 61.03
62.01 F1
62.03 F2 62.01
61.08 A2
61.10 AM3 61.08
61.10 AM3 61.03
75.40 AyP1
75.41 AyP2 75.40
75.07 AyP3 75.41

Estas Querys pasarían a ser:

Q1. SELECT cod_mat FROM Correlativas c1
      WHERE EXISTS (SELECT * FROM Correlativas c2
                      WHERE c2.cod_mat = c1.correlativa)
Q2. SELECT cod_mat FROM Correlativas c1
      WHERE c1.correlativa=ANY (SELECT cod_mat FROM Correlativas)

Por lo que ahora significa que traiga todas las materias que tienen alguna correlativa válida, por lo que la respuesta sería:

cod_mat
62.03
62.03
61.10
61.10
75.41
75.07

Ejercicio III

a) NO es UNDO porque no hay commit de T2 dentro del CKPT, y tampoco es REDO porque los cambios de T1 no estan reflejados en la BD habiendo terminado bien.

b) NO es UNDO porque no hay commit de T1 dentro del CKPT. Puede ser REDO porque no hay ninguna transacción que haya hecho commit antes de <START CKPT>, por ende no hay cambios en la BD

Discusión

Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.
materias/75/15/final_1_20090225_1.txt · Última modificación: 2014/01/19 20:05 por Estefi
 
Excepto donde se indique lo contrario, el contenido de esta wiki se autoriza bajo la siguiente licencia: CC Attribution-Noncommercial-Share Alike 3.0 Unported


Recent changes RSS feed Donate Powered by PHP Valid XHTML 1.0 Valid CSS Driven by DokuWiki