Segundo Parcial de Fundamentos de Bases de Datos
Noviembre 2016
Duración: 3 horas
Presentar la resolución del parcial:
Con las hojas numeradas y escritas de un solo lado.
Con la cantidad de hojas entregadas en la primer hoja.
Con cédula de identidad y nombre en cada hoja.
Escrita a lápiz y en forma prolija.
Ejercicio 1 ( 15 puntos)
Considere el esquema relación R(A,B,C,D,E,G), los conjuntos de dependencias funcionales F y J que se
detallan a continuación, y el subesquema de R: R1(A,B,C,D).
F = { AB C, CD AG, G B, E D, BD E}
J = {AB C, CD AGE, G B, E D, BD E, ABE G}
Determinar si las siguientes afirmaciones son verdaderas o falsas justificando cada respuesta.
1. F y J son equivalentes.
2. Todas las claves de R según F tienen por lo menos 2 atributos.
3. ABE es clave de R según F.
4. Existe un conjunto X R tal que X es clave de R según F pero no es clave de R según J.
5. La máxima forma normal que cumple R1 según F es 2NF.
6. R1 cumple 2NF según J.
Ejercicio 2 ( 20 puntos)
Dado el esquema relación R(A,B,C,D,E,G), el conjunto de dependencias funcionales F:
F = { A C, C DG, BD E, AB D, BC G }
y la descomposición de R : (R1(A,B,C), R2(C,D,G) ,R3(B,D,E)).
1. Determinar en que forma normal se encuentra R respecto de F. Justificar la respuesta.
2. Determinar si la descomposición dada es con JSP. Justificar la respuesta.
3. Determinar en que forma normal se encuentra . Justificar la respuesta.
4. Determinar si preserva las dependencias funcionales. Justificar la respuesta. En caso negativo
indicar que dependencias se pierden.
5. Sea J = F {B ->> A| C}. Determinar en que forma normal se encuentra con respecto a J.
Justificar la respuesta.
Ejercicio 3 ( 10 puntos)
La siguiente realidad corresponde a una Clínica Veterinaria en la cual se registra la atención de todas las
mascotas que son atendidas. Las tablas más importantes de la base son las siguientes:
Mascotas (matrícula, tipo, raza, nombre, teléfonoDueño): contiene la información de los animales que se
atienden en la clínica. La matricula los identifica, el tipo de animal indica si es perro, gato, pájaro, conejo,
etc.; además interesa la raza del mismo (perro bulldog, perro labrador, gato siamés, conejos enanos, etc.), el
nombre de la mascota y el teléfono de su dueño.
Veterinarios (ciVet, nombre, teléfono, especialidad): contiene la información de todos los veterinarios de la
clínica. La especialidad indica si es cirujano, si trabaja en medicina general o si es anestesista.
Atencion (ciVet, matrícula, fechaAtención): contiene la información de cada una de las atenciones a un
animal.
Sea la siguiente consulta SQL:
SELECT [Link]
FROM Atencion A, Veterinarios V, Mascotas M
WHERE [Link] = [Link] and [Link] = [Link]
and [Link] = "perro" and [Link] = "cirujano";
Se dispone de 5 buffers de memoria y se sabe que todos los atributos tienen distribución uniforme (recuerde
que V(A,T) es la cantidad de valores distintos que tiene un atributo A en una tabla T). Además, de cada tabla
se conoce la siguiente información:
Relación R nR Atributos Índices
- Índice primario sobre ciVet
V(nombre, V) = 25
Veterinarios V 100 - Indice Sec. árbol b+ sobre
V(especialidad, V) = 3
especialidad
- Índice primario sobre matrícula
Mascotas M 4000 V(tipo, M) = 8 - Indice Sec. árbol b+ sobre tipo
- Indice Sec. árbol b+ sobre raza
- Indice Primario sobre ciVet,
Atención A 100000 matrícula, fechaAtención
Se pide:
1. El árbol canónico de la consulta dada.
2. Aplicar las heurísticas que le permitan llegar al plan lógico optimizado. Explicar cada paso.
3. Dar un plan físico para el plan lógico propuesto en la parte anterior, que utilice índices cuando sea posible.
Justifique las decisiones tomadas.
Ejercicio 4 ( 15 puntos)
Considere el siguiente programa que trabaja sobre una base de datos de ventas y stock:
program venta;
begin
START
input (producto, cant-vendida);
ventas-prod := read (tabla-vtas, producto); /* lee de la bd cantidad vendida del producto */
nueva-ventas := ventas-prod + cant-vendida;
write (tabla-vtas, producto, nueva-ventas); /* actualiza en la bd cantidad vendida del producto */
cant-exist := read (tabla-stock, producto); /* lee de la bd cantidad existente del producto */
if (cant-exist < cant-vendida ) {
output ("cantidad existente insuficiente");
ABORT
} else {
nueva-cant := cant-exist – cant-vendida;
write (tabla-stock, producto, nueva-cant); /* actualiza en la bd cantidad exist. del producto */
COMMIT
output ("transacción completa");
}
end program.
Representamos esta transacción como: T: r(X) w(X) r(Y) w(Y) c
Si ocurriera el ABORT previsto en el programa, sería T: r(X) w(X) r(Y) a
PARTE 1
Sean T1 y T2 ejecuciones de T. Dadas las siguientes historias sobre T1 y T2:
H1: r1(X) w1(X) r2(X) w2(X) r2(Y) r1(Y) w1(Y) w2(Y) c1 c2
H2: r1(X) w1(X) r2(X) w2(X) r2(Y) w2(Y) c2 r1(Y) w1(Y) c1
H3: r1(X) w1(X) r1(Y) w1(Y) c1 r2(X) w2(X) r2(Y) w2(Y) c2
a) Contestar para cada una, justificando:
- ¿es recuperable?
- ¿evita abortos en cascada?
b) Considere que para el producto p1 la existencia en stock es de 50, y se ejecutan T1(p1, 60) y T2(p1, 20).
Si estas ejecuciones se intentan hacer entrelazando las operaciones de la misma forma que en las historias
H1, H2 y H3, contestar para cada historia: ¿qué sucedería? ¿La BD quedaría consistente?
Nota: T(p, n) significa que en esa transacción se ingresa en el input el producto p, y la cant-vendida n.
PARTE 2
a) Agregar a T bloqueos y desbloqueos de lectura y escritura tal que se cumpla el protocolo 2PL básico.
b) Agregar a T bloqueos y desbloqueos de lectura y escritura tal que se cumpla el protocolo 2PL estricto.
c) Dar una historia de T1 y T2 que contenga los bloqueos y desbloqueos como fueron puestos en la parte a) y
decir si es serializable, justificando.
d) Considere la transacción con bloqueos y desbloqueos propuesta en la parte b). ¿Cuáles de las historias de
la Parte 1 (H1, H2 y H3) podrían suceder? Justifique la respuesta.