ALGEBRA RELAZIONALE Giorgio Giacinto 2010 Basi di Dati 2 Linguaggi di interrogazione relazionale ! Linguaggi di interrogazione (LI) permettono la manipolazione e il reperimento di dati da una base di dati ! Il modello relazionale supporta LI semplici e potenti ! Forte base formale basata sulla logica ! Ottimizzazione ! Linguaggi di interrogazione ! linguaggi di programmazione! ! I LI non sono necessariamente “Turing completi” ! I LI non sono fatti per essere usati in calcoli complessi ! I LI supportano un accesso semplice ed efficiente a grandi insiemi di dati
13
Embed
ALGEBRA RELAZIONALE - diee.unica.itgiacinto/didattica/05BD.Algebra Relazionale.pdf · ALGEBRA RELAZIONALE Giorgio Giacinto 2010 Basi di Dati 2 Linguaggi di interrogazione relazionale!
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
ALGEBRARELAZIONALE
Giorgio Giacinto 2010 Basi di Dati 2
Linguaggi di interrogazionerelazionale! Linguaggi di interrogazione (LI) permettono la
manipolazione e il reperimento di dati da una basedi dati
! Il modello relazionale supporta LI semplici e potenti! Forte base formale basata sulla logica! Ottimizzazione
! Linguaggi di interrogazione ! linguaggi diprogrammazione!! I LI non sono necessariamente “Turing completi”! I LI non sono fatti per essere usati in calcoli complessi! I LI supportano un accesso semplice ed efficiente a grandi
insiemi di dati
Giorgio Giacinto 2010 Basi di Dati 3
Linguaggi formali diinterrogazione relazionale! Due linguaggi di interrogazione matematici
formano la base per i linguaggi “reali” (es.SQL) e per l’implementazione! Algebra relazionale: operazionale, utilissima
per rappresentare i piani di esecuzione! Calcolo relazionale: permette agli utenti di
descrivere ciò che vogliono, piuttosto che ilmodo in cui calcolarlo (non operazionale, madichiarativo)
! Capire l’algebra e il calcolo è la chiave per la comprensionedell’SQL e dell’elaborazione delle interrogazioni!
Giorgio Giacinto 2010 Basi di Dati 4
Nozioni Preliminari! Una interrogazione si applica alle istanze di
relazione, e il risultato di una interrogazione èanch’esso una istanza di relazione! Gli schemi delle relazioni in ingresso sono fissi! Anche lo schema per il risultato di una data interrogazione
è fisso e determinato dalla definizione dei costrutti dellinguaggio di interrogazione.
! Notazione posizionale rispetto a notazione nominaledei campi! La notazione posizionale è più semplice per definizioni
formali, la notazione nominale è più leggibile! In SQL sono usate entrambe
Useremo la notazioneposizionale o a campinominati.Useremo laconvenzione che inomi dei campi neirisultati delleinterrogazioni siano“ereditati” dai nomi deicampi delle relazioni iningresso.
! Ciascuna riga di V1 è accoppiata con ciascuna riga diP1
! Lo schema del risultato ha un campo per ogni campo diV1 e P1, i cui nomi sono, se possibile, “ereditati”! Conflitto: sia V1 che P1 hanno un campo chiamato vid
! Operatore per ridenominare i campi ((C(1 → vid1, 5 → vid2), V1 ! P1)
Divisione! Non supportata come operatore primitivo, ma utile per
esprimere interrogazioni comeTrovare i velisti che hanno prenotato tutte le barche
! Sia A una relazione con due campi, x e ysia B una relazione con il solo campo y! A/B = {)x* | +)y* , B, -)x, y* , A}
cioè, A/B contiene tutte le tuple x (velisti) tali che per ogni tupla y(barca) in B, ci sia una tupla xy in AoppureSe l’insieme di valori y (barche) associato con un valore x (velista)in A contiene tutti i valori y in B, il valore x è in A/B
! In generale, x e y possono essere un qualunque elenco dicampi! y è l’elenco di campi in B! x # y è l’elenco dei campi in A
Trovare i nomi dei velisti che hannoprenotato una barca rossa e una verde
! L’approccio precedente non funziona! Dobbiamoidentificare i velisti che hanno prenotato barcherosse, i velisti che hanno prenotato barche verdi, poitrovare l’intersezione (notate che vid è una chiaveper Velisti)
Trovare i nomi dei velisti che hannoprenotato almeno due barche
! Occorre trovare tutte le tuple di Prenotateriferite allo stesso velista ma con barcheprenotate diverse.! Per confrontare tuple di una stessa relazione
serve un join fra due copie della stessa relazione
Giorgio Giacinto 2010 Basi di Dati 24
Trovare i nomi dei velisti che hannoprenotato tutte le barche
! Uso della divisione! gli schemi delle relazioni in ingresso alla divisione devono
essere scelti con cura
# (Tempvids, ("vid,bid Prenota) / ("bidBarche))
"vnome (Tempvids Velisti)
! Per trovare i velisti che hanno prenotato tutte lebarche “Interlago”
..... / "bid (!bnome=‘Interlago’Barche)
Giorgio Giacinto 2010 Basi di Dati 25
Altre interrogazioni
1. Trovare i colori delle barche prenotate daLubber
2. Trovare i nomi dei velisti che hannoprenotato almeno una barca
3. Trovare i vid dei velisti con età superiore a20 che non hanno prenotato una barcarossa
4. Trovare il nome del velista più giovane5. Trovare i dati della prenotazione più vecchia