0% encontró este documento útil (0 votos)
23 vistas7 páginas

Primer Parcial de Bases de Datos 2018

El documento describe un examen parcial de Fundamentos de Bases de Datos, que incluye ejercicios sobre un modelo entidad-relación de una clínica odontológica, así como la construcción de representaciones relacionales y consultas en SQL. Se abordan temas como la validación de instancias de tablas, dependencias funcionales, y se presentan ejercicios de álgebra relacional y cálculo de tuplas. Además, se requiere justificar decisiones de diseño y analizar consultas sobre la base de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
23 vistas7 páginas

Primer Parcial de Bases de Datos 2018

El documento describe un examen parcial de Fundamentos de Bases de Datos, que incluye ejercicios sobre un modelo entidad-relación de una clínica odontológica, así como la construcción de representaciones relacionales y consultas en SQL. Se abordan temas como la validación de instancias de tablas, dependencias funcionales, y se presentan ejercicios de álgebra relacional y cálculo de tuplas. Además, se requiere justificar decisiones de diseño y analizar consultas sobre la base de datos.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd

Primer Parcial de Fundamentos de Bases de Datos

Setiembre 2018
Duración: 3,5 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)

Parte a)
Una clínica odontológica cuenta con una base de datos para llevar el registro de sus pacientes. El siguiente
modelo entidad-relación (MER) se corresponde a dicha base de datos:

Discuta si las siguientes afirmaciones se cumplen en algunas, todas o ninguna de las instancias posibles
para este esquema, considerando el diagrama y las RNE. Justifique.

1. Las personas tienen al menos un teléfono.

Se cumple para algunas instancias, dado que teléfonos es un multivaluado es un conjunto y por tanto puede
ser vacío. Además, no hay ninguna RNE que indique que dicho conjunto no puede ser vacío.

2. Hay pacientes que nunca fueron atendidos.

No se cumple para ninguna instancia, porque hay una totalidad en la relación atiende del lado de la entidad
Pacientes que indica que todos los pacientes han sido atendidos.

3. Algunos odontólogos fueron atendidos en la clínica.


Se cumple para algunas instancias, ya que no existe ninguna RNE que indique que los odontólogos no
pueden ser pacientes, por lo tanto, algunos de ellos podrían ser pacientes.

4. Un paciente nunca recomienda a otro paciente que ya lo haya recomendado a él.

Se cumple para toda instancia, ya que existe una RNE que indica que la relación recomienda es asimétrica.

Parte b)

Dado que la clínica comienza a crecer, es necesario realizar cambios y/o agregados a la base de datos de la
parte a. Por lo tanto, se le solicita realice dichos cambios y/o agregados, tanto en el diagrama como en las
RNEs, teniendo en cuenta la siguiente descripción de la realidad:

Cuando un odontólogo atiende a un paciente le realiza un tratamiento, que puede ser preventivo o de
restauración. Todo tratamiento, cualquiera sea, tiene un costo y una descripción.
Los tratamientos preventivos tienen un código que los identifica, mientras que los tratamientos de
restauración se identifican por un tipo y un número.

Cuando un odontólogo le hace un tratamiento de restauración a un paciente, interesa registrar la fecha en


que se realizó el tratamiento y las observaciones que el odontólogo hace en dicha fecha. Por otro lado,
cuando un odontólogo le hace un tratamiento preventivo a un paciente sólo interesa registrar la fecha. Todo
paciente se hace al menos un tratamiento preventivo y se le realizan tantos tratamientos, preventivos o de
restauración, como sea necesario. Además, si un paciente lo requiere, un tratamiento puede ser realizado
más de una vez.

A los pacientes se les realizan estudios (tomografías, radiografías, etc.). Cada estudio se identifica con un
número para el paciente y además tiene un resultado. Todo estudio tiene un tipo que es único. Los tipos de
estudio se identifican por un código, y además tienen un nombre y una descripción. Cada tipo de estudio
tiene un conjunto de estudios asociados. Todos los tratamientos de restauración requieren de estudios, por
lo que interesa saber qué tipos de estudios están asociados a cada tratamiento de restauración. Se sabe que
algunos tipos de estudios pueden no estar asociados a ningún tratamiento.

Finalmente, se debe tener en cuenta que además de los clientes y odontólogos, también se desea considerar
al personal administrativo. De los administrativos se conoce su CI, su nombre, todos sus teléfonos y su
cargo. Tanto los odontólogos como los administrativos pueden atenderse en la clínica.
Solución:

RNE:
Ejercicio 2 (10 puntos)

Parte a)

Construya una representación relacional del diagrama y las RNE del ejercicio 1, parte a. Su solución debe
incluir, además de las tablas, todas las dependencias de inclusión y dependencias funcionales que se deben
cumplir. Justifique las decisiones de diseño tomadas.

PERSONAS(ci, nombre)
En PERSONAS se cumple ci→ nombre

TELEFONOS(ci, telefono)
πci(TELEFONOS)  πci(PERSONAS)
En TELEFONOS no hay dfs.

PACIENTES(ci,mail)
πci(PACIENTES)  πci(PERSONAS)
En PACIENTES se cumplen ci→mail y mail→ci

ODONTOLOGOS(ci,especialidad)
πci(ODONTOLOGOS)  πci(PERSONAS)
En ODONTOLOGOS se cumple ci→especialidad

πci(PERSONAS)= πci(PACIENTES) ∪ πci(ODONTOLOGOS) (surge de la RNE3)

OTRA SOL

PACIENTES(ci,nombre,mail)
En PACIENTES se cumplen ci→mail y mail→ci

ODONTOLOGOS(ci,nombre,especialidad)
En ODONTOLOGOS se cumple ci→especialidad

PERSONAS= πci,nombre(PACIENTES) ∪ πci,nombre(ODONTOLOGOS)

Si permitimos que existan deps de inclusión contra una vista:


TELEFONOS(ci, telefono)
πci(TELEFONOS)  πci(PERSONAS)
En TELEFONOS no hay dfs.

Si no, una tabla de teléfonos para pacientes y otra para odontólogos.

La sol con una sola tabla y un atributo tipo no es posible, porque no se nada sobre la intersección.

RECOMIENDA(recom,esRecomendado)
πrecom(RECOMIENDA)  πci(PACIENTES)
πesRecomendado(RECOMIENDA)  πci(PACIENTES)
En RECOMIENDA no hay dfs.

En este caso, como el atributo fecha siempre devuelve un conjunto diferente del vacío, podemos representar
la rel ATIENDE y el atrib en una misma tabla.

ATIENDE(ciOdontologo,ciPaciente, fechas)
πciOdontologo(ATIENDE) = πci(ODONTOLOGOS)
πciPaciente(ATIENDE) = πci(PACIENTES)
En ATIENDE no hay dfs.

Restricciones no estructurales del MER.


Aunque no son exigidas, se pueden representar algunas restricciones usando álgebra.

NO SIMETRIA DE RECOMIENDA:

Π esRecomendado ,recom (Recomienda)∩Recomienda=∅

RECOMIENDA ES IRREFLEXIVA:

Recomienda∩( ΠesRecomendado , esRecomendado ( Recomienda)∪Πrecom , recom(Recomienda))=∅

UN ODONTOLOGO NO SE ATIENDE A SI MISMO:


Π ci , ci (Odontologos)∩Recomienda=∅

Parte b)

Considere ahora la tabla PAGOS(mailPaciente, fecha, asunto, monto) donde se registran los pagos realizados
por cada paciente.

1. Indique si la siguiente es una instancia válida de la tabla PAGOS. Justifique su respuesta.

mailPaciente fecha asunto monto


a@[Link] 10/08/2018 cuota_julio2018 500
x@[Link] 10/08/2018 cuota_julio2018 500
a@[Link] 08/09/2018 cuota_agosto2018 500

Esta tabla es una instancia válida, porque no viola la única DF que se cumple en esta tabla, la DF de clave
mailPaciente,fecha→asunto,monto.

2. Considere la siguiente consulta sobre la tabla PAGOS:

SELECT mailPaciente, count(*)


FROM PAGOS
GROUP BY mailPaciente
HAVING COUNT (*) >1

2.1. Explique, en lenguaje natural, lo que devuelve la consulta.

La consulta devuelve, para cada paciente que ha realizado más de un pago, el mail del paciente y la cantidad
de pagos realizados.

2.2. ¿Puede decir cual es el resultado de la misma para cualquier instancia de la base de datos? Justifique su
respuesta.

No puedo decirlo, depende de la instancia.


Ejercicio 3 (15 puntos)

Considere la realidad de la de la Tarea 2 del laboratorio, donde se representa la información del sitio IMDB,
con las siguientes tablas:

Personas (idPersona, nombre, anioNacimiento, anioFallecimiento)

PersProfesion (idPersona, profesion)

Peliculas (idPelicula, tipo, titulo, tituloOriginal, adultos, anio, duracion, promRating, nroVotos)

PeliGenero (idPelicula, genero)

PeliDirector (idPelicula, idPersona)

PeliEscritor (idPelicula, idPersona)

PeliActor (idPelicula, idPersona, personaje)

En esta base de datos se cumplen las siguientes dependencias de inclusión y no hay tablas vacías:

πidPersona(PersProfesion)  πidPersona(Personas)
πidPelicula(PeliGenero)  πidPelicula(Peliculas)
πidPelicula(PeliDirector)  πidPelicula(Peliculas)
πidPersona(PeliDirector)  πidPersona(Personas)
πidPelicula(PeliEscritor)  πidPelicula(Peliculas)
πidPersona(PeliEscritor)  πidPersona(Personas)
πidPelicula(PeliActor)  πidPelicula(Peliculas)
πidPersona(PeliActor)  πidPersona(Personas)

Se pide:

Resolver en Álgebra Relacional:

a) Devolver nombre y año de nacimiento de las personas que fueron actores o directores de al menos
una película con promedio de rating (promRating) mayor que 3.

A = πidPelicula (promRating > 3 Peliculas)


B = πidPersona (PeliActor * A)  πidPersona (PeliDirector * A)
Result = πnombre, anioNacimiento (B * Personas)

b) Devolver los nombres de las personas que dirigieron todas las películas que tienen solamente el
género “terror”.

A = πidPelicula (Peliculas) - πidPelicula (genero <> 'terror' (PeliGenero))


Result = πnombre (Personas * (πidPersona, idPelicula (PeliDirector) % A)

Resolver en Cálculo de Tuplas:


c) Devolver los nombres de los actores que trabajaron en películas de todos los géneros existentes.

{[Link] / Personas(t) 
(u) (Peligenero(u) → (w) (PeliActor(w)  [Link] = [Link] 
(z) (PeliGenero(z) 
[Link] = [Link]  [Link] = [Link])))}

d) Devolver titulo y duración de las películas que tienen un sólo director y éste también es escritor de la
película.

{ <[Link], [Link]> / Peliculas(t) 


(u) (PeliDirector(u)  [Link] = [Link] 
(z) (PeliEscritor(z)  [Link] = [Link] 
[Link] = [Link] 
Ⴈ(w) (PeliDirector(w) 
[Link] = [Link]  [Link] ≠ [Link]))}

Resolver en SQL:

e) Devolver las parejas tipo y género, donde el promedio de la duracion de las películas de años
mayores al 2000, de ese tipo y género es menor que el promedio de todas las duraciones de películas.

SELECT tipo, genero


FROM Peliculas NATURAL JOIN PeliGenero
WHERE anio > 2000
GROUP BY tipo, genero
HAVING AVG(duracion) <
(SELECT AVG(duracion)
FROM Peliculas)

También podría gustarte