Sei sulla pagina 1di 4

UNIVERSITÀ DEGLI STUDI DI NAPOLI PARTHENOPE

Esame di Basi di Dati e Laboratorio


Prova pratica
Appello di: 29/06/20
Docente: ANTONIO MARATEA

NUMERO TRACCIA 1B 2D 3B
NOME: Luca
COGNOME: Gargiulo
MATRICOLA: 0124002382
GRUPPO: UNICO

SOLUZIONE EX.1

In tale schema aula è collegato sia a responsabile che a insegnate. Questo perché ogni professore
può svolgere una materia per ogni aula (Motivo per cui in aula, ci sarà una condizione di UNIQUE
in materia), tuttavia ci sono casi in cui più professori possono svolgere la materia durante il corso
dell’anno, magari in caso di sostituzione o cambio professore.
SOLUZIONE EX.2

SELECT PERSONA.CF, PERSONA.NOME, PERSONA.COGNOME, NUMINT


FROM
INFERMIERE,
PERSONA,
(
SELECT CF_INF as CF_TARGET, COUNT(*) as NUMINT
FROM INFERMIERE, ASSISTE, INTERVENTO,
(
SELECT INTERVENTO.ID as INT_ID_TARGET, COUNT(*) as NumeroMedici
FROM EFFETTUA, INTERVENTO
WHERE EFFETTUA.ID_INT = INTERVENTO.ID
GROUP BY INTERVENTO.ID
)
WHERE INFERMIERE.CF = ASSISTE.CF_INF AND ASSISTE.ID_INT = INTERVENTO.ID
AND TRUNC(SYSDATE) - INTERVENTO.DATA_E_ORA < 30 AND INT_ID_TARGET =
INTERVENTO.ID AND NumeroMedici >= 2
GROUP BY CF_INF
)
WHERE INFERMIERE.CF = CF_TARGET AND PERSONA.CF = INFERMIERE.CF
SOLUZIONE EX.3

CREATE OR REPLACE TRIGGER ControlloEffettuaINf


BEFORE INSERT ON ASSISTE
FOR EACH ROW
DECLARE
NOT_CORRECT_INF EXCEPTION;
MAX_INT_ESEGUITI EXCEPTION;

CF_PAZIENTE CHAR(16);
NUM_INTERVENTI_ESEGUITI_MAX_TIME NUMBER;
NUM_INT_ESEGUITI_SYSDATE NUMBER;
NUM_LIMITE_INT NUMBER;
BEGIN

SELECT INTERVENTO.CF_PAZ
INTO CF_PAZIENTE
FROM INTERVENTO
WHERE :NEW.ID_INT = INTERVENTO.ID;

IF CF_PAZIENTE = :NEW.CF_INF THEN


RAISE NOT_CORRECT_INF;
END IF;

SELECT COUNT(*)
INTO NUM_INTERVENTI_ESEGUITI_MAX_TIME
FROM INFERMIERE, ASSISTE, INTERVENTO
WHERE INFERMIERE.CF = ASSISTE.CF_INF AND ASSISTE.ID_INT = INTERVENTO.ID
AND INTERVENTO.DURATA > 3 AND INTERVENTO.DATA_E_ORA = SYSDATE AND
INFERMIERE.CF = :NEW.CF_INF;

SELECT COUNT(*)
INTO NUM_INT_ESEGUITI_SYSDATE
FROM INFERMIERE, ASSISTE, INTERVENTO
WHERE INFERMIERE.CF = ASSISTE.CF_INF AND ASSISTE.ID_INT = INTERVENTO.ID
AND TRUNC(SYSDATE) - INTERVENTO.DATA_E_ORA < 0.3 AND INFERMIERE.CF
= :NEW.CF_INF;

IF NUM_INTERVENTI_ESEGUITI_MAX_TIME > 0 THEN


NUM_LIMITE_INT := 2;
ELSE
NUM_LIMITE_INT := 4;
END IF;

IF NUM_INT_ESEGUITI_SYSDATE = NUM_LIMITE_INT THEN


RAISE MAX_INT_ESEGUITI;
END IF;
EXCEPTION
WHEN NOT_CORRECT_INF THEN
RAISE_APPLICATION_ERROR(-20001,'IMpossibile effettuare intervento su se stessi!');

WHEN MAX_INT_ESEGUITI THEN


RAISE_APPLICATION_ERROR(-20002,'Infermiere troppo stanco per proseguire con
interventi');

END ControlloEffettuaINf;
/

/*
TRUNC(SYSDATE) - INTERVENTO.DATA_E_ORA
Ci restituisce la differenza di date e ora in giorni, ponendolo minore di 0.33, cioè un terzo di
giornata, ci stiamo riferendo a tutti gli interventi eseguiti nelle ultime 8 ore.
*/

SOLUZIONE EX.4
Per entità debole si intende un’entità che può esistere solo in coesistenza di un’altra o meglio che la
sua esistenza dipende da un’altra la quale, senza, non ha motivo di esistere.
Si immagini la relazione tra stipendio e impiegato. Un impiegato ha senso di esistere senza
stipendio, ma se uno stipendio esiste deve obbligatoriamente essere associato a un impiegato, la sua
esistenza è vincolata all’appartenenza di un’altra entità. In questo caso nell’insieme delle chiavi
primarie dell’entità deboli deve essere contenuta la chiave primaria dell’entità associata.

SOLUZIONE EX.5
Ci sono alcuni vincoli che non possono essere implementati nel diagramma relazionale. Questi sono
i vincoli dinamici e cioè quei vincoli connessi strettamente, al momento di un operazione, con i dati
presenti sul database.
Si pensi a un palestrato che nel giorno 1 inizia con Y ripetizioni di un esercizio Z. Ogni giorno il
palestrato dovrà quantomeno mantenere la prestazione del giorno precedente, se non migliorarla,
altrimenti l’allenamento non viene contato.
In questo caso è impossibile definire a priori un numero statico, quindi con vincoli statici, il numero
di ripetizioni che il palestrato deve eseguire giorno dopo giorno. Allora il vincolo diventa:
Prima di tenere valida la sessione di allenamento verifica che il numero di ripetizioni Y1 del giorno
Gx-1 è minore o uguale del numero di ripetizioni Y2 del giorno Gx.

Potrebbero piacerti anche