Está en la página 1de 15

Facultad de Ingenieria Examen de Fundamentos de Bases de Datos

Instituto de Computación Diciembre de 2005

FUNDAMENTOS DE BASES DE DATOS

Diciembre 2005

Solución

Parte 1. Modelo Entidad-Relación (25 puntos)


Ejercicio 1. (25 pts)
Se desea diseñar una base de datos que dé soporte a un sitio WEB de venta de discos
compactos de música. Dicha base deber permitir explorar la información desde diferentes
puntos de vista.

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.

SE PIDE: Esquema Entidad Relación completo, incluyendo restricciones de integridad.

1
RNE:

• Los artistas invitados a un disco de grupo no pertenecen al grupo.


• Un disco no se relaciona consigo mismo.
• Discos_solistas ∩ Discos_de_grupo = ∅
• Los compositores de canciones incluidas en discos de grupo son compositores del
grupo.

2
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005

Parte 2. Consultas (25 puntos)


Ejercicio 2 (25 pts)
Una empresa de plaza posee un sistema para manejar los proyectos que realiza y el personal
asignado a los mismos. Este sistema usa las siguientes tablas:

PROYECTOS (cod_proy, cod_cliente, fecha_inicio, tipo)

PERSONAL (cod_func, nombre, fecha_ingreso)

TAREAS (cod_tarea, descripción, tipo)

ASIGNACION (cod_func, cod_proy, cod_tarea)

REGISTRO_HORAS (cod_func, cod_proy, fecha, cant_horas)

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:

a) Resolver las siguientes consultas en álgebra relacional.

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)

SOL = ∏cod_proy, cod_cliente, tipo( ( C – D) * PROYECTOS)

2) Obtener los nombres de los funcionarios que se encuentran asignados a todos


los proyectos de tipo consultaría o que tienen asignadas todas las tareas de
tipo Gestion.

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.

3) Obtener el código de los funcionarios que no están asignados a proyectos del


tipo Desarrollo, pero sí a tareas de tipo Desarrollo.

{ 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)
}

c) Resolver las siguientes consultas en SQL (sin utilizar vistas)

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
)

6) Obtener los códigos de proyectos con el total de horas realizadas en él por el


personal ingresado a la empresa antes del 1/6/05.

SELECT cod_proy, sum(cant_horas)


FROM REGISTRO_HORAS R, PERSONAL P
WHERE P.fecha_ingreso < 1/06/05
And P.cod_func = R.cod_func
GROUP BY cod_proy

4
Facultad de Ingenieria Examen de Fundamentos de Bases de Datos
Instituto de Computación Diciembre de 2005

Parte 3. Diseño Relacional (26 puntos)


Ejercicio 3. (13 pts.)
Una empresa de transporte desea implementar una base de datos con la información de su
negocio.

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.

a) Determinar las dependencias funcionales que se cumplen en esta realidad.


Utilice los siguientes nombres de atributos:

MAT_OM → matricula de los ómnibus


CAP_OM → capacidad de los ómnibus
FEC_OM → fecha de inspección de los ómnibus
NRO_FUN → número de funcionario de los choferes
NOM_CH → nombre de los choferes
FEC_CH → fecha de ingreso de los choferes
COD_REC → código de los recorridos
DUR_REC → duración estimada de los recorridos
FECHA → fecha/horario

SOL:

mat_om Æ cap_om, fec_om


nro_fun Æ nom_ch, fec_ch
mat_om Æ nro_fun
cod_rec Æ dur_rec
fecha, cod_rec Æ mat_om

b) Sabiendo que la política de trabajo de la empresa incluye:


• No todos los ómnibus realizan todos los recorridos, o sea que cada ómnibus
tiene un conjunto de recorridos que realiza.
• Cada ómnibus tiene un conjunto de choferes suplentes asignados. (atributo:
NRO_FUN_S)

Suponga que en el diseño de la base de datos se obtiene un esquema con la siguiente


información:
E(MAT_OM, CAP_OM, COD_REC,NRO_FUN_S)

Donde se tiene para cada ómnibus su capacidad, código de recorrido que realiza y
número de funcionario de los choferes suplentes.

i) Indique las dependencias funcionales que se cumplen en este esquema.


mat_om Æ cap_om

5
ii) Indique si existen y cuáles son las dependencias multivaluadas que se
cumplen en este esquema.

mat_om, cap_om Æ> cod_rec

mat_om, cap_om Æ> nro_fun_s

Ejercicio 4. (13 pts).


Dado el siguiente esquema relación R(A,B,C,D,E,G,H) y el siguiente conjunto de dependencias
sobre él:

F = {ADG → BE, C → B, AB → H, G → A, DH → CG, CG → H }

Se pide (en todos los casos JUSTIFICAR SU RESPUESTA)

a) Calcular todas las claves de R según F.

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

Busco claves de 2 atributos:

(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

Determino si existen más claves:

(ABCDE)+ = {A,B,C,D,E,H,G} Por lo tanto hay más claves

Busco claves de 3 atributos:

(DAB)+ = {D,A,B,H,C,G,E} Por lo tanto DAB es clave


+
(DAC) = {D,A,C,B,H,G,E} Por lo tanto DAC es clave

Determino si existen más claves:

(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

b) Determinar si F es un conjunto de dependencias minimal.

No es minimal ya que en los lados derechos de las dependencias hay más de un atributo.

c) Hallar una descomposición ρ1 de R en 3NF con join sin pérdida y preservación de


dependencias utilizando el algoritmo visto en el curso.

1. Calculamos un cubrimiento minimal de F.

F1 = {ADG → B
ADG → E,
C → B,
AB → H,
G → A,
DH → C
DH → G,
CG → H }

¿Atributos redundantes ?

Analizamos ADG → B y ADG → E

(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

Analizamos las dependencias DH → C y DH → G

+
(D) F2 = {D}
+
(H) F2 = {H}
Por lo tanto no hay atributos redundantes

Dependencias redundantes?

Las posibles dependencias redundantes son: 1) – 3) y 4)-8).


El resto de las dependencias son las únicas formas de determinar a los atributos: E, A, C y
G respectivamente por lo tanto no pueden ser redundantes.

DG → B ?

F3 = F2 – {DG → B}

(DG)+F3 = {D,G,E,A}

Por lo tanto DG → B no es redundante.

F3 = F2 – {C → B}

+
(C) F3 = {C}

Por lo tanto C → B no es redundante.

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.

Por lo tanto un cubrimiento minimal de F es:

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)

R1 contiene una clave (DG)


Por lo tanto ρ1 = {R1,R2,R3,R4,R5} es la descomposición buscada.

d) Determinar si la descomposición hallada en la parte c) se encuentra en BCNF. En caso


negativo obtener una, aplicando el algoritmo de BCNF visto en el curso partiendo de
ρ1. Llamamos ρ2 a la descomposición de R que se encuentra en BCNF.

Proyecto las dependencias de Fmin en cada uno de los esquemas de ρ1.


R1(DGBE)
DG → BE
Clave: DG
Por lo tanto esta en BCNF
R2(CB)
C→B
Clave: C
Por lo tanto esta en BCNF

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

Por lo tanto ρ2 = {R1,R2,R3,R4,R51,R52}


e) Sea J = F ∪ {D ->> B | GE, A ->> B|H }, asociado a R
Determinar si ρ2 está en 4NF. En caso negativo encontrar una descomposición ρ3 que
se encuentre en 4NF con join sin pérdida partiendo de ρ2.
R1(DGBE)
DG → BE
D Æ> B
Clave: DG
Por lo tanto D no es superclave, R1 no esta en 4NF
R2(CB)
C→B
Clave: C
No se proyectan dep. multivaluadas no triviales. Por lo tanto esta en 4NF

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)

Por lo tanto ρ3 = {R11,R12,R2,R31,R32,R4,R51,R52} es la descomposición buscada

Parte 4 Optimización y Concurrencia (24 puntos)

Ejercicio 5. (12 pts).


Dado el esquema del ejercicio 2 y la siguiente consulta:

SELECT Pe.nombre, P.cod_proy


FROM Asignacion A, Proyectos P, Personal Pe
WHERE A.cod_func = Pe.cod_func AND A.cod_proy = P.cod_proy
AND P.tipo = ‘T1’ AND Pe.fecha_ingreso = 1/3/2000

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

ASIGNACIÓN A PROYECTOS P PERSONAL Pe

Bajamos selecciones:

Π Pe.nombre, P.cod_proy
|
σA.cod_func=Pe.cod_func

σ A.cod_proy=P.cod_proy

σP.tipo=‘T1’ σ Pe.fecha_ingreso= 1/3/2000

ASIGNACIÓN A PROYECTOS P PERSONAL Pe

Fusionamos productos cartesianos con selecciones:

Π Pe.nombre, P.cod_proy

|><| cod_func

|><| cod_proy

σP.tipo=‘T1’ σ Pe.fecha_ingreso= 1/3/2000

ASIGNACIÓN A PROYECTOS P PERSONAL Pe

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

Πcod_proy, cod_func σP.tipo=‘T1’ σ Pe.fecha_ingreso= 1/3/2000

Πtipo, cod_proy Πfecha_ingreso, nombre, cod_func

ASIGNACIÓN A PROYECTOS P PERSONAL Pe

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:

i) Dar un plan físico asociado al plan lógico anterior.

Ciclo Anidado
sin índices

Ciclo Anidado
sin índices

Selección por Selección por


Búsqueda Lineal Búsqueda Lineal

ASIGNACIÓN A PROYECTOS P PERSONAL Pe

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

Πcod_proy, cod_func Πtipo, cod_proy Πfecha_ingreso, nombre, cod_func

ASIGNACIÓN A PROYECTOS P PERSONAL Pe

Plan físico:

Selección por
Búsqueda Lineal

Join utilizando índice “Ind_func”

Selección por
Búsqueda Lineal

Join utilizando índice “Ind_proy”

ASIGNACIÓN A PROYECTOS P PERSONAL Pe

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

Ejercicio 6. (12 pts.)


Considerando las siguientes transacciones:

T1: sigue el protocolo 2PL estricto.


T2: sigue el protocolo 2PL básico.
T3: r3(X); r3(Y); w3(Y); c3.

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.

T3: rl3(X) r3(X) wl3(Y) u3(X) r3(Y) w3(Y) u3(Y) c3

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:

T1: r1(Y); w1(Z); c1.


T2: r2(X); w2(Z); c2.

Notar que T1 y T2 cumplen las condiciones antes mencionadas.

i) Muestre, para T1 y T2, la secuencia completa de operaciones mostrando


bloqueos y desbloqueos (exclusivos y compartidos).

T1: rl1(Y) r1(Y) wl1(Z) w1(Z) u1(Y) c1 u1(Z)


T2: rl2(X) r2(X) wl2(Z) u2(X) w2(Z) u2(Z) c2

ii) Dar una historia entrelazada de T1, T2 y T3.

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

También podría gustarte