Sei sulla pagina 1di 12

!

Università degli Studi di Padova — Dipartimento di Scienze Statistiche


Insegnamento di Basi di Dati
Canale dispari A.A. 2020/21

Informatizzazione sistema di prenotazione per un ufficio turistico:

Angelica Spada 1224387 Studente 1


Chiara Boraso 1227357 Studente 2
Appello del 16/06/2021


!1
Indice
Raccolta e analisi dei requisiti 3
Realtà d’interesse 3
Glossario dei termini 4
Tavola dei volumi 4
Tavola delle operazioni 5

Progetto concettuale 6
Schema concettuale con generalizzazioni 6
Schema concettuale senza generalizzazioni 6

Progetto logico 7
Matrice CRUD 7
Schema concettuale ristrutturato 8
Tabelle e vincoli d’integrità referenziale 9

Progetto fisico ed implementazione SQL 10


Principali interrogazioni SQL 10
Creazione delle tabelle 10
Chiavi primarie e secondarie 11
Chiavi esterne e vincoli d'integrità referenziale 11
Esempi di operazioni CRUD 12
Traduzione SQL delle principali interrogazioni 12

!2
Raccolta e analisi dei requisiti
Realtà d’interesse
Un ufficio turistico con sede in alcune città italiane vuole informatizzare il sistema di
prenotazione dei tour che offre.
Nelle 8 città in cui opera organizza due tipologie di tour: itinerari enogastronomici della città
nei suoi vari quartieri e visite guidate in alcuni dei musei del centro.
Ognuno di questi tour è identificato da un ID che contiene il nome della città in cui viene
svolto, l’orario e il prezzo, uguale per i tour della stessa durata.
Ciascun tour é disponibile in spagnolo, inglese, tedesco, francese e i costi non variano con
la scelta della lingua.
I percorsi possono essere svolti in un’ora, 3 ore o nell’intera giornata e se ne svolgono
rispettivamente 4 (9.30, 12.30, 18.30, 21,00) al costo di 10€, 2 (10.00, 15.00) al costo di
30€, 1 (9.30) al costo di 45€).

Ogni tour è offerto da un'unica guida, identificata dal relativo codice fiscale e ciascuna guida
può decidere di condurre uno o più giri turistici. Tutte le guide vengono selezionate
accuratamente tra lo staff di differenti agenzie turistiche che mettono a disposizione i propri
professionisti.
Ciascuna guida può inoltre scegliere quali tra i tour proposti offrire in base alla propria
preparazione. Non è detto che ogni giorno le guide riescano a coprire tutti i tour che l’ufficio
offre in tutte le lingue.

Gli utenti, per accedere al servizio di prenotazione per uno o più tour, devono essere in
possesso di un codice identificativo che si ottiene dopo aver effettuato la registrazione alla
piattaforma. La possibilità di accesso verrà revocata dopo 60 giorni in caso di inattività.
Tale codice può rappresentare sia la singola persona che un gruppo, ciascuno dei quali può
essere formato da un minimo di 2 persone ad un massimo di 20.
Affinché un servizio venga svolto, è necessaria la presenza di almeno 2 persone.
Una volta effettuato l’accesso alla piattaforma l’utente riuscirà a visualizzare tutti i tour con le
rispettive informazioni, e avrà la possibilità sia di scegliere il tour sia la guida turistica, il cui
profilo contiene nome, cognome e lingue parlate.
L’utente non potrà più prenotarsi a un tour se sono presenti già 20 persone.

Una volta partecipato ad uno dei tour l’utente registrato, sia singolo che gruppo, può
esprimere il grado di soddisfazione del giro turistico di cui ha usufruito lasciando una
recensione con una valutazione da 1 a 5 stelle. Ogni tour registra solo le 50 recensioni più
recenti.

!3
Glossario dei termini
Di seguito viene riportato un elenco dei termini più frequenti e centrali della nostra realtà
d’interesse:

Concetto Descrizione Proprietà


Tour Giro turistico organizzato che si svolge con ID, lingua
minimo 2 persone e massimo 20
Mezzo Mezzo di trasporto per lo svolgimento del tour Nessuno
Preparazione Conoscenze ed esperienze della guida Lingue conosciute
Utente Registrato nel sito e può usufruire del servizio Tipologia, codice
identificativo
Gruppo Gruppo di minimo 2 persone e massimo 20 che Associazione, n. di
possono iscriversi attraverso un’unica persone
registrazione
Registrazione Operazione necessaria effettuata dall’utente per
accedere ai tour
Recensione Valutazione del tour su scala da 1 a 5 Tour, utente

Tavola dei volumi


Concetto Volume Annotazione
Tour 224 Vengono offerti da 7 a 28 tour al giorno in 8
differenti città
Utente 120.000 La registrazione di un utente si annulla dopo 60
giorni ed è calcolata in base alle registrazioni
giornaliere.
Recensione 11.200 Ogni tour contiene al massimo le 50 recensioni più
recenti.
Guida turistica 100

Agenzia turistica 30
Assunzione 100 Ogni guida è assunta da solo un’agenzia
Sceglie 120.000
Scrive 11.200 La recensione è unica

!4
Tavola delle operazioni
Riportiamo qui la tavola di alcune delle operazioni possibili con la relativa frequenza
giornaliera.
Abbiamo ritenuto opportuno scegliere questo arco di tempo perché l’agenzia turistica offre i
propri servizi giornalmente.

N. Descrizione Frequenza Giornaliera


1 Registrare un utente 2000
2 Prenotare un tour da parte di un utente 2000
3 Assumere una guida da parte di un agenzia 0.5
4 Scrivere una recensione 1000
5 Assegnare tour ad una guida 224

6 Modificare il nome del museo di un tour 0.1


7 Cancellare un utente 500
8 Trovare le guide di un’agenzia 2

Si stima che ogni giorno si registrino un massimo di 250 persone interessate ai tour in una
città, quindi un totale di 2000 per le 8 città.
Questo numero è stato scelto approssimando a 10 utenti il totale di partecipanti ad ognuno
dei 28 tour proposti, considerando che spesso la registrazione di un utente rappresenta un
gruppo.

!5
Schema concettuale con generalizzazioni

Schema concettuale senza generalizzazioni


Sono state realizzati 2 accorpamenti in entità generali per GRUPPO e MUSEO poiché si
accedeva più spesso alle entità generali UTENTE e TOUR.

!6
Progetto logico
Matrice CRUD
Operazione 1
Viene richiesto un solo accesso per ciascuna nuova registrazione e si tratta dell’aggiunta di
un elemento a utente.
Operazione 2
Assumendo già l’esistenza delle tre entità, sono necessari 3 accessi di lettura alle entità e
uno di scrittura dell’associazione per un totale di 4 accessi.
Operazione 3
Innanzitutto realizziamo 2 accessi per la creazione di guida e di agenzia a cui si aggiungono
i 2 di lettura e un quinto di associazione tra essi.
Operazione 4
Sono necessari 3 accessi all’entità di lettura e uno di scrittura dell’associazione per un totale
di 4 accessi.
Operazione 5
Leggiamo la guida, leggiamo il tour e creiamo l’assegnazione scelta per un totale di 3
operazioni.
Operazione 6
Leggiamo il tour e modifichiamo il suo attributo. Sono in tutto 2 accessi.
Operazione 7
Serve solamente un accesso per eliminare l’utente.
Operazione 8
Viene richiesto di trovare le guide per agenzia che sono 3.3 in media. È necessario leggere
prima la guida, poi le assunzioni per agenzia e le agenzie per guide.
In totale: 1 + 3.3 + 3.3 = 7.6

Operaz Recen Utente Tour Agenzia Guida Scrittur Scelt Assunz Costo
ione sioni a a ione
1 C 2000

2 R R R C 2000 x
4=
8000
3 C,R C, R C 5x0.5
4 R R R C 4x100
0
5 R R C 3x
224

6 R, U 2 x 0.1
7 D 500
8 R R R 7.6x2
Volum 11.200 120.00 224 30 100 11.200 120. 100
e 0 000

!7
Schema concettuale ristrutturato
Per evitare ridondanza abbiamo accorpato le agenzie da cui sono state assunte le guide
come attributi di quest’ultime.
In questo modo diminuisce il costo delle operazioni 3 e 8:

Guida Costo
3 C 0.5
8 R 2
Volume 100

!8
Tabelle e vincoli d’integrità referenziale

RECENSIONE(_ID_, ID-tour, ID-utente, data, voto)


RECENSIONE(ID, data, voto) != NULL
RECENSIONE(ID-utente)!→UTENTE(ID)
RECENSIONE(ID-tour)!→TOUR(ID)

UTENTE(_ID_, n-persone, associazione)


UTENTE(ID) != NULL

TOUR(_ID_, museo, lingua)


TOUR(ID) =! NULL

GUIDA(_CF_, lingua parlata, nome, cognome, nome-agenzia, citta-agenzia)


GUIDA(CF) != NULL
GUIDA(lingua-parlata, nome, cognome, nome-agenzia) !=NULL

SCELTA(_utente, tour, guida_)


SCELTA(utente)!→UTENTE(ID)
SCELTA(tour)!→TOUR(ID)
SCELTA(guida)!→GUIDA(CF)

!9
Progetto fisico ed implementazione SQL
Principali interrogazioni SQL
1. Trovare il numero di tour in spagnolo.
2. Trovare gli utenti che hanno svolto un tour di tutta la giornata.
3. Trovare la media delle recensioni dei tour a Milano raggruppati per lingua.
4. Trovare le guide per ogni agenzia.

Creazione delle tabelle


Creare il database UFFICIO-TURISTICO:
CREATE DATABASE ufficio_turistico;
USE ufficio_turistico;

Creare la tabella UTENTE:


CREATE TABLE utente
(ID VARCHAR(8) NOT NULL,
n_persone INTEGER(2) DEFAULT 1,
associazione VARCHAR(20));

Creare la tabella RECENSIONE:


CREATE TABLE recensione
(data DATE NOT NULL,
voto INTEGER(1) NOT NULL,
ID VARCHAR(8) NOT NULL
ID_tour VARCHAR(25) NOT NULL
ID_utente VARCHAR(8) NOT NULL);

Creare la tabella TOUR:


CREATE TABLE tour
(ID VARCHAR(25) NOT NULL,
citta VARCHAR(15) NOT NULL,
museo VARCHAR(20) DEFAULT ‘Itinerario in città ’,
lingua VARCHAR(10));

Creare la tabella GUIDA:


CREATE TABLE guida
(CF CHAR(16) NOT NULL,
lingue VARCHAR(15) NOT NULL,
nome VARCHAR(15) NOT NULL,
cognome VARCHAR(20) NOT NULL,
nome_agenzia VARCHAR(15) NOT NULL,
citta_agenzia VARCHAR(15) DEFAULT ‘Non disponibile’);

Creare la tabella SCELTA:


CREATE TABLE scelta
(guida CHAR(16) NOT NULL,
utente VARCHAR(8) NOT NULL,
tour VARCHAR(25) NOT NULL);

!10
Chiavi primarie e secondarie
Imporre ID come chiave primaria della tabella UTENTE:
ALTER TABLE utente ADD PRIMARY KEY ID_pkey (ID);

Imporre ID come chiave primaria della tabella RECENSIONE:


ALTER TABLE recensione ADD PRIMARY KEY ID_pkey (ID);

Imporre ID come chiave primaria della tabella TOUR:


ALTER TABLE tour ADD PRIMARY KEY ID_pkey (ID);

Imporre codice_fiscale come chiave primaria della tabella GUIDA:


ALTER TABLE guida ADD PRIMARY KEY CF_pkey (CF);

Imporre come chiave primaria gli attributi utente, tour, guida della tabella SCELTA:
ALTER TABLE scelta ADD PRIMARY KEY (utente, tour, guida)

Chiavi esterne e vincoli d'integrità referenziale


Creare una chiave esterna tra l’ID-utente della tabella RECENSIONE e l’ID della tabella
UTENTE:
ALTER TABLE recensione
ADD FOREIGN KEY (ID_utente)
REFERENCES utente(ID);

Creare una chiave esterna tra l’ID-tour della tabella RECENSIONE e l’ID della tabella
TOUR:
ALTER TABLE recensione
ADD FOREIGN KEY (ID_tour)
REFERENCES tour(ID);

Creare una chiave esterna tra utente della tabella SCELTA e l’ID della tabella UTENTE:
ALTER TABLE scelta
ADD FOREIGN KEY (utente)
REFERENCES utente(ID);

Creare una chiave esterna tra tour della tabella SCELTA e l’ID della tabella TOUR:
ALTER TABLE scelta
ADD FOREIGN KEY (tour)
REFERENCES tour(ID);

Creare una chiave esterna tra guida della tabella SCELTA e CF della tabella GUIDA:
ALTER TABLE scelta
ADD FOREIGN KEY (guida)
REFERENCES guida(CF);

!11
Esempi di operazioni CRUD
4 Scrivere una recensione:
INSERT INTO recensione VALUES (‘08-06-2020’, 4, ‘HFI4D’ ‘BD289N’,
‘Milano 8:00 €20’);

6 Modificare il museo di un tour:


UPDATE tour SET museo = ‘Pinacoteca Brera’ WHERE ID = ‘Milano 8:00
€20’);

7 Cancellare un utente:
DELETE FROM utente WHERE ID = ‘BD289N’;

Traduzione SQL delle principali interrogazioni


1. Contare i tour in spagnolo:
SELECT COUNT(*)
FROM tour
WHERE lingua = ‘spanish’

2. Trovare gli utenti che hanno svolto un tour di tutta la giornata:


SELECT DISTINCT utente.id
FROM scelta
INNER JOIN utente
ON scelta.utente = utente.id
INNER JOIN tour
ON tour.id = scelta.tour
WHERE tour.id LIKE ‘%9:30%’

3. Trovare la media delle recensioni dei tour di Milano raggruppati per lingua:
SELECT tour.lingua, AVG(recensione.voto)
FROM recensione INNER JOIN tour
ON recensione.ID_tour = tour.ID
WHERE tour.ID LIKE BINARY ‘Milano%’
GROUP BY tour.lingua

4. Trovare le guide per ogni agenzia:


SELECT CF, nome_agenzia
FROM guida
GROUP BY nome_agenzia

!12

Potrebbero piacerti anche