====== Examen Final - 75.15. Base de Datos - 12/08/2009 ======
**Cátedra:** Ale (catedra unica)\\
**Fecha:** 2° Oportunidad - (2° Cuatrimestre) 2008\\
**Día:** 12/08/2009
Esta página está incompleta; podés ayudar completando el material.
===== Enunciado =====
==== Ejercicio I ====
Mostrar que A \rightarrow \rightarrow B y BC \rightarrow \rightarrow D implican AC \rightarrow \rightarrow D usando el tableau y el metodo chase para R=[A,B,C,D,E]
==== Ejercicio II ====
Estimar el tamaño de R(AB)|x|S(BC) si se cuenta con el siguiente histograma
^ ^ B<0 ^ B=0 ^ B>0 ^
| R | 500 | 100 | 400 |
| S | 300 | 200 | 500 |
Asumir que existen 100 valores diferenties de B<0 y 200 valores de B>0
==== Ejercicio III ====
Dada la tabla Notas:
^ Estudiante ^ Nota_BD ^ Nota_SII ^
| A | 4 | Null |
| B | Null | 9 |
| C | 10 | 8 |
La consulta:
SELECT Estudiante FROM Notas
WHERE (Nota_BD > Nota_SII
AND Nota_SII > 7
AND Nota_BD > 9 )
OR ( Nota_BD < 5)
Da como resultado:
- B y C Solamente
- A y C solamente
- A
- A, B y C
Elegir la respuesta correcta y justificar
==== Ejercicio IV ====
Sabiendo que el algoritmo de recuperacion (creacion de logs? no recuerdo) es UNDO/REDO, demostrar los registros que se generaron en el LOG.
Valores iniciales:
*salario = 1
*tax = 2
^ N° ^ Transaccion 1 ^ Transaccion 2 ^ Transaccion 3 ^
| 1 | | | Start |
| 2 | | | Read tax |
| 3 | | | tax=tax+1 |
| 4 | Start | | |
| 5 | Read Salario | | |
| 6 | salario = salario+1 | | |
| 7 | | | Write tax |
| 8 | | | commit |
| 9 | | start | |
| 10 | | Read tax | |
| 11 | | Read salario | |
| 12 | | tax= ...(no copie mas) | |
| 13 | | | |
| 14 | | | |
| 15 | | | |
| 16 | | | |
Esta tabla esta incompleta; no llegue a terminar de copiarla... A ver si alguien la puede completar.
===== Resolución =====
==== Ejercicio I ====
No estoy del todo seguro, pero lo encararía de esta forma.
Como busco demostrar que AC \rightarrow \rightarrow D es implicada por F = \{A \rightarrow \rightarrow B, BC \rightarrow \rightarrow D\} divido R en R1=[ACD] y R2=[ABCE] haciendo uso de la propiedad que indica que la descomposición de X \rightarrow \rightarrow Y se puede descomponer en R1=XY y R2=X(R-XY).\\
^ ^ A ^ B ^ C ^ D ^ E ^
^ R1 | a_1 | b_{12} | a_3 | a_4 | b_{15} |
^ R2 | a_1 | a_2 | a_3 | b_{24} | a_5 |
Ahora, para demostrar que F |= AC \rightarrow \rightarrow D , usando el conjunto de dependencias F tendría conseguir una fila que tenga todas las variables distinguidas. \\
La dmv A \rightarrow \rightarrow B se transforma en una dependencia de junta |x|[ AB ; ACDE]\\
Por lo que si ahora proyectamos sobre cada conjunto de la junta obtenemos: \\
* Por AB
^ A ^ B ^
| a_1 | b_{12} |
| a_1 | a_2 |
* Por ACDE
^ A ^ C ^ D ^ E ^
| a_1 | a_3 | a_4 | b_{15} |
| a_1 | a_3 | b_{24} | a_5 |
Si hacemos la junta de estas dos tablas, obtenemos las filas:
^ A ^ B ^ C ^ D ^ E ^
| a_1 | b_{12} | a_3 | a_4 | b_{15} |
| a_1 | b_{12} | a_3 | b_{24} | a_5 |
| a_1 | a_2 | a_3 | a_4 | b_{15} |
| a_1 | a_2 | a_3 | b_{24} | a_5 |
Pero como las filas 1 y 4 ya están en el tableau, no las agrego, por lo que ahora me queda:\\
^ ^ A ^ B ^ C ^ D ^ E ^
^ R1 | a_1 | b_{12} | a_3 | a_4 | b_{15} |
^ R2 | a_1 | a_2 | a_3 | b_{24} | a_5 |
^ Agregada por A \rightarrow \rightarrow B | a_1 | b_{12} | a_3 | b_{24} | a_5 |
^ Agregada por A \rightarrow \rightarrow B | a_1 | a_2 | a_3 | a_4 | b_{15} |
La dmv B \rightarrow \rightarrow D se transforma en una dependencia de junta |x|[ BD ; ABCE], por lo que si hacemos lo mismo que antes nos quedan las proyecciones:
* Por BD
^ B ^ D ^
| b_{12} | a_{4} |
| a_{2} | b_{24} |
| b_{12} | b_{24} |
| a_{2} | a_{4} |
* Por ABCE
^ A ^ C ^ D ^ E ^
| a_1 | b_{12} | a_{3} | b_{15} |
| a_1 | a_{2} | a_{3} | a_{5} |
| a_1 | b_{12} | a_{3} | a_{5} |
| a_1 | a_{2} | a_{3} | b_{15} |
Al hacer la junta de estas dos tablas, en particular la fila 4 de la primera con la 2 de la segunda, va a aparecer una fila con todos los valores distinguidos:
| a_{2} | a_1 | a_{2} | a_{3} | a_{4} | a_{5} |
==== Ejercicio II ====
No estoy del todo seguro, pero me dijeron que se hacía así.
Para estimar el tamaño de esa junta tenemos que calcular cada rango por separado y sumarlos:\\
* Para B < 0: \\ \frac{500*300}{100}
* Para B = 0: \\ 100*200
* Para B > 0: \\ \frac{400*500}{200}
Entonces nos queda: \\
\frac{500*300}{100} + 100*200 + \frac{400*500}{200} = 1500 + 20000 + 1000 = 22500
==== Ejercicio III ====
La respuesta es "A y C solamente".
==== Ejercicio IV ====
===== Discusión =====
Si ves algo que te parece incorrecto en la resolución y no te animás a cambiarlo, dejá tu comentario acá.