Laboratorio di Basi di Dati
Tutorato: il database Mondial
Turni 2 e 3
Luca Piovesan
Luca Canensi
Programma e Consigli
• Presentazione della base di dati (Mondial) utilizzata per l’esame di
laboratorio
• Esercizi
• Come passare l’esame di laboratorio:
– Capire bene ciò che si fa
– Saperlo motivare
– La sola query (anche se corretta) non vi garantisce la riuscita
dell’esame, se non sapete spiegare cosa avete fatto
• Portare, per ogni query:
– Testo della query
– Lista di elementi considerati e motivazioni (quali tabelle, quali vincoli,
perché avete considerato questi)
– (eventuali) Query alternative
– (eventuali) Query di controllo
L’utente Mondial
• ATTENZIONE: il database
Mondial è associato a un
utente diverso da quello
della connessione. Quindi
in SQL Developer le tabelle
di Mondial non sono
riportate nella solita
locazione dell’interfaccia
utente, ma occorre
individuare, nella
connessione Test, la voce
Altri utenti e l’utente
Mondial
Connessione a Test
• Connessione a Test:
Nome utente: test
Password:
test
Nome host: laboracle.educ.di.unito.it
Porta:
1521
SID:
ORALAB
Riferimento a tabelle di Mondial
• L’utente Test possiede delle tabelle con nomi uguali a quelli di
Mondial, ma non sono quelle che dovrete usare per l’esame
• Per far riferimento alle tabelle di Mondial, dovete anteporre
«mondial.» al nome delle tabelle.
Ad es. select * from mondial.country where
mondial.country.code='I';
• Dovreste avere pieno accesso in lettura alle tabelle, ma
nessuna possibilità di modifica
Mondial – cosa rappresenta
• Mondial è un database geografico e geopolitico. Rappresenta
(molto teoricamente) lo stato del mondo nell’anno 2009.
Principali elementi:
• COUNTRY
• CONTINENT
• CITY
• ORGANIZATION
• LAKE, RIVER, SEA, ISLAND, MOUNTAIN e DESERT
La Tabella COUNTRY
• Rappresenta informazioni sugli stati (e simili).
• Chiave primaria: CODE
• Vincoli:
– Area >=0
– Population >=0
– Name NOT NULL
– Name UNIQUE
• Referenziata da (attributo COUNTRY che referenzia COUNTRY.CODE):
ECONOMY
POPULATION
POLITICS
LANGUAGE
RELIGION
ETHNICGROUP
BORDERS
Attenzione: BORDERS non è simmetrica!
Perché è importante conoscere le
dipendenze?
• Le tabelle ECONOMY, POPULATION, POLITICS , LANGUAGE, RELIGION,
ETHNICGROUP, BORDERS contengono delle informazioni relative ai singoli
paesi, e devono essere messe in Join con COUNTRY per avere
l’informazione desiderata.
• Esempio: che lingua si parla in Pakistan?
select country.name, language.name
from mondial.country join mondial.language
on country.code = language.COUNTRY
where country.name = 'Pakistan';
• Trovate una lista delle dipendenze completa (con una rappresentazione un
po’ strana) sul sito di mondial
La Tabella CONTINENT
• Rappresenta i continenti.
• Chiave primaria: NAME
• Come si collega una country al suo continente?
– La tabella ENCOMPASSES referenzia sia CONTINENT che COUNTRY
– ENCOMPASSES contiene informazioni sulla percentuale (percentage) di
superficie di una country in un continente
ATTENZIONE: COUNTRY non è unico in ENCOMPASSES.
Le Tabelle CITY e PROVINCE
CITY:
• Chiave primaria: <NAME, COUNTRY, PROVINCE>
• Vincoli: (vedeteli voi)
• Referenzia PROVINCE via <COUNTRY, PROVINCE> (la provincia in cui si
trova la città)
PROVINCE:
• Chiave primaria: <NAME, COUNTRY>
• Vincoli: (vedeteli voi)
• Referenzia CITY via <CAPITAL, COUNTRY, CAPPROV> (per la capitale della
provincia)
Entrambe referenziano COUNTRY.
La tabella ORGANIZATION
• Rappresenta un’organizzazione con una sede (headquarter) situata in una
specifica città.
• Chiave primaria: ABBREVIATION
• Referenzia la CITY dove ha sede via <CITY, COUNTRY, PROVINCE>
• Gli stati possono essere membri di un’organizzazione. La tabella
ISMEMBER modella questo dato, referenziando lo stato (via COUNTRY) e
l’organizzazione (via ORGANIZATION)
Elementi geografici
• Le tabelle LAKE, RIVER, SEA, ISLAND, MOUNTAIN e DESERT rappresentano
elementi geografici.
• Per ognuno, l’attributo NAME è la chiave primaria
• Dove sono locate?
– Le tabelle GEO_??? con ??? = {LAKE, RIVER, SEA, ISLAND, MOUNTAIN e
DESERT} referenziano l’elemento geografico (tramite NAME) e la
provincia (tramite <COUNTRY, PROVINCE>)
• ESTUARY e SOURCE (modellati come attributi di RIVER) hanno una tabella
GEO_???
• Un’isola può essere locata in un LAKE, RIVER o SEA. Modellato tramite
ISLANDIN
• Due mari possono essere uniti. Modellato con la tabella MERGESWITH che
fa riferimento ai due SEA. ATTENZIONE: non è simmetrica!
Dov’è locata una città
• Una CITY può essere sulle sponde di un fiume, di un lago, o di un mare.
Questo aspetto è modellato con la tabella LOCATED. La tabella fa
riferimento ad una CITY e al fiume|mare|lago sul quale si affaccia.
– ATTENZIONE: come si fa riferimento ad una CITY?
– ATTENZIONE2: può esserci più di una tupla per ogni CITY
• Una CITY può essere su un’isola. Questo aspetto è modellato con la tabella
LOCATEDON, che fa riferimento alla CITY e alla ISLAND.
• Anche una MOUNTAIN può essere su un’isola. Questo aspetto è modellato
con la tabella MOUNTAINON che fa riferimento alla MOUNTAIN e alla
ISLAND.
Query di Esercitazione
Provate a fare queste query con la metodologia con la quale affrontereste
quelle dell’esame (analizzandole e motivandole).
1.
2.
3.
4.
5.
Elencare per ogni religione, il numero di paesi in cui si pratica (il risultato
deve contenere il nome della religione e il numero di paesi, ordinato
alfabeticamente per nome della religione)
Elencare le città italiane (nome) che si trovano su un’isola
Elencare tutti i vulcani con altezza superiore a 4500 metri
Elencare le città olandesi il cui nome inizia con ‘A’
Elencare le città che si trovano al mare, su un’isola (marittima), o in
montagna
Query di Esercitazione - II
6.
7.
Elencare i nomi dei mari che confinano con l’oceano Atlantico
Elencare i nomi dei mari che confinano con l’oceano Atlantico con
profondità superiore ai 500 metri, e la loro profondità
8. Calcolare il numero di abitanti di città costiere (sul mare). (Usare SUM)
9. Calcolare il numero di abitanti di città isolane, raggruppati per
continente
10. Elencare le città che hanno una popolazione maggiore del più piccolo dei
paesi
11. Elencare le città (con la loro popolazione) che hanno una popolazione
maggiore rispetto ad 1/3 della media delle popolazioni di tutti i paesi