Sei sulla pagina 1di 4

Corso di Tecnologie Digitali [1] A.A.

2019-2020
Proff. Cappiello, Plebani, Salnitri, Vitali

POLITECNICO DI MILANO Esame 17 Giugno 2020


INGEGNERIA GESTIONALE

TEMA B

Concettuale
1- Vi è stata commissionata la progettazione della base di dati di un servizio che gestisce
inserzioni per gli affitti di alloggi.

Gli utenti del servizio sono caratterizzati da codice fiscale, nome e cognome, e si distinguono in
utenti Host (per mettere in affitto un proprio alloggio) o Guest (per affittare gli alloggi). Per gli
utenti Host è obbligatorio specificare una partita iva e un recapito telefonico, mentre agli utenti
Guest viene richiesto un indirizzo email.
Gli alloggi messi in affitto dagli Host sono identificati con un codice e caratterizzati dal nome,
dalla posizione (indirizzo, numero civico e CAP), dal numero di persone ospitabili e dal prezzo
per notte. 3,75Le prenotazioni coinvolgono un singolo utente Guest e sono caratterizzate da un
codice univoco per Guest, dalle date di partenza e arrivo, e dall’alloggio selezionato.

2- Modificare la precedente progettazione concettuale introducendo le seguenti integrazioni:


Si vuole inoltre tener traccia dei servizi (es. letto singolo, letto matrimoniale, phon, ecc.) presenti
presso i vari alloggi, caratterizzati da un codice identificativo, una descrizione e la quantità
disponibile nell’alloggio.
Terminato il periodo di affitto, i Guest hanno la possibilità di recensire gli alloggi in cui hanno
soggiornato. Le recensioni contengono un titolo, un voto (da 1 a 5) e un breve testo facoltativo.
Prima di essere pubblicate le recensioni vengono approvate dallo staff del servizio.
Logico

Pista (Nome, Lunghezza, Larghezza)


Utilizzo (NomePista, Data, OraInizio, OraFine, Tipo, CodAereo, MarcaAereo)
Aereo (Codice, Marca, Modello, Tipo, Capacità*, Posti*, NomeCompagnia)
Compagnia (Nome, Telefono, Via, Città, Nazione)
Hangar (Codice, Superficie, Capacità)
Riparazione (CodAereo, MarcaAereo, Data, Ora, Durata, Costo, CodHangar)

Utilizzo.NomePista à Pista.Nome
Utilizzo.(CodAereo, MarcaAereo) à Aereo.(Codice, Marca)
Aereo.(NomeCompagnia) à Compagnia.Nome
Riparazione.(CodAereo, MarcaAereo) à Aereo.(Codice, Marca)
Riparazione.CodHangar à Hangar.Codice

SQL

Si consideri il seguente schema di base di dati che vuole tenere traccia delle informazioni relative
alle lezioni a distanza tenute nel corrente anno scolastico in una scuola superiore di Milano.

PERSONA (CF(K), Nome, Cognome, Indirizzo, Città, Tel)


LEZIONE (IDLezione(K), IDProf, Anno, Sezione, Data, OraInizio, Materia, NumeroOre)
CLASSE (Anno(K), Sezione(K), NumeroStudenti)
PRESENZE (IDLezione(K), Studente(K))

dove gli attributi chiave sono indicati con il simbolo "(K)".

La Classe è contraddistinta dall’attributo Anno che è un attributo numerico contenente valori da 1


a 5 e dall’attributo Sezione che contiene una lettera, es. A, B, C.

a) Trovare il professore che ha tenuto lezioni di storia e di geografia ma non ha mai tenuto lezioni
più lunghe di due ore

SELECT IDProf
FROM Lezione
WHERE IDProf IN (SELECT IDProf
FROM Lezione WHERE Materia = “Storia”)
AND IDProf IN (SELECT IDProf
FROM Lezione WHERE Materia = “Geografia”)
AND IDProf NOT IN (SELECT IDProf FROM Lezione WHERE NumeroOre > 2)

b) Trovare gli studenti che nel mese di marzo 2020 hanno seguito 40 ore lezioni di italiano tenute
da due professori diversi.

SELECT Studente
FROM Lezione JOIN Presenze ON Lezione.IDLezione=Presenze.IDLezione
WHERE Data BETWEEN 01/03/2020 AND 31/03/2020 AND Materia = “Italiano”
GROUP BY Studente
HAVING SUM(NumeroOre) >40 AND Count(DISTINCT IDProf) =2

c) Trovare, per ogni classe, la lezione con più assenti

CREATE VIEW Presenti (Anno, Sezione, Lezione, NumP) AS


SELECT Anno, Sezione, IDLezione, Count(*)
FROM Lezione JOIN Presenze ON Lezione.IDLezione=Presenze.IDLezione
GROUP BY Anno, Sezione, IDLezione
SELECT Anno, Sezione, IDLezione
FROM Presenti AS P1
WHERE NumP = (SELECT MIN (NumP) FROM Presenti AS P2 WHERE P2.Anno=P1.Anno AND
P2.Sezione=P1.Sezione)