Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Diciembre 2005
Solución
Los discos son creaciones de artistas. De cada artista se conoce un código que lo identifica, su
nombre, apodo, fecha y lugar de nacimiento. Los artistas pueden ser cantantes, músicos o
compositores (aunque algunos artistas pueden desempeñar mas de uno de estos roles). De los
cantantes se conoce el registro de su voz mientras que de cada músico se conoce la lista de
instrumentos que toca. De cada instrumento se conoce su nombre (que lo identifica) y su tipo
(viento, cuerdas, etc)
Los discos pueden ser grabados por un grupo o por una única persona (disco solista). Cada
grupo se identifica mediante un código y se conoce el nombre del grupo y la fecha de su
formación. De cada grupo interesa saber la lista de músicos, cantantes y compositores que lo
forman. Puede haber grupos sin músicos y grupos sin cantantes pero todos los grupos deben
tener al menos un compositor. En todos los casos para cada artista del grupo interesa saber el
período en que formó parte del mismo. Los artistas pueden pertenecer a mas de un grupo a la
vez, incluso pueden pertenecer a un mismo grupo en diferentes roles. También puede darse el
caso de que un artista forme parte de un grupo y al mismo tiempo grabe discos como solista.
De cada disco se conoce su nombre, año de edición, género musical al que pertenece y
empresa discográfica que lo produce. Ni los grupos ni los solistas editan más de una vez un
disco con igual nombre. En los discos de grupo pueden aparecer artistas invitados, o sea
artistas que no pertenecen al grupo pero que colaboran en el disco. Interesa registrar para
cada disco de grupo la lista de artistas invitados, en caso de que existan.
En todos los discos existen canciones. De cada canción se conoce el número de pista que le
corresponde dentro del disco (EJ track1), su nombre, su duración en minutos y la fecha en que
fue grabada. Interesa saber para cada canción la lista de compositores. En el caso de los
discos de grupo todas las canciones son compuestas por alguno de los compositores del
grupo.
De cada disco se guarda una lista de discos relacionados, lo cual permite promocionar otros
discos a los compradores.
1
RNE:
2
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005
Notas:
*No existen tablas vacias
*Πcod_proy(ASIGNACION) ⊆ Πcod_proy(PROYECTOS)
*Πcod_proy(REGISTRO_HORAS) ⊆ Πcod_proy(PROYECTOS)
*Πcod_func(ASIGNACION) ⊆ Πcod_func(PERSONAL)
*Πcod_func(REGISTRO_HORAS) ⊆ Πcod_func(PERSONAL)
*Πcod_tarea(ASIGNACION) ⊆ Πcod_tarea(TAREAS)
Se pide:
1) Obtener los códigos de los proyectos, cliente y tipo de los proyectos que sólo
tienen asignadas personas que ingresaron en el 2005 a la empresa.
A = ∏cod_func(σfecha_ingreso ≥1/1/05(PERSONAL))
B = ∏cod_func(PERSONAL) – A
C = ∏cod_proy(ASIGNADOS * A)
D = ∏cod_proy(ASIGNADOS * B)
A = ∏cod_proy(σtipo=consultoría(PROYECTOS))
B = ∏cod_tarea(σtipo= Gestion(TAREAS))
S1 = (∏cod_func, cod_proy(ASIGNACION) % A)
S2 = (∏cod_func, cod_tarea(ASIGNACION) % B)
SOL = S1 ∪ S2
3
b) Resolver las siguientes consultas en cálculo relacional.
{ f.cod_func / PERSONAL(f) ∧
(∃t)(TAREAS(t) ∧ t.tipo = DESARROLLO ∧
(∃a)(ASIGNACION(a) ∧ a.cod_func = f.cod_func ∧
a.cod_tarea = t.cod_tarea
)
)∧
¬ ( (∃p)(PROYECTOS(p) ∧ p.tipo = DESARROLLO ∧
(∃a2)(ASIGNACION(a2) ∧ a2.cod_func = f.cod_func ∧
a2.cod_proy = p.cod_proy
)
)
)
}
4) Obtener el nombre de los funcionarios tales que en todos los proyectos en los
que están asignados, están asignados a tareas de tipo Gestion.
{ p.nombre / PERSONAL(p) ∧
(∀a) (ASIGNACION(a) ∧ a.cod_func = p.cod_func
→
(∃t)(TAREAS(t) ∧ t.tipo=Gestion ∧ t.cod_tarea = a.cod_tarea
)
) ∧
(∃a2)(ASIGNACION(a2) ∧ a2.cod_func = p.cod_func)
}
5) Obtener los códigos de los proyectos que tienen personal asignado y que en
ninguna fecha fueron trabajadas más de 40 horas en él. (Notar que no
necesariamente por una única persona).
SELECT .cod_proy
FROM ASIGNACION
WHERE cod_proy NOT IN
(SELECT R.cod_proy
FROM REGISTRO_HORAS R
GROUP BY cod_proy, fecha
HAVING sum(cant_horas) > 40
)
4
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005
La empresa cuenta con ómnibus de los cuales se conoce su matricula que los identifica, su
capacidad y fecha de la última inspección.
Entre el personal de la empresa se cuenta con choferes, de los cuales se conoce su número de
funcionario (que los identifica), su nombre y fecha ingreso a la empresa.
Cada ómnibus tiene un único chofer titular asignado pero un chofer puede ser titular en más de
un ómnibus.
La empresa realiza un conjunto de recorridos. Cada recorrido tiene un código que lo identifica y
una duración estimada.
En cada fecha/horario a cada recorrido se le asigna un ómnibus para realizarlo.
SOL:
Donde se tiene para cada ómnibus su capacidad, código de recorrido que realiza y
número de funcionario de los choferes suplentes.
5
ii) Indique si existen y cuáles son las dependencias multivaluadas que se
cumplen en este esquema.
D pertenece a todas las claves por no figurar en el lado derecho de las dependencias
funcionales.
E no pertenece a las claves por sólo figurar en el lado derecho de las dependencias
funcionales.
Verificó si D es clave
D+ = {D} por lo tanto D no es clave
(DA)+ = {D,A}
(DB)+ = {D,B}
(DC)+ = {D,C,B}
(DG)+ = {D,G,A,B,E,H,C} Por lo tanto DG es clave
+
(DH) = {D,H,C,G,A,B,E} Por lo tanto DH es clave
(DAE)+ = {D,A,E}
6
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005
(DBCE)+ = {D,B,C,E}
Por lo tanto NO HAY MÁS CLAVES
Claves : DG,DH,DAB,DAC
No es minimal ya que en los lados derechos de las dependencias hay más de un atributo.
F1 = {ADG → B
ADG → E,
C → B,
AB → H,
G → A,
DH → C
DH → G,
CG → H }
¿Atributos redundantes ?
(A)+F1 = {A}
(D)+F1 = {D}
(G)+F1 = {G,A}
(DG)+F1 = {D,G,A,B,E,……..}
Por lo tanto A es redundante en estas 2 dependencias.
F2 = {DG → B (1)
DG → E, (2)
C → B, (3)
AB → H, (4)
G → A, (5)
DH → C (6)
DH → G (7)
7
CG → H (8)}
Analizamos la dependencia AB → H
(A)+F2 = {A}
(B)+F2 = {B}
Por lo tanto no hay atributos redundantes
+
(D) F2 = {D}
+
(H) F2 = {H}
Por lo tanto no hay atributos redundantes
Dependencias redundantes?
DG → B ?
F3 = F2 – {DG → B}
(DG)+F3 = {D,G,E,A}
F3 = F2 – {C → B}
+
(C) F3 = {C}
F3 = F2 – {AB → H}
(AB)+F3 = {A,B}
Por lo tanto AB → H no es redundante.
F3 = F2 – {CG → H}
8
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005
(CG)+F3 = {C,G,B,A,H,……}
Por lo tanto CG → H es redundante.
Fmin = {DG → B
DG → E,
C → B,
AB → H,
G → A,
DH → C
DH → G }
Aplicamos el algoritmo visto en el curso que permite obtener una descomposición en 3NF
con join sin pérdida y preservación de dependencias.
R1(DGBE)
R2(CB)
R3(ABH)
R4(GA)
R5(DHCG)
R3(ABH)
9
AB → H
Clave: AB
Por lo tanto esta en BCNF
R4(GA)
G→A
Clave: G
Por lo tanto esta en BCNF
R5(DHCG)
DH → CG
DG → HC
CG → H
Claves : DH,CG
Por lo tanto CG → H viola BCNF
Por lo tanto descomponemos R5 utilizando el algoritmo del curso que permite obtener una
descomposición en BCNF con join sin pérdida.
R51(CGH)
CG → H
Claves: CG
R52(D,C,G)
DG → C
Claves: DG
10
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005
R3(ABH)
AB → H
A Æ> B
Clave: AB
Por lo tanto A no es superclave, R3 no esta en 4NF
R4(GA)
G→A
Clave: G
No se proyectan dep. multivaluadas no triviales. Por lo tanto esta en 4NF
R51(CGH)
CG → H
Claves: CG
No se proyectan dep. multivaluadas no triviales. Por lo tanto esta en 4NF
R52(D,C,G)
DG → C
Claves: DG
No se proyectan dep. multivaluadas no triviales. Por lo tanto esta en 4NF
R11(DB) R12(DGE)
R31(AB) R32(AH)
a) Dar un plan lógico de la consulta optimizado según las heurísticas. (Describir los pasos
aplicados).
11
Arbol canónico:
Π Pe.nombre, P.cod_proy
|
σA.cod_func=Pe.cod_func AND A.cod_proy=P.cod_proy AND P.tipo=‘T1’
AND Pe.fecha_ingreso= 1/3/2000
Bajamos selecciones:
Π Pe.nombre, P.cod_proy
|
σA.cod_func=Pe.cod_func
σ A.cod_proy=P.cod_proy
Π Pe.nombre, P.cod_proy
|><| cod_func
|><| cod_proy
12
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005
Bajamos proyecciones:
Π Pe.nombre, P.cod_proy
|><| cod_func
|><| cod_proy
b) Considerando que existe un índice primario Ind_func por el atributo cod_func en la tabla
Personal y otro índice primario Ind_proy por el atributo cod_proy en la tabla Proyectos:
Ciclo Anidado
sin índices
Ciclo Anidado
sin índices
13
ii) Proponer otro plan lógico y su correspondiente plan físico, tal que usted considere que
puede ser más eficiente que los anteriores, justificando.
Plan lógico:
Π Pe.nombre, P.cod_proy
σ Pe.fecha_ingreso= 1/3/2000
|><| cod_func
σP.tipo=‘T1’
|><| cod_proy
Plan físico:
Selección por
Búsqueda Lineal
Selección por
Búsqueda Lineal
Este plan físico puede ser más eficiente que el de la parte b) porque utiliza los índices
para resolver los joins. En la parte b) no se podía utilizar los índices, ya que había una
selección antes de cada join, que hacía que el join se ejecutara sobre resultados
intermedios y no sobre las tablas originales (por lo tanto los índices dados no
servían).
14
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005
a) En caso de que sea posible, agregar los bloqueos y desbloqueos a T3 de manera que
cualquier historia que contenga a T1, T2 y T3 sea serializable. Justifique.
Cualquier historia de T1, T2 y T3 es serializable ya que cada una de ellas cumple 2PL,
y esto me asegura la seriabilidad.
b) Sabiendo que:
H: rl1(Y) r1(Y) rl2(X) r2(X) wl2(Z) u2(X) rl3(X) r3(X) w2(Z) u2(Z) c2 wl1(Z) w1(Z) u1(Y)
c1 u1(Z) wl3(Y) u3(X) r3(Y) w3(Y) u3(Y) c3
15