Calcolo relazionale Calcolo relazionale: logica dei predicati, dove la semantica di ogni predicato esprime una condizione sui dati. E un linguaggio di query, dichiarativo: il risultato è dato da una descrizione formale del risultato, senza specificare come ottenerlo. Elementi base: costanti variabili, il cui dominio è dato da: valori sui domini degli attributi (calcolo relazionale sui domini DRC) tuple (calcolo relazionale sulle tuple TRC) operatori di confronto operatori logici quantificatori Gli elementi base sono combinati a formare espressioni del calcolo relazionale, dette formule.
Calcolo relazionale sui domini Formato query DRC: { < x 1,x 2,,x n > F } x 1,x 2,,x n VAR sono variabili. L insieme delle variabili è detto obiettivo. F FBF è una formula di logica dei predicati. Il risultato della query è dato da tutte le tuple < x 1,x 2,,x n > che rendono vera F.
Calcolo relazionale sui domini Definizione (Formule DRC) Passo base: formule atomiche < x 1,x 2,,x n > r, dove x 1,x 2,,x n VAR ed r è una relazione. x i op x j, dove x i,x j VAR ed op {<,>,<=,>=,<>,=}. x i op k, dove x i VAR, op {<,>,<=,>=,<>,=} e k è una costante. Passo induttivo: formule composte se F e G sono formule, allora lo sono anche ( F) e (F G), dove è un qualunque connettivo binario. se F è una formula, allora lo sono anche x(f) e x(f), dove x VAR occorre libera in F.
Calcolo relazionale sui domini Definizione La variabile x in x(f) o x(f) si dice legata. Una variabile che non è legata da nessun quantificatore (esistenziale o universale) si dice libera. NOTA: Le variabili x 1,x 2,,x n di una query { <x 1,x 2,,x n > F } sono le uniche variabili libere della formula F.
DRC: esempi Trovare tutti i marinai con rate maggiore di 7. {< I, N, R, A> < I, N, R, A> s R > 7} variabili libere La condizione garantisce che il dominio delle variabili libere sia limitato dal domino degli attributi dello schema di relazione della relazione s Ogni tupla nella risposta deve soddisfare questa condizione Il DRC ha la stessa espressività dell algebra relazionale.
DRC: esempi Trovare tutti i marinai con rate maggiore di 7 che hanno noleggiato la barca 313. {< I, N, R, A > < I, N, R, A > s R > 7 Sid, Bid, Date (< Sid, Bid, Date > r Sid = I Bid = 313) } condizione di join tra s e r variabili legate della sottoformula forma contratta: <Sid, Bid, Date> r (Sid = I Bid = 313)
DRC: esempi Trovare tutti i marinai con rate maggiore di 7 che hanno noleggiato una barca rossa. {< I, N, R, A > < I, N, R, A > s R > 7 < Sid, Bid, Rate > r (Sid = I < B, Bn, Bc > b (B = Bid Bc = red ))} Trovare i marinai che hanno noleggiato tutte le barche. {< I, N, R, A > < I, N, R, A > s < B, Bn, Bc > b ( < Sid, Bid, Date > r (Sid = I Bid = B))} < B, Bn, Bc > b (F) forma contratta di: B, Bn, Bc ( (< B, Bn, Bc > b) F) oppure B, Bn, Bc ( (< B, Bn, Bc > b) F)
DRC: esempi Trovare i marinai che hanno noleggiato tutte le barche rosse. {< I, N, R, A > < I, N, R, A > s < B, Bn, Bc > b (Bc <> red < Sid, Bid, Date > r (Sid = I Bid = B))} {< I, N, R, A > < I, N, R, A > s < B, Bn, Bc > b (Bc = red ( < Sid, Bid, Date > r (Sid = I Bid = B)))} Trovare i nomi delle barche noleggiate solo da marinai esperti (rate > 7). {< B > Bid,Bc (< Bid, B, Bc > b < Sid, Bid, D > r (Bid <> Bid < S, N, R, A > s (S = Sid R > 7)))} {< B > Bid,Bc (< Bid, B, Bc > b ( < Sid, Bid, D > r (Bid = Bid < S, N, R, A > s (S = Sid R <= 7))))}
DRC: esercizi 1. Trovare i marinai più esperti. 2. Trovare i marinai meno esperti tra quelli che hanno noleggiato Alinghi. 3. Trovare il colore delle barche che non sono mai state noleggiate. 4. Trovare il nome delle barche che sono state noleggiate da marinai anziani (età > 65). 5. Trovare il nome delle barche che sono state noleggiate da marinai anziani (età > 65) e mai da marinai di età inferiore a 45 anni. 6. Trovare i noleggi di barche rosse effettuati il maggio scorso.
Calcolo relazionale sulle tuple In DRC esiste una variabile per ogni dominio: molto dispendioso in termini di lunghezza espressiva e di complessità. In TRC si considera una variabile non come dominio ma come insieme di tuple. Formato query TRC: { var.(lista attributi) var(r) [, var (s), ] F } lista degli obiettivi associazione tra le variabili libere (che occorrono nella lista degli obiettivi o nella formula) e nomi di relazioni formula atomica o composta var,var VAR Il risultato della query è dato da tutte le tuple var che rendono vera la formula F. Il TRC è meno espressivo del DRC (ad esempio, in TRC l unione non è esprimibile), a fronte di un formalismo più semplice
TRC: esempi Trovare i marinai di rate maggiore di 7. {v.* v(s) v.srate > 7} * sta per tutti gli attributi v è una variabile il cui dominio di valori è dato dalle tuple della relazione s Trovare i nomi dei marinai di rate maggiore di 7 che hanno noleggiato una barca rossa. {v.(sname) v(s) v.srate > 7 u(r)( w(b)(v.sid = u.sid u.bid = w.bid w.bcolor = red ))}
TRC: esempi Trovare i marinai che oggi hanno noleggiato una barca. {v.* v(s), w(r) v.sid = w.sid w.rdate = } Trovare i marinai che hanno noleggiato tutte le barche. {v.* v(s) w(b)( u(r)(u.bid = w.bid u.sid = v.sid))} Trovare le barche rosse che sono state noleggiate da Popeye. {v.* v(b), w(r), u(s) v.bcolor = red w.bid = v.bid w.sid = u.sid u.sname = Popeye }
TRC: esercizi 1. Trovare i marinai più esperti. 2. Trovare i marinai che oggi hanno noleggiato una barca che è già stata noleggiata da un marinaio di rate 10. 3. Trovare il colore delle barche che non sono mai state noleggiate. 4. Trovare le barche noleggiate da marinai inesperti (rate < 6).