Sei sulla pagina 1di 15

La gestione dei questionari AlmaLaurea

Bilò Davide Matr. 123456789


Indice
1 I requisiti della base di dati.......................................................................................................................................................................................... 1
2 Lo schema entità-relazione.......................................................................................................................................................................................... 2
3 Lo schema logico............................................................................................................................................................................................................. 3
4 La creazione della base di dati in HSQL................................................................................................................................................................... 4
4.1 Elenco dei vincoli di dominio NOT NULL........................................................................................................................................................... 4
4.2 Descrizione dei vincoli di dominio diversi dal vincolo NOT NULL............................................................................................................... 5
4.2.1 Vincoli di dominio, diversi dal vincolo NOT NULL, esprimibili in HSQL........................................................................................... 6
4.3 Codice HSQL delle tabelle.................................................................................................................................................................................. 7
4.4 Descrizione delle query....................................................................................................................................................................................... 9
1 I requisiti della base di dati
AlmaLaurea è un Consorzio Interuniversitario italiano per favorire e monitorare l'inserimento dei laureati nel mondo del lavoro che si
occupa di mantenere informazioni di tipo statistico sui laureati tramite la compilazione di appositi questionari. AlmaLaurea ci ha chiesto di
realizzare una base di dati che soddisfi le specifiche seguenti:
• di ciascuna domanda interessano: il codice numerico e il testo;
• di ciascun ateneo interessano: il codice, il nome, la città e le regione.
• di ciascun laureato interessano: il numero di matricola, il sesso, la data di nascita, l’ateneo di riferimento, il codice del corso di
laurea di riferimento, l’anno (accademico) di immatricolazione, la data di laurea, il voto di laurea senza l'eventuale lode (compreso
tra 66 e 110) e le domande del questionario, con relativa valutazione in decimi, alle quali il laureato ha risposto.

1
2 Lo schema entità-relazione

REGIONE

CITTA
NOME
CODICE

(1,N) (1,1) MATRICOLA


ATENEO ISCRIZIONE

SESSO

DATA_NASCITA
LAUREATO
CORSO_DI_LAUREA

VALUTAZIONE DATA_LAUREA

VOTO_LAUREA
(0,N) (0,N)
DOMANDA RISPOSTA
ANNO_IMMATRICOLAZIONE
CODICE

TESTO

2
3 Lo schema logico

ATENEO LAUREATO

CODICE ATENEO

CITTA MATRICOLA

NOME ANNO_IMMATRICOLAZIONE

REGIONE CORSO_DI_LAUREA

DATA_LAUREA

DATA_NASCITA

SESSO

RISPOSTA VOTO_LAUREA

ATENEO

DOMANDA MATRICOLA

CODICE DOMANDA

TESTO VALUTAZIONE

3
4 La creazione della base di dati in HSQL
4.1 Elenco dei vincoli di dominio NOT NULL

Tabella Attributi

ATENEO CITTA, NOME, REGIONE

DOMANDA TESTO

LAUREATO ANNO_IMMATRICOLAZIONE, CORSO_DI_LAUREA, DATA_LAUREA, DATA_NASCITA, SESSO, VOTO_LAUREA

RISPOSTA VALUTAZIONE

4
4.2 Descrizione dei vincoli di dominio diversi dal vincolo NOT NULL

Numero
Descrizione del vincolo di dominio
vincolo

1 La valutazione di una domanda è un numero compreso tra 1 e 10.

2 Il voto di laurea è un numero compreso tra 66 e 110.

3 Il sesso di un laureato è o M o F.

4 La data di laurea di un laureato è compresa tra l'anno di nascita del laureato considerato e la data attuale.

5 L’anno di immatricolazione è compreso tra l’anno di nascita e l’anno di laurea

5
4.2.1 Vincoli di dominio, diversi dal vincolo NOT NULL, esprimibili in HSQL

Numero
Tabella Nome vincolo Vincolo di dominio
vincolo

1 RISPOSTA VALUTAZIONE_IN_DECIMI CHECK(VALUTAZIONE BETWEEN 1 AND 10)

2 LAUREATO VOTO_LAUREA_TRA_66_E_110 CHECK(VOTO_LAUREA BETWEEN 66 AND 110)

3 LAUREATO SESSO_M_O_F CHECK(SESSO IN ('M','F'))

DATA_LAUREA_COMPRESA_TRA_DATA_NA- CHECK(DATA_LAUREA BETWEEN DATA_NASCITA AND


4 LAUREATO
SCITA_E_OGGI TODAY)

ANNO_IMMATRICOLAZIONE_COMPRESO_TR CHECK(ANNO_IMMATRICOLAZIONE BETWEEN


5 LAUREATO
A_ANNO_NASCITA_E_ANNO_LAUREA YEAR(DATA_NASCITA) AND YEAR(DATA_LAUREA))

6
4.3 Codice HSQL delle tabelle
CREATE TABLE DOMANDA
(
CODICE INTEGER IDENTITY PRIMARY KEY,
TESTO VARCHAR(200) NOT NULL
);

CREATE TABLE ATENEO


(
CODICE INTEGER IDENTITY PRIMARY KEY,
CITTA VARCHAR(50) NOT NULL,
NOME VARCHAR(100) NOT NULL,
REGIONE VARCHAR(50) NOT NULL
);

CREATE TABLE LAUREATO


(
ATENEO INTEGER,
MATRICOLA INTEGER,
ANNO_IMMATRICOLAZIONE NUMERIC(4) NOT NULL,
CORSO_DI_LAUREA VARCHAR(10) NOT NULL,
DATA_LAUREA DATE NOT NULL,
DATA_NASCITA DATE NOT NULL,
SESSO CHAR(1) NOT NULL,
VOTO_LAUREA NUMERIC(3) NOT NULL,

PRIMARY KEY(ATENEO,MATRICOLA),

7
CONSTRAINT VOTO_LAUREA_TRA_66_E_110 CHECK(VOTO_LAUREA BETWEEN 66 AND 110),

CONSTRAINT SESSO_M_O_F CHECK(SESSO IN ('M','F')),

CONSTRAINT DATA_LAUREA_COMPRESA_TRA_DATA_NASCITA_E_OGGI CHECK(DATA_LAUREA BETWEEN DATA_NASCITA AND TODAY),

CONSTRAINT ANNO_IMMATRICOLAZIONE_COMPRESO_TRA_ANNO_NASCITA_E_ANNO_LAUREA CHECK(ANNO_IMMATRICOLAZIONE


BETWEEN YEAR(DATA_NASCITA) AND YEAR(DATA_LAUREA)),

FOREIGN KEY(ATENEO) REFERENCES ATENEO(CODICE) ON DELETE CASCADE ON UPDATE CASCADE


);

CREATE TABLE RISPOSTA


(
ATENEO INTEGER,
MATRICOLA INTEGER,
DOMANDA INTEGER,
VALUTAZIONE NUMERIC(2) NOT NULL,

PRIMARY KEY(ATENEO,MATRICOLA,DOMANDA),

CONSTRAINT VALUTAZIONE_IN_DECIMI CHECK(VALUTAZIONE BETWEEN 1 AND 10),

FOREIGN KEY(ATENEO,MATRICOLA) REFERENCES LAUREATO(ATENEO,MATRICOLA) ON DELETE CASCADE ON UPDATE CASCADE,

FOREIGN KEY(DOMANDA) REFERENCES DOMANDA(CODICE) ON DELETE CASCADE ON UPDATE CASCADE


);

8
4.4 Descrizione delle query
NUMERO_ISCRITTI_PER_ANNO_IMMATRICOLAZIONE: AlmaLaurea vuole conoscere il numero complessivo degli immatricolati, divisi
per anno di immatricolazione.

SELECT ANNO_IMMATRICOLAZIONE, COUNT(*) AS NUMERO_ISCRITTI


FROM LAUREATO
GROUP BY ANNO_IMMATRICOLAZIONE
ORDER BY ANNO_IMMATRICOLAZIONE DESC

ETA_MEDIA_LAUREATI_PER_ANNO_IMMATRICOLAZIONE: AlmaLaurea vuole conoscere l'età media dei laureati divisi per anno di
immatricolazione. Per semplicità, assumeremo che ogni anno sia formato da 365 giorni.

SELECT ANNO_IMMATRICOLAZIONE, AVG(datediff('day',DATA_NASCITA, DATA_LAUREA))/365 AS ETA_MEDIA


FROM LAUREATO
GROUP BY ANNO_IMMATRICOLAZIONE
ORDER BY ANNO_IMMATRICOLAZIONE DESC

ETA_MEDIA_LAUREATI_PER_CLASSE_CORSO_DI_LAUREA_E_ANNO_IMMATRICOLAZIONE: AlmaLaurea vuole conoscere l'età


media dei laureati, suddivisi per anno di immatricolazione e per classe di corso di laurea. Per semplicità, assumeremo che ogni anno sia
formato da 365 giorni.

SELECT CORSO_DI_LAUREA ,ANNO_IMMATRICOLAZIONE, AVG(datediff('day',DATA_NASCITA, DATA_LAUREA))/365 AS


ETA_MEDIA
FROM LAUREATO
GROUP BY CORSO_DI_LAUREA, ANNO_IMMATRICOLAZIONE
ORDER BY CORSO_DI_LAUREA, ANNO_IMMATRICOLAZIONE DESC

9
SESSO_STUDENTI_PER_CLASSE_CORSO_DI_LAUREA: AlmaLaurea vuole conoscere il numero complessivo di studenti universitari,
divisi per genere e per corso di laurea.

SELECT DISTINCT CLASSE AS CLASSE_CORSO_DI_LAUREA,


(SELECT COUNT(*) FROM LAUREATO WHERE CORSO_DI_LAUREA = CLASSE AND SESSO='M') AS MASCHI,
(SELECT COUNT(*) FROM LAUREATO WHERE CORSO_DI_LAUREA = CLASSE AND SESSO='F') AS FEMMINE
FROM CORSO_DI_LAUREA
ORDER BY CLASSE

PERFORMANCE_ATENEI: AlmaLaurea vuole stilare una classifica degli atenei italiani considerando le medie pesate dei voti attribuiti dai
laureati alle varie domande. I pesi da utilizzare sono i seguenti (4 per la domanda con codice 0, 4 per la domanda con codice 1 e 2 per la
domanda con codice 2). I pesi sono attribuiti in maniera tale da avere una valutazione in centesimi.

SELECT NOME AS NOME_ATENEO,


(
4 * (SELECT AVG(VALUTAZIONE)
FROM RISPOSTA,LAUREATO
WHERE RISPOSTA.MATRICOLA=LAUREATO.MATRICOLA AND RISPOSTA.ATENEO=LAUREATO.ATENEO AND
LAUREATO.ATENEO=ATENEO.CODICE AND DOMANDA=0)
+
4 * (SELECT AVG(VALUTAZIONE)
FROM RISPOSTA,LAUREATO
WHERE RISPOSTA.MATRICOLA=LAUREATO.MATRICOLA AND RISPOSTA.ATENEO=LAUREATO.ATENEO AND
LAUREATO.ATENEO=ATENEO.CODICE AND DOMANDA=1)
+
2 * (SELECT AVG(VALUTAZIONE)
FROM RISPOSTA,LAUREATO
WHERE RISPOSTA.MATRICOLA=LAUREATO.MATRICOLA AND RISPOSTA.ATENEO=LAUREATO.ATENEO AND
LAUREATO.ATENEO=ATENEO.CODICE AND DOMANDA=2)

10
) AS VALUTAZIONE
FROM ATENEO
ORDER BY VALUTAZIONE DESC

PERFORMANCE_CLASSI_CDL: AlmaLaurea vuole stilare una classifica delle classi di corso di laurea considerando le medie pesate dei voti
attribuiti dai laureati alle varie domande. I pesi da utilizzare sono i seguenti (4 per la domanda con codice 0, 4 per la domanda con codice 1
e 2 per la domanda con codice 2). I pesi sono attribuiti in maniera tale da avere una valutazione in centesimi.

SELECT DISTINCT CORSO_DI_LAUREA,


(
4 * (SELECT AVG(VALUTAZIONE)
FROM RISPOSTA,LAUREATO,ATENEO
WHERE RISPOSTA.MATRICOLA=LAUREATO.MATRICOLA AND RISPOSTA.ATENEO=LAUREATO.ATENEO AND
LAUREATO.CORSO_DI_LAUREA=X.CORSO_DI_LAUREA AND DOMANDA=0)
+
4 * (SELECT AVG(VALUTAZIONE)
FROM RISPOSTA,LAUREATO,ATENEO
WHERE RISPOSTA.MATRICOLA=LAUREATO.MATRICOLA AND RISPOSTA.ATENEO=LAUREATO.ATENEO AND
LAUREATO.CORSO_DI_LAUREA=X.CORSO_DI_LAUREA AND DOMANDA=1)
+
2 * (SELECT AVG(VALUTAZIONE)
FROM RISPOSTA,LAUREATO,ATENEO
WHERE RISPOSTA.MATRICOLA=LAUREATO.MATRICOLA AND RISPOSTA.ATENEO=LAUREATO.ATENEO AND
LAUREATO.CORSO_DI_LAUREA=X.CORSO_DI_LAUREA AND DOMANDA=2)
) AS VALUTAZIONE
FROM LAUREATO AS X
ORDER BY VALUTAZIONE DESC

11