Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
UCINA FFERTA BICAZIONE
introducendo, con opportune ridenominazioni, gli identificatori primari delle entità C e
UCINA
Z tra gli attributi delle relazioni R ed Esercizio rispettivamente.
ONA ISTORANTE
R (Codice, Cucina)
ISTORANTE
E (Codice, Nome, Indirizzo, Città, Zona)
SERCIZIO
Allo schema bisogna aggiungere altri due vincoli di integrità: esiste un vincolo di integrità
e l’attributo Tipo di C , ed un altro fra la
referenziale tra l’attributo Cucina di R
ISTORANTE UCINA
coppia di attributi (Città, Zona) di E e la coppia di attributi (Città, CodiceZona) di
SERCIZIO
.
Z
ONA
Resta infine da tradurre l’associazione molti a molti C . Come già visto essa
ONVENZIONE
viene tradotta con una relazione avente come attributi gli identificatori delle entità coinvolte,
questa volta E e C D C , opportunamente ridenominati. Tale coppia di
SERCIZIO ARTA I REDITO
identificatori costituisce anche l’identificatore primario della relazione C :
ONVENZIONE
C (Esercizio, Carta)
ONVENZIONE
Altri due vicoli di integrità referenziale sussistono tra l’attributo Esercizio di C e
ONVENZIONE
, ed un altro fra l’attributo Carta di C e l’attributo
l’attributo Codice di E
SERCIZIO ONVENZIONE
CodiceCarta di C D C .
ARTA I REDITO
In definitiva lo schema relazionale della nostra base dati è il seguente (in Figura 2-5 è
mostrato lo stesso schema descritto in Microsoft Access):
E (Codice, Nome, Indirizzo, Città, Zona)
SERCIZIO
(Codice, Categoria, NrStanze)
A LBERGO
R (Codice, Cucina)
ISTORANTE
C (Tipo, Descrizione)
UCINA
C D C (CodiceCarta, Nome)
ARTA I REDITO
(Esercizio, Carta)
C ONVENZIONE
Z (Città, CodiceZona, Nome)
ONA
C (IdCittà, Nome)
ITTÀ 12
Base dati di un ente turistico
2-5
Figura
I NTERROGAZIONI SULLA BASE DI DATI
Una volta definito lo schema relazionale della nostra base di dati e popolate le tabelle
possiamo passare alla formulazione di alcune interrogazioni sulla base dati stessa. Innanzitutto
popoliamo la nostra base di dati come illustrato nelle pagine seguenti.
Si precisa che si sono fatte le seguenti scelte riguardo i codici identificati delle diverse entità:
¾ è un codice alfanumerico di 5 caratteri;
l'attributo Codice di E
SERCIZIO
¾ l'attributo CodiceCarta di C D C è un codice alfanumerico di 5 caratteri;
ARTA I REDITO
¾ l'attributo Tipo di C è un codice costituito da un singolo carattere;
UCINA
¾ l'attributo CodiceZona di Z è un codice costituito da un singolo carattere.
ONA 13
Base dati di un ente turistico
E
SERCIZIO
Codice Nome Indirizzo Città Zona
AGT44 Hotel Serius Viale Augusto 4 A
CH789 Cin Cian P.le Tecchio 4 A
CRG68 Terrazze Hotel Giorgione Via D'Afflitto 5 B
DIA55 Hotel Diana Via degli Scipioni 4 A
DTN77 Da Tonino Via Lepanto 4 A
EU444 Oasi Viale Italia 6 A
FG567 Trattoria Grasso Via S.Barbara 11 C
GMB33 Gambero Rosso Via Morosini 4 A
GV444 La Pignata Viale Tigli 5 B
HICD1 Holyday Inn Isola E/6 4 D
JH787 Jolly Hotel Via Medina 4 C
JK876 Hotel Vesuvio Via Marina 7 L
LCP66 Lucullo Via Marina 9 L
LEO34 Hotel Leopardi Via Giulio Cesare 4 A
PDM55 La gondola Piazza Duomo 10 A
PDR55 Paradise Via della Liberazione 6 B
PKT23 Pitagoras Via Giulio Cesare 4 A
R33AI Palace Hotel Via Roma 10 A
RTY67 Hotel Minarda Via Bosco 8 C
TY767 Hotel Excelsior Via della Repubblica 6 C
C D C
ARTA I REDITO
CodiceCarta Nome
AE112 American Express
DC332 Diners Club
GH656 VipCard
MC453 MasterCard
TC565 Top Card
VS343 Visa
A
LBERGO
Codice Categoria NrStanze
AGT44 5 35
CRG68 2 25
DIA55 1 8
HICD1 5 100
JH787 3 52
JK876 4 34
LEO34 2 10
R33AI 4 75
RTY67 2 15
TY767 5 78
14
Base dati di un ente turistico
R
ISTORANTE
Codice Cucina
CH789 H
DTN77 T
EU444 T
FG567 C
GMB33 T
GV444 L
LCP66 P
PDM55 F
PDR55 T
PKT23 G
C
ONVENZIONE
Esercizio Carta
AGT44 AE112
AGT44 DC332
CH789 GH656
CRG68 VS343
EU444 MC453
GMB33 AE112
GMB33 MC453
GMB33 VS343
GV444 MC453
GV444 VS343
HICD1 AE112
HICD1 DC332
HICD1 MC453
HICD1 TC565
HICD1 VS343
JH787 MC453
JK876 GH656
PKT23 DC332
R33AI GH656
R33AI MC453
TY767 AE112
TY767 DC332
TY767 GH656
TY767 MC453
TY767 TC565
TY767 VS343
15
Base dati di un ente turistico
C
UCINA
Tipo Descrizione
A Araba
C Casereccia
F Francese
G Greca
H Cinese
L Locale
P Pesce
T Tradizionale
C
ITTÀ
IdCittà Nome
4 Napoli
5 Ariano Irpino
6 Roma
7 Sorrento
8 Grottaminarda
9 Pozzuoli
10 Milano
11 Montecalvo Irpino
Z
ONA
Città CodiceZona Nome
4 A Fuorigrotta
4 B Bagnoli
4 C Centro storico
4 D Centro direzionale
4 E Barra
4 F Ponticelli
5 A Rione Cardito
5 B Centro
5 D Camporeale
5 M Rione Martiri
6 A Eur
6 B Parioli
6 C Centro
7 C Centro
7 L Litorale
8 C Centro
9 C Centro
9 L Litorale
10 A Centro
10 B Cento direzionale
11 C Centro
16
Base dati di un ente turistico
Formuliamo ora sull’istanza appena descritta della nostra base di dati una serie di
interrogazioni SQL di complessità crescente, introducendo man mano i vari operatori e le varie
clausole che il linguaggio di interrogazione mette a disposizione (si fa riferimento allo standard
SQL-2). Per ogni interrogazione verrà mostrato il risultato e la corrispondente traduzione nel
dialetto SQL adoperato da Access.
Interrogazione 1: Estrarre i codici degli alberghi con più di 50 stanze.
select Codice
from Albergo
where NrStanze>50
SELECT Codice
FROM Albergo
WHERE NrStanze>50; Codice
HICD1
JH787
R33AI
TY767
Interrogazione 2: Estrarre tutte le informazioni contenute nella tabella A , relative ad
LBERGO
alberghi a tre o quattro stelle con più di 50 stanze.
select *
from Albergo
where (Categoria=3 or Categoria=4) and NrStanze>50
SELECT *
FROM Albergo
WHERE (Categoria=3 or Categoria=4) and NrStanze>50;
Codice Categoria NrStanze
JH787 3 52
R33AI 4 75
Interrogazione 3:Estrarre i nomi delle zone in cui è divisa la città di Napoli (senza adoperare
esplicitamente l’operatore di join).
select Zona.Nome
from Città, Zona
where Città.Nome='Napoli' and Città.IdCittà=Zona.Città
SELECT Zona.Nome
FROM Città, Zona
WHERE Città.Nome='Napoli' and Città.IdCittà=Zona.Città;
17
Base dati di un ente turistico
Nome
Fuorigrotta
Bagnoli
Centro direzionale
Centro storico
Barra
Ponticelli
Interrogazione 4: Realizzare l’interrogazione precedente mediante l’uso esplicito dell’operatore
di join e fornendo i risultati in ordine alfabetico.
select Z.Nome
from Città C join Zona Z on C.IdCittà=Z.Città
where C.Nome='Napoli'
order by Z.Nome
SELECT Z.Nome
FROM Città AS C INNER JOIN Zona AS Z ON C.IdCittà=Z.Città
WHERE C.Nome='Napoli'
ORDER BY Z.Nome; Nome
Bagnoli
Barra
Centro direzionale
Centro storico
Fuorigrotta
Ponticelli
Interrogazione 5: Estrarre per ogni ristorante codice, nome, indirizzo, nome della zona e della
città e descrizione della cucina offerta.
select R.Codice, E.Nome, E.Indirizzo, Z.Nome as Zona, T.Nome as Città,
C.Descrizione as Cucina
from Cucina C join Ristorante R on C.Tipo=R.Cucina join Esercizio E on
R.Codice=E.Codice join Zona Z on E.Zona=Z.CodiceZona and
E.Città=Z.Città join Città T on Z.Città=T.IdCittà
SELECT R.Codice, E.Nome, E.Indirizzo, Z.Nome AS Zona, T.Nome AS Città,
C.Descrizione AS Cucina
FROM (((Cucina AS C INNER JOIN Ristorante AS R ON C.Tipo=R.Cucina) INNER
JOIN Esercizio AS E ON R.Codice=E.Codice) INNER JOIN Zona AS Z ON
(E.Zona=Z.CodiceZona) AND (E.Città=Z.Città)) INNER JOIN Città AS
T ON Z.Città=T.IdCittà; 18
Base dati di un ente turistico
Codice Nome Indirizzo Zona Città Cucina
GMB33 Gambero Rosso Via Morosini Fuorigrotta Napoli Tradizionale
GV444 La Pignata Viale Tigli Centro Ariano Irpino Locale
DTN77 Da Tonino Via Lepanto Fuorigrotta Napoli Tradizionale
EU444 Oasi Viale Italia Eur Roma Tradizionale
PKT23 Pitagoras Via Giulio Cesare Fuorigrotta Napoli Greca
CH789 Cin Cian P.le Tecchio Fuorigrotta Napoli Cinese
PDM55 La gondola Piazza Duomo Centro Milano Francese
LCP66 Lucullo Via Marina Litorale Pozzuoli Pesce
PDR55 Paradise Via della Liberazione Parioli Roma Tradizionale
FG567 Trattoria Grasso Via S.Barbara Centro Montecalvo Irpino Casereccia
Interrogazione 6: Estrarre per ogni albergo, con almeno tre stelle e che non si trovi a Roma,
codice, nome, indirizzo, nome della zona e della città, categoria e numero di stanze, fornendo
le righe del risultato ordinate per categoria e, a parità di questa, per numero di stanze.
select A.Codice, E.Nome, E.Indirizzo, Z.Nome as Zona, C.Nome as Città,
A.Categoria, A.NrStanze
from Albergo A join Esercizio E on A.Codice=E.Codice join Zona Z on
E.Zona=Z.CodiceZona and E.Città=Z.Città join Città C on
Z.Città=C.IdCittà
where A.Categoria>=3 and C.Nome<>'Roma'
order by A.Categoria, A.NrStanze
SELECT A.Codice, E.Nome, E.Indirizzo, Z.Nome AS Zona, C.Nome AS Città,
A.Categoria, A.NrStanze
FROM (Città AS C INNER JOIN Zona AS Z ON C.IdCittà = Z.Città) INNER JOIN
(Esercizio AS E INNER JOIN Albergo AS A ON E.Codice = A.Codice) ON
(Z.Città = E.Città) AND (Z.CodiceZona = E.Zona)
WHERE A.Categoria>=3 and C.Nome<>'Roma'
ORDER BY A.Categoria, A.NrStanze;
Codice Nome Indirizzo Zona Città Categoria NrStanze
JH787 Jolly Hotel Via Medina Centro storico Napoli 3 52
JK876 Hotel Vesuvio Via Marina Litorale Sorrento 4 34
R33AI Palace Hotel Via Roma Centro Milano 4 75
AGT44 Hotel Serius Viale Augusto Fuorigrotta Napoli 5 35
HICD1 Holyday Inn Isola E/6 Centro direzionale Napoli 5 100
Interrogazione 7: Estrarre i codici dei ristoranti e delle carte di credito con cui sono
convenzionati, mantenendo nel risultato anche i ristoranti che non hanno alcuna convenzione.
select R.