Calcolo relazionale - E-learning del Polo di Ingegneria

Corso di Laurea in Ingegneria
Informatica
Fondamenti di Informatica II
Modulo “Basi di dati”
a.a. 2012-2013
Docente: Gigliola Vaglini
Docenti di laboratorio: Francesco
Pistolesi, Antonio Virdis
1
Un altro operatore algebrico
derivato: divisione
• Vogliamo trovare i nomi dei clienti che hanno un conto
•
corrente in tutte le filiali di banca di Pisa.
Le relazioni sono
– Branch(
Branch(bank_name,
bank_name, branch_name,
branch_name, branch_city)
branch_city)
– Account(branch_name
branch_name,
,
bank_name,
,
Account(
bank_name account_number,
account_number,
branch_city)
branch_city)
– Depositor(
Depositor(account_number,
account_number, customer_name)
customer_name)
CN,BN (depositor  account) 
BN (BC=‘
branch))
BC=‘Pisa’
Pisa’ (branch))
2
1
Cosa si intende
CN,BN (depositor  account) 
BN (BC=‘
BC=‘Pisa’
Pisa’ (branch))
• Equivale a
CN (depositor  account) –
CN ((CN (depositor  account) X
BN (BC=‘
BC=‘Pisa’
Pisa’ (branch)) CN,BN (depositor  account))
3
CN (depositor  account) X
BN (BC=‘
branch)
BC=‘Pisa’
Pisa’ (branch)
Si combinano tutti i clienti presenti nel data base con
le filiali di Pisa; togliendo da questo insieme le coppie
(cliente,filiale) presenti nel data base, cioè
cioè
CN,BN (depositor  account)
Restano i clenti che hanno un conto in una filiale a
Pisa, ma non in tutte.
Togliendo dai clienti del data base i clienti ottenuti,
restano i clienti che hanno un conto in tutte le filiali
di Pisa.
4
2
Definizione
• Siano r(R) e s(S) relazioni con R S, rs
è una relazione su R-S; una tupla t rs
iff
– t  R-S (r)
– t’ s,  t” r tale che
• t’[S]= t”
t”[S] e
• t’[R[R-S]= t
5
Lezione 12
Linguaggi di interrogazione
dichiarativi: Calcolo Relazionale
6
3
Calcolo relazionale
• Una famiglia di linguaggi dichiarativi,
basati sul calcolo dei predicati del primo
ordine
• Diverse versioni:
– calcolo relazionale su domini
– calcolo su ennuple con dichiarazioni di range
7
Calcolo su domini
•
•
•
•
{ A1: x1, …, An: xn | f }
Ai sono nomi di attributi
xi sono nomi di variabili
La lista di coppie Ai : xi viene detta target list
(descrive il risultato)
f è una formula
– Formule atomiche sono R(A1: x1, …, An: xn),
xn), che è
vera sui valori di x1…
x1…xn che formano una tpla di R,
e xi  xj,
xj, che è vera sui valori di xi e xj che
soddisfano 
8
4
Calcolo su tuple con dichiarazione di range
{ x1.Z1, …, xn.Zn | xi(R1), …, xj(Rm) | f }
• x1.Z1, …, xn.Zn è la target list
• xi(R1) ,…, xj(Rm) è la range list (dice il
campo di variabilità delle variabili)
• f è una formula, con formule atomiche
del tipo xi.Zi  xj.Zj, ad esempio
9
Base di dati per gli esempi
Impiegati(Matricola,Nome, Età,
Stipendio)
Supervisione(Capo, Impiegato)
10
5
Esempio 1a
• Trovare gli impiegati che guadagnano più
di 40 milioni
{ Matricola: m, Nome: n, Età: e, Stipendio:
s|
Impiegati (Matricola: m, Nome: n, Età: e,
Stipendio: s)  s > 40 }
11
Esempio 1b
• Trovare gli impiegati che guadagnano più
di 40 milioni
{ i.* | i(Impiegati) | i.Stipendio > 40 }
12
6
Esempio 2a
• Trovare nome e matricola degli impiegati che
guadagnano più di 40 milioni
{ Matricola: m, Nome: n |
Impiegati (Matricola: m, Nome: n, Età: e,
Stipendio: s)  s > 40 }
oppure
{ Matricola: m, Nome: n |
e,s(Impiegati (Matricola: m, Nome: n, Età: e,
Stipendio: s)  s > 40) }
13
Esempio 2b
• Trovare nome e matricola degli impiegati
che guadagnano più di 40 milioni
{ i.(Matricola, Nome) | i(Impiegati) |
i.Stipendio > 40 }
14
7
Quantificatori esistenziali e universali
• Per interrogazioni più complesse, che in
algebra ad esempio richiedevano una
differenza, servono altri strumenti
• , 
– Sono intercambiabili
– x(f)=¬( x(¬
x(¬(f)))
– x(f)=¬( x(¬
x(¬(f)))
15
Quantificatori esistenziali e universali
• Trovare matricola e nome dei capi i cui impiegati
guadagnano tutti più
più di 40 milioni.
{Matricola: c, Nome: n |
Impiegati(Matricola: c, Nome: n, Età
Età: e, Stipendio: s)

Supervisione(Capo:c, Impiegato:m) 
m'(
m'(n'(
n'(e'(
e'(s'(
¬(Impiegati(Matricola:m', Nome:n', Età
Età:e', Stipendio:s')

Supervisione(Capo:c, Impiegato:m'))  s' > 40))))}
40))))}
16
8
Quantificatori esistenziali e universali
• Trovare matricola e nome dei capi i cui impiegati
guadagnano tutti più
più di 40 milioni.
{Matricola: c, Nome: n |
Impiegati(Matricola: c, Nome: n, Età
Età: e, Stipendio: s)

Supervisione(Capo:c, Impiegato:m) 
¬ m'(
m'(n'(
n'(e'(
e'(s‘(
Impiegati(Matricola: m', Nome: n', Età
Età: e', Stipendio: s')

Supervisione(Capo:c, Impiegato:m')  s'  40))))}
40))))}
17
Quantificatori esistenziali e universali
{Matricola: c, Nome: n |
Impiegati(Matricola: c, Nome: n, Età
Età: e, Stipendio: s)

Supervisione(Capo:c, Impiegato:m) 
¬ m'(
m'(n'(
n'(e'(
e'(s'(
Impiegati(Matr
Impiegati(Matr:: m', Nome: n', Età
Età: e', Stip:
Stip: s') 
Supervisione(Capo:c, Impiegato:m')  s'  40))))}
40))))}
{ i.(Matricola, Nome) | s(Supervisione), i(Impiegati) |
i.Matricola=s.Capo  ¬(i'(Impiegati
)(
s'(Supervisione)
i'(Impiegati)(
s'(Supervisione)
(s.Capo=s'.Capo  s'.Impiegato=i'.Matricola 
i'.Stipendio  40)))}
40)))}
18
9
Calcolo su domini, discussione
• Pregi:
– dichiaratività
dichiaratività
• Difetti:
– "verbosità
"verbosità": tante variabili!
• Le variabili del calcolo dei domini rappresentano singoli
valori
• Nel calcolo su tple rappresentano tple
– possibilità
possibilità di scrivere espressioni senza senso
(dipendenti dal dominio)
dominio)
• A:x,
A:x, B:y|
B:y| R(A:x)
R(A:x)  y=y
y=y
– nell'algebra tutte le espressioni hanno un senso
(indipendenti dal dominio)
dominio)
19
Calcolo su tuple, discussione
• Il calcolo su tuple con dichiarazioni di range non
permette di esprimere alcune interrogazioni
importanti, in particolare le unioni:
R1(AB)  R2(AB)
– Ogni variabile ha un solo range nel risultato, mentre
vorremmo tple sia della prima relazione che della seconda
• Nota: intersezione e differenza sono esprimibili
• Per questa ragione SQL (che è basato su questo
calcolo) prevede un operatore esplicito di unione, ma
non tutte le versioni prevedono intersezione e
differenza
20
10
Calcolo e algebra
• Calcolo e algebra sono "equivalenti"
– per ogni espressione del calcolo relazionale che sia
indipendente dal dominio esiste un'espressione
dell'algebra relazionale equivalente a essa
– per ogni espressione dell'algebra relazionale esiste
un'espressione del calcolo relazionale equivalente a
essa (e di conseguenza indipendente dal dominio)
21
Calcolo e algebra: limiti
• l'insieme di interrogazioni esprimibili è
•
significativo
Ci sono però interrogazioni interessanti non
esprimibili, ad es.
– interrogazioni inerentemente ricorsive, come la
chiusura transitiva
22
11
Chiusura transitiva
Supervisione(Impiegato, Capo)
• Per ogni impiegato, trovare tutti i superiori
(cioè il capo, il capo del capo, e cosi' via)
Impiegato
Rossi
Neri
Lupi
Capo
Mori
Lupi
Bruni
Falchi
Impiegato
Rossi
Neri
Lupi
Rossi
Superiore
Mori
Lupi
Bruni
Falchi
Falchi
23
Chiusura transitiva
• Nell'esempio, basterebbe il join della relazione
•
con se stessa, previa opportuna
ridenominazione
Ma aggiungiamo una nuova ennupla
Impiegato
Rossi
Neri
Lupi
Falchi
Capo
Mori
Lupi
Bruni
Falchi
Leoni
Impiegato
Rossi
Neri
Lupi
Rossi
Lupi
Rossi
Superiore
Mori
Lupi
Bruni
Falchi
Falchi
Leoni
Leoni
24
12
Chiusura transitiva
• Non esiste in algebra e calcolo relazionale la
•
possibilità di esprimere l'interrogazione che
calcoli la chiusura transitiva di una relazione
qualunque
L’operazione si simula con un mumero di join
illimitato
25
Esercitazione 5
26
13
1
• Si consideri il seguente schema di base di dati
– Aeroporto (Città, Nazione)
– Volo (IdVolo, Giorno, OraArrivo, CittàArrivo,
CittàPartenza, OraPartenza)
– Aereo (Tipo, NumPasseggeri, QuantMerci)
• Scrivere una espressione dell’algebra
relazionale che elenchi gli identificatori dei
voli internazionali in partenza da Pisa con
durata inferiore alle 2 ore.
27
Soluzione
 IdVolo ( NazioneItalia(Aeroporto)
 CittàArrivo=Città
CittàPartenza =‘Pisa’  OraArrivo – OraPartenza) < 2
(Volo))
• Rappresentare lo stesso risultato nel
calcolo dei domini.
28
14
• {IdVolo:iv | Volo (IdVolo: iv, Giorno: g,
OraArrivo: oa, CittàArrivo: ca,
CittàPartenza: cp, OraPartenza: op) 
Aeroporto (Città: c, Nazione:n)  c=ca 
cp= "Pisa"  n ≠"Italia"  (oa-op) <2}
• Rappresentare lo stesso risultato nel
calcolo delle tuple.
29
• Soluzione:
• { i.(IdVolo) | i(Volo), a(Aeroporto) |
i.CittàArrivo=a.Città  i.CittàPartenza =
"Pisa“  a.Nazione ≠"Italia" 
i.OraArrivo-i.OraPartenza +) <2 }
30
15
2
• Si consideri l’espressione algebrica
• dove R1, R2 , R3 hanno gli schemi
R1(AB), R2(CDE), R3(FGH).
Trasformarla in modo da ridurre la
dimensione dei risultati intermedi.
31
Soluzione
32
16
3
• Si consideri uno schema relazionale
contenente le relazioni
R1(ABC), R2(DG), R3(EF)
• Formulare in calcolo relazionale su tuple
e su domini l'interrogazione realizzata in
algebra relazionale dalla seguente
espressione:
33
Soluzione
• Questa espressione non è esprimibile in
calcolo sulle tuple a causa dell'unione tra
due diverse tabelle.
• In calcolo sui domini l'espressione
diventa:
34
17
4
• Si consideri uno schema relazionale
contenente le relazioni
R1(ABC), R2(DG), R3(EF). Formulare in
calcolo relazionale su tuple
l'interrogazione realizzata in algebra
relazionale dalla seguente espressione:
35
Soluzione
• i.(D,G), s(E,F)i(R3), s(R1)  s.B=i.F 
i.G=s.C  i.D=s.A
36
18
5
• Si consideri il seguente schema di base di dati
Aeroporto (Città, Nazione)
Volo (IdVolo, TipoAereo, GiornoSettimana,
CittàPartenza, OraPartenza, CittàArrivo,
OraArrivo)
Aereo (TipoAereo, NumPasseggeri, QuantMerci)
• Scrivere un’espressione in algebra relazionale
che elenchi per volo e giorno della settimana i
collegamenti diretti tra Roma e Bucarest.
37
Soluzione
38
19
Soluzione
Lo studente scriva un’espressione in algebra
relazionale che elenchi tutte le città con cui è
collegata direttamente Pisa sia come città di arrivo
che come città di partenza.
39
Soluzione
Lo studente definisca la query precedente
anche nel calcolo relazionale sulle tuple.
40
20
Soluzione
• Non si può fare
41
6
• Dato il seguente schema:
– AEROPORTO(Città, Nazione,NumPiste)
– VOLO(IdVolo,GiornoSett,CittàPart,OraPart,
CittàArr,OraArr,TipoAereo)
– AEREO(TipoAereo,NumPasseggeri,QtaMerci)
scrivere in algebra relazionale la
interrogazione che permette di determinare
gli aeroporti italiani che hanno solo voli
interni.
42
21
Soluzione
43
7
• Si consideri il seguente insieme di relazioni:
• Film(CodFilm, Titolo, CodRegista, Anno)
• Produzione (CasaProduzione, Nazionalita,
•
•
•
CodFilm, Costo)
Attore (CodAttore, Cognome, Nome, Sesso,
DataNascita, Nazionalita)
Interpretazione (CodFilm, CodAttore,
Personaggio)
Regista (CodRegista, Cognome, Nome, Sesso,
DataNascita, Nazionalita)
44
22
7.a
Definire in algebra relazionale una query
che produca la lista dei titoli dei film che
“Marcello Mastroianni” ha interpretato.
45
Soluzione
46
23
Esprimere la stessa query nel calcolo
relazionale dei domini e delle tuple.
47
7.b
• Definire in algebra relazionale una query che
produca la lista dei titoli dei film che
“Marcello Mastroianni” ha interpretato senza
“Sofia Loren”.
48
24
Soluzione
49
Esprimere la stessa query nel
calcolo dei domini
50
25