Logo Studenta

2doParcial -1C2022_Curso Tarde - Práctica

¡Estudia con miles de materiales!

Vista previa del material en texto

MATERIA: Sistemas de datos – Catedra Chinkes 
PROFESOR: Gustavo Schneider 
UNIVERSIDAD DE BUENOS AIRES 
FACULTAD DE CIENCIAS ECONÓMICAS 
NUMERO REGISTRO: 
APELLIDO Y NOMBRE: 
 
Primer Cuatrimestre de 2022 
Segundo Parcial – TEMA 1 
 
 1 de 5 
 
1. Considerando el siguiente Diagrama de Entidad-Relación, elija la cantidad que desee de las 
consignas y arme la/s consulta/s que los respondan, considerando que podrá sumar un puntaje 
máximo de 60/100. Si en una consigna la resuelve con más de una consulta, estas deberán estar 
ordenadas según su ejecución. 
Todas las claves foráneas están configuradas en modo RESTRICT. No dejan eliminar/actualizar 
registros referenciados. 
 
 
 
 
 
*Todas las incompatibilidades están registradas en ambas direcciones. Es decir, si las especies 35 y 109 
son incompatibles, en la tabla EspecieIncompatibilidad ambos de los siguientes registros están incluidos: 
 
IdEspecie IdEspecieIncompatible 
35 109 
109 35 
 
MATERIA: Sistemas de datos – Catedra Chinkes 
PROFESOR: Gustavo Schneider 
UNIVERSIDAD DE BUENOS AIRES 
FACULTAD DE CIENCIAS ECONÓMICAS 
NUMERO REGISTRO: 
APELLIDO Y NOMBRE: 
 
Primer Cuatrimestre de 2022 
Segundo Parcial – TEMA 1 
 
 2 de 5 
 
a. Consultas de dificultad media (Cada una vale 5 puntos) 
 
a- Arme una lista indicando Nombre de dinosaurio, su expectativa de vida y la descripción de su tipo de alimentación. 
b- Armé una lista de las exhibiciones con más de 5 especies. 
c- Arme una lista indicando todos los Id de Dinosaurio y, si corresponde, la exhibición a la que están 
asignados 
d- ¿Cuál es el promedio de la cantidad de personas afectadas por accidente? 
e- Arme un SP que reciba un Id de Dinosaurio y devuelva el Id y fecha de todos los accidentes en los que 
estuvo involucrado. 
f- Arme una lista de todas las especies que comen carne (recuerde que las descripciones de los tipos de 
alimentación son “Carnívoro”, “Hervívoro” y “Omnívoro”) 
g- Arme una lista de las especies que son compatibles con todas las otras especies (Es decir, que no tienen 
ninguna incompatibilidad con otra especie). 
h- Para testear, se generó una especie con código 9999. Con ella, se generaron dinosaurios y composiciones, 
pero no incompatibilidades. Elimine todos los datos asociados. 
i- Arme una lista de las exhibiciones que se encuentren habilitadas (habilitada =1) y que tengan al menos un 
dinosaurio asignado 
j- Arme un SP que reciba dos parámetros: IdDinosaurio y FechaMuerte. El SP debe actualizar el registro, 
registrando la fecha de muerte y desasignando el dinosaurio de cualquier exhibición a la que estuviera 
asignada. 
 
 
b. Consultas de dificultad alta (Cada una vale 10 puntos) 
 
k- Arme una lista de todas las exhibiciones habilitadas con al menos 3 especies carnívoras. 
l- Arme un trigger que, ante la inserción de un registro en especie incompatibilidad, haga la inserción de su 
contraparte (Si se insertan A es incompatible con B, debe insertar B es incompatible con A). 
m- Arme una lista de exhibiciones que no respeten las cantidades máximas determinadas para las especies 
asignadas. 
n- Arme una lista de exhibiciones que no respeten las incompatibilidades de sus especies asignadas. 
o- Considerando que exista un atributo llamado “CantidadDinosauriosAsignados” en la tabla Exhibición, arme 
un trigger que mantenga la columna actualizada. Idealmente, el trigger solo debiera actualizar las 
exhibiciones involucradas. 
p- Considerando que la fechahoramuerte es un atributo optativo, ¿cuál es el dinosaurio más viejo del parque? 
q- ¿Cuál es la cantidad promedio de dinosaurios involucrados por accidente? 
r- Arme una lista con las siguientes columnas: Descripción (del tipo visita), IdExhibición primera exhibición, 
IdExhibición segunda exhibición y IdExhibición tercera exhibición. 
s- Arme un trigger que no permita asignar un dinosaurio muerto a una exhibición. Recuerde utilizar la 
sentencia “ROLLBACK TRANSACTION” para cancelar la operación 
t- Arme una lista con el nombre de todas las exhibiciones que no tengan a ningún dinosaurio asignado que 
haya estado involucrado en un accidente. 
 
 
 
a- 
SELECT D.Nombre, E.ExoectativaVida, TA.Descripción 
FROM Dinosaurio D inner join Especie E on E.idespecie = D.idespecie 
inner join TipoAlimentación TA on TA.IdTipoAlimentación = E.IdTipoAlimentación 
 
b- 
SELECT IdExhibición 
FROM ExhibiciónComposición 
GROUP BY IdExhibición 
HAVING COUNT(1) > 5 
 
 
 
MATERIA: Sistemas de datos – Catedra Chinkes 
PROFESOR: Gustavo Schneider 
UNIVERSIDAD DE BUENOS AIRES 
FACULTAD DE CIENCIAS ECONÓMICAS 
NUMERO REGISTRO: 
APELLIDO Y NOMBRE: 
 
Primer Cuatrimestre de 2022 
Segundo Parcial – TEMA 1 
 
 3 de 5 
 
c- 
SELECT D.IdDinosaurio, E.nombre 
FROM Dinosaurio D left join Exhibición E on D.IdExhibición = E.IdExhibición 
 
d- 
SELECT AVG(CantPersonasAfectadas) 
FROM Accidente 
 
e- 
CREATE PROCEDURE MuestraAccidentes (@IdDino char(8)) AS 
SELECT A.IdAccidente, A.Fecha 
FROM Accidente A inner join AccidenteDinosaurio AD on AD.IdAccidente = A.IdAccidente 
 
f- 
SELECT IdEspecie from Especie E inner join TipoAlimentación TA on TA.idEspecie = E.IdEspecie 
WHERE TA.Descripción in ('Carnívoro','Omnívoro') 
--Se puede hacer con dos condiciones de = y un OR 
 
g- 
SELECT IdEspecie 
FROM Especie 
WHERE IdEspecie not in (SELECT IdEspecie FROM EspecieIncompatibilidad) 
 
h- 
DELETE FROM ExhibiciónComposición 
WHERE IdEspecie = 9999 
 
DELETE FROM Dinosaurio 
WHERE IdEspecie = 9999 
 
DELETE FROM Especie 
WHERE IdEspecie = 9999 
 
i- 
SELECT E.IdExhibición 
FROM Exhibición E 
WHERE Habilitada = 1 and E.IdExhibición in (SELECT IdExhibición FROM Dinosaurio) 
--También se puede hacer con un INNER JOIN 
 
j- 
CREATE PROCEDURE MuerteDino (@IdDino char(8), @FechaHoraMuerte Datetime) AS 
 
UPDATE Dinosaurio 
SET FechaHoraMuerte = @FechaHoraMuerte, IdExhibición = NULL, FechaAsignación = NULL 
WHERE IdDinosaurio = @IdDino 
 
k- 
SELECT E.IdExhibición FROM Exhibición E INNER JOIN ExhibiciónComposición EC 
on EC.IdExhibición = E.IdExhibición INNNER JOIN Especie E on E.IdEspecie = EC.IdEspecie 
INNER JOIN TipoAlimentación TA on TA.IdTipoAlimentación = E.IdTipoAlimentación 
WHERE E.Habilitada = 1 AND TA.Descripción like 'Carnívoro' 
GROUP BY IdExhibición 
HAVING COUNT(1) >= 3 
 
l- 
CREATE TRIGGER Incompatibilidad FOR INSERT on EspecieIncompatibilidad 
as 
MATERIA: Sistemas de datos – Catedra Chinkes 
PROFESOR: Gustavo Schneider 
UNIVERSIDAD DE BUENOS AIRES 
FACULTAD DE CIENCIAS ECONÓMICAS 
NUMERO REGISTRO: 
APELLIDO Y NOMBRE: 
 
Primer Cuatrimestre de 2022 
Segundo Parcial – TEMA 1 
 
 4 de 5 
 
INSERT INTO EspecieIncompatibilidad(IdEspecie, IdEspecieIncompatible) 
SELECT IdEspecieIncompatible, IdEspecie 
FROM INSERTED 
--Se puede hacer con VALUES y 2 subconsultas sobre INSERTED 
 
m- 
SELECT EC.IdExhibición, EC.IdEspecie 
FROM ExhibiciónComposición EC 
WHERE EC.CantidadMáxima < (SELECT COUNT(1) FROM Dinosaurio D 
WHERE D.IdExhibición = EC.IdExhibición AND D.IdEspecie = EC.IdEspecie) 
 
n- 
SELECT DISTINCT D.IdExhibición 
FROM Dinosaurio D INNER JOIN EspecieIncompatibilidad EI 
on EI.IdEspecie = D.IdEspecie 
WHERE EXISTS (SELECT 1 FROM Dinosaurio DI 
WHERE D.IdExhibición = DI.IdExhibición AND DI.IdEspecie = EI.IdEspecieIncompatible) 
 
o- 
CREATE TRIGGER CantDinoAsig for INSERT, UPDATE, DELETE on Dinosaurio 
as 
UPDATE Exhibición 
SET CantidadDinosauriosAsignados = (SELECT COUNT(1) from Dinosaurio D 
WHERE D.IdExhibición = Exhibición.IdExhibición) 
WHERE IdExhibición in (SELECT IdExhibición FROM INSERTED 
UNION SELECT IdExhibición FROM DELETED) 
 
p- 
SELECT D.IdDinosaurio 
FROM Dinosaurio 
WHERE FechaHoraMuerte is NULL AND FechHoraEclosión 
= (SELECT MIN(FechaHoraEclosión) FROM Dinosaurio D 
WHERE FechaHoraMuerte IS NULL) 
 
q- 
SELECT AVG(Cant) 
FROM (SELECT IdAccidente, COUNT(1) as Cant 
FROM AccidenteDinosaurio 
GROUP BY IdAccidente) 
 
r- 
SELECT TV.Descripción, (SELECT IdExchibición FROM TipoVisitaExhibición TVE 
WHERE TVE.IdTipoVisita = TV.IdTipoVisita 
AND Orden = 1), (SELECT IdExchibiciónFROM TipoVisitaExhibición TVE 
WHERE TVE.IdTipoVisita = TV.IdTipoVisita 
AND Orden = 2), (SELECT IdExchibición FROM TipoVisitaExhibición TVE 
WHERE TVE.IdTipoVisita = TV.IdTipoVisita 
AND Orden = 3) 
FROM TipoVisita TV 
 
s- 
CREATE TRIGGER ValidaciónDinoMuerto FOR INSERT, UPDATE on Dinosaurio 
AS 
IF EXISTS (SELECT 1 FROM INSERTED WHERE FECHA_HORA_MUERTE IS NOT NULL 
AND IdExhibición is not null) 
ROLLBACK TRANSACTION 
 
MATERIA: Sistemas de datos – Catedra Chinkes 
PROFESOR: Gustavo Schneider 
UNIVERSIDAD DE BUENOS AIRES 
FACULTAD DE CIENCIAS ECONÓMICAS 
NUMERO REGISTRO: 
APELLIDO Y NOMBRE: 
 
Primer Cuatrimestre de 2022 
Segundo Parcial – TEMA 1 
 
 5 de 5 
 
t- 
SELECT * 
FROM Exhibición E 
WHERE NOT EXISTS (SELECT 1 FROM Dinosaurio D 
INNER JOIN AccidenteDinosaurio AD on AD.IdDinosaurio = D.IdDinosaurio 
WHERE D.IdExhibición = E.IdExhibición)

Continuar navegando