Algebra Relazionale - Virgilio
Algebra Relazionale - Virgilio
Algebra Relazionale - Virgilio
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
<strong>Algebra</strong> <strong>Relazionale</strong><br />
Linguaggi di query per database relazionali<br />
• Operazioni su database:<br />
– query: “legge" dati dal database<br />
– aggiornamenti: cambia il contenuto del database<br />
• Entrambe possono essere viste come trasformazioni da database a<br />
database<br />
• Strumenti teorici per lo studio dei linguaggi di query:<br />
– <strong>Algebra</strong> relazionale, un linguaggio “procedurale”<br />
– Calcolo relazionale, un linguaggio “dichiarativo”<br />
– Datalog, formalismo basato sulla programmazione logica<br />
• SQL: linguaggio esistente (con caratteristiche sia procedurali che<br />
dichiarative) ) per query e aggiornamenti<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 2
<strong>Algebra</strong> <strong>Relazionale</strong><br />
• Un insieme di operatori<br />
– Definiti su relazioni<br />
– Che producono relazioni<br />
e, quindi, possono essere combinati in espressioni complesse<br />
• Operatori<br />
– Unione, intersezione, differenza<br />
– Ridenominazione<br />
– Selezione<br />
– Proiezione<br />
– Join (naturale, prodotto cartesiano, theta join)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 3<br />
Una visione d'insieme<br />
unarie<br />
ridenominazione<br />
selezione<br />
proiezione<br />
operazioni<br />
binarie<br />
unione<br />
intersezione<br />
differenza<br />
join<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 4
Unione, intersezione, differenza<br />
• Le relazioni sono insiemi; possiamo applicare le classiche<br />
operazioni insiemistiche<br />
• Attenzione! Vogliamo che I risultati siano relazioni (cioė,<br />
insiemi omogenei di tuple)<br />
• Quindi:<br />
– È necessario applicare gli operatori di unione,<br />
intersezione e differenza solamente su relazioni definite<br />
sugli stessi attributi<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 5<br />
Unione<br />
CICLISMO<br />
CF Cognome Eta`<br />
RSSX Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
CALCIO<br />
CF Cognome Eta`<br />
RSSY Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del ciclismo ciclismo<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del ciclismo ciclismo<br />
oppure oppuredel del calcio calcio<br />
CICLISMO ∪ CALCIO<br />
CF Cognome Eta`<br />
RSSX Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
RSSY Rossi 20<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del calcio calcio<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 6
Intersezione<br />
CICLISMO<br />
CF Cognome Eta`<br />
RSSX Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
CALCIO<br />
CF Cognome Eta`<br />
RSSY Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del ciclismo ciclismo<br />
Persone Persone che che hanno hanno<br />
entrambi entrambigli gli hobby hobby<br />
CICLISMO ∩ CALCIO<br />
CF Cognome Eta`<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del calcio calcio<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 7<br />
CICLISMO<br />
CF Cognome Eta`<br />
RSSX Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
CALCIO<br />
CF Cognome Eta`<br />
RSSY Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
Differenza<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del ciclismo ciclismo<br />
CICLISMO - CALCIO<br />
Persone Persone che che hanno hanno<br />
solo solol’hobby l’hobby del del ciclismo ciclismo<br />
CF Cognome Eta`<br />
RSSX Rossi 20<br />
Differenza: Differenza: operazione operazione<br />
non non commutativa<br />
commutativa<br />
CALCIO - CICLISMO<br />
CF Cognome Eta`<br />
RSSY Rossi 20<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del calcio calcio<br />
Persone Persone che che hanno hanno<br />
solo solol’hobby l’hobby del del calcio calcio<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 8
Un semplice esempio di query<br />
CICLISMO<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del ciclismo ciclismo<br />
CF Cognome Eta`<br />
RSSX Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
Persone che che hanno<br />
solamente uno uno<br />
dei deidue due hobby<br />
CALCIO<br />
CF Cognome Eta`<br />
RSSY Rossi 20<br />
NRXY Neri 21<br />
VRDX Verdi 20<br />
Persone Persone che che hanno hanno<br />
l’hobby l’hobbydel del calcio calcio<br />
CICLISMO – CALCIO ∪ CALCIO – CICLISMO<br />
oppure<br />
CICLISMO ∪ CALCIO – CICLISMO ∩ CALCIO<br />
CF Cognome Eta`<br />
RSSX Rossi 20<br />
RSSY Rossi 20<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 9<br />
Cardinalità (numero delle tuple)<br />
Siano R e S due relazioni con cardinalità | R | e | S |<br />
Qual è la cardinalità delle relazioni<br />
R ∪ S<br />
| R ∪ S | = | R | + | S | - | R ∩ S |<br />
R - S<br />
| R - S | = | R | - | R ∩ S |<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 10
Un’unione significativa ma impossibile<br />
Tabella1<br />
Attore Età<br />
Paolo Rossi 34<br />
Mario Bianchi 35<br />
Carlo Verdi 43<br />
Tabella2<br />
Attrice Età<br />
Sara Blu 24<br />
Eva verdi 27<br />
Sara Neri 32<br />
Tabella1 ∪ Tabella2 ???<br />
• PROBLEMA: Attore e Attrice sono nomi differenti, ma<br />
entrambi denotano il fatto di far parte del cast<br />
• SOLUZIONE: rinominare gli attributi<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 11<br />
Ridenominazione<br />
• Operatore unario<br />
• Cambia il NOME degli attributi senza cambiarne il valore<br />
• Consente alcune operazioni di tipo insiemistico<br />
• Notazione:<br />
– ρ Y← X (r)<br />
• esempio:<br />
– ρ Genitore← Padre (Paternità)<br />
• Se sono coinvolti più attributi, l’ordine è importante:<br />
– ρ A,B ← C,D (Impiegati)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 12
Esempio di ridenominazione<br />
Tabella1<br />
Attore Età<br />
Paolo Rossi 34<br />
Mario Bianchi 35<br />
Carlo Verdi 43<br />
ρ Nome ← Attore (Tabella1)<br />
Nome Età<br />
Paolo Rossi 34<br />
Mario Bianchi 35<br />
Carlo Verdi 43<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 13<br />
Ridenominazione ed Unione<br />
Tabella1 Attore Età<br />
Tabella2 Attrice Età<br />
Paolo Rossi 34<br />
Sara Blu 24<br />
Mario Bianchi 35<br />
Eva verdi 27<br />
Carlo Verdi 43<br />
Sara Neri 32<br />
ρ Nome ← Attore (Tabella1) ∪ ρ Nome ← Attrice. (Tabella2)<br />
Nome Età<br />
Paolo Rossi 34<br />
Mario Bianchi 35<br />
Carlo Verdi 43<br />
Sara Blu 24<br />
Eva Verdi 27<br />
Sara Neri 32<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 14
Ridenominazione ed Unione su più<br />
attributi<br />
Impiegati<br />
Cognome Agenzia Salario<br />
Rossi Roma 45<br />
Neri Milano 53<br />
Operai<br />
Cognome Fabbrica Stipendio<br />
Bianchi Roma 45<br />
Verdi Firenze 53<br />
ρ Sede,Paga ← Agenzia,Salario (Impiegati) ∪<br />
ρ Sede,Paga ← Fabbrica,Stipendio (Operai)<br />
Cognome Sede Paga<br />
Rossi Roma 45<br />
Neri Milano 53<br />
Bianchi Roma 45<br />
Verdi Firenze 53<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 15<br />
Selezione e Proiezione<br />
• Due operatori unari “ortogonali”<br />
– Selezione: decomposizione orizzontale<br />
– Proiezione: decomposizione verticale<br />
A B C<br />
Selezione<br />
A B C<br />
A B C<br />
Proiezione<br />
A B<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 16
Selezione<br />
• Produce relazioni<br />
– con lo stesso schema di quelle cui è applicata<br />
– con un sottoinsieme di tuple (QUELLE CHE<br />
SODDISFANO UNA CONDIZIONE)<br />
σNome=‘Paolo’ (r)<br />
• Notazione:<br />
– σ F (r)<br />
r<br />
Matricola Nome<br />
40445 Paolo<br />
43555 Piero<br />
43566 Piero<br />
• Semantica:<br />
– σ F (r) = { t | t ∈ r e t soddisfa F}<br />
Matricola<br />
Nome<br />
40445 Paolo<br />
σ Nome=‘Paolo’ (r)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 17<br />
Selezione, esempio<br />
Studenti<br />
Matricola Nome Cognome CdL<br />
40445 Paolo Rossi Fisica<br />
43555 Piero Bianchi Matematica<br />
43566 Piero Verdi Informatica<br />
55655 Marco Rossi Lettere<br />
σ Nome = ‘Piero’ or CdL = ‘Fisica’ (Studenti)<br />
Matricola Nome Cognome CdL<br />
40445 Paolo Rossi Fisica<br />
43555 Piero Bianchi Matematica<br />
43566 Piero Verdi Informatica<br />
Studenti che hanno Nome Piero<br />
OPPURE<br />
frequentano il CdL di Fisica<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 18
Selezione, un altro esempio<br />
Studenti<br />
Matricola Nome Cognome CdL<br />
40445 Paolo Rossi Fisica<br />
43555 Piero Bianchi Matematica<br />
43566 Piero Verdi Informatica<br />
55655 Marco Rossi Lettere<br />
Studenti che se ferquentano matematica NON si chiamano ‘Piero’<br />
σ CdL = ‘Matematica’ ⇒ Nome ’Piero’ (Studenti)<br />
Studenti<br />
not(Nome = ‘Piero’ and CdL = ‘Matematica’)<br />
Nome ‘Piero’ or CdL ‘Matematica’<br />
Matricola Nome Cognome CdL<br />
40445 Paolo Rossi Fisica<br />
43566 Piero Verdi Informatica<br />
55655 Marco Rossi Lettere<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 19<br />
Proiezione<br />
• Produce relazioni<br />
– su un SOTTOINSIEME degli attributi della relazione<br />
cui è applicata<br />
– tuple ristrette al sottoinsieme<br />
• Notazione: sia una relazione r(X) e Y ⊆ X:<br />
– π Y (r)<br />
r Matricola Nome<br />
• Semantica:<br />
– π Y (r) = { t [Y] | t ∈ r }<br />
40445 Paolo<br />
43555 Piero<br />
43566 Piero<br />
π Matricola (r)<br />
Matricola<br />
40445<br />
43555<br />
π 43566<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> Matricola (r)<br />
20
Proiezione, esempio<br />
Studenti<br />
Cognome Nome CdL Univ<br />
Bianchi Carlo Fisica MI<br />
Rossi Marco Matematica TO<br />
Verdi Silvia Matematica MI<br />
Scuri Giorgio Biologia MI<br />
π Cognome,Nome (Studenti)<br />
Cognome<br />
Bianchi<br />
Rossi<br />
Verdi<br />
Scuri<br />
Nome<br />
Carlo<br />
Marco<br />
Silvia<br />
Giorgio<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 21<br />
Un esempio più difficile<br />
Studenti<br />
Cognome Nome CdL Univ<br />
Bianchi Carlo Fisica MI<br />
Rossi Marco Matematica TO<br />
Verdi Silvia Matematica MI<br />
Scuri Giorgio Biologia MI<br />
Cognome e nome degli Studenti MILANESI<br />
π Cognome,Nome σ Univ=‘MI’ (Studenti)<br />
Cognome Nome CdL Univ<br />
Bianchi Carlo Fisica MI<br />
Verdi Silvia Matematica MI<br />
Scuri Giorgio Biologia MI<br />
π<br />
Cognome<br />
Bianchi<br />
Verdi<br />
Scuri<br />
Nome<br />
Carlo<br />
Silvia<br />
Giorgio<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 22
Proiezione e selezione commutano tra loro ?<br />
Studenti<br />
Cognome Nome CdL Univ<br />
Bianchi Carlo Fisica MI<br />
Rossi Marco Matematica TO<br />
Verdi Silvia Matematica MI<br />
Scuri Giorgio Biologia MI<br />
Che tabella denota la seguente espressione<br />
π Cognome,Nome (Studenti)<br />
σ Univ=‘MI’ π Cognome,Nome (Studenti)<br />
Cognome<br />
Bianchi<br />
Rossi<br />
Verdi<br />
Scuri<br />
Nome<br />
Carlo<br />
Marco<br />
Silvia<br />
Giorgio<br />
σ Univ = ‘MI’<br />
Cognome<br />
Nome<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 23<br />
Studenti<br />
Problema inverso<br />
Cognome Nome CdL Univ<br />
Bianchi Carlo Fisica MI<br />
Rossi Marco Matematica TO<br />
Verdi Silvia Matematica MI<br />
Scuri Giorgio Biologia MI<br />
σ Cognome=‘Bianchi’ π Cognome,Nome,Univ σ CdL=‘Biologia’ or CdL=‘Fisica’ (Studenti) ?<br />
Cognome Nome Univ<br />
Bianchi Carlo MI<br />
Studenti che frequentano Biologia o Fisica, hanno cognome ‘Bianchi’<br />
e relativa Università d’appartenenza<br />
equivalentemente<br />
π Cognome,Nome,Univ σ (CdL=‘Biologia’ or CdL=‘Fisica’) and Cognome=‘Bianchi’ (Studenti)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 24
Cardinalità delle Proiezioni<br />
Studenti<br />
Cognome Nome CdL Univ<br />
Rossi Marco Fisica MI<br />
Neri Massimo Fisica FI<br />
Viola Mary Matematica TO<br />
Blu Sara Matematica TO<br />
π Cognome, Nome (Studenti)<br />
Cognome<br />
Rossi<br />
Neri<br />
Viola<br />
Blu<br />
Nome<br />
Marco<br />
Massimo<br />
Mary<br />
Sara<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 25<br />
Cardinalità delle Proiezioni<br />
Studenti<br />
Cognome Nome CdL Univ<br />
Rossi Marco Fisica MI<br />
Neri Massimo Fisica FI<br />
Viola Mary Matematica TO<br />
Blu Sara Matematica TO<br />
π CdL, Univ (Studenti)<br />
CdL<br />
Fisica<br />
Fisica<br />
Matematica<br />
Univ<br />
MI<br />
FI<br />
TO<br />
Unione delle<br />
due tuple<br />
uguali<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 26
Cardinalità delle Proiezioni<br />
• Il risultato di una proiezione contiene AL PIÙ lo stesso<br />
numero di tuple di partenza<br />
• Alcune tuple, diventando uguali dopo la proiezione,<br />
collassano<br />
• π Y (r) contiene lo stesso numero di tuple di r se e solo se Y<br />
è una SUPERCHIAVE di r.<br />
– Ciò è vero anche quando Y è casualmente una<br />
superchiave per l’istanza r.<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 27<br />
Cardinalità delle Proiezioni, esempio<br />
Studenti<br />
Cognome Nome CdL Matricola<br />
Rossi Marco Fisica 305011<br />
Neri Massimo Fisica 345526<br />
Viola Mary Matematica 554363<br />
Blu Sara Matematica 565544<br />
π Cognome, Matricola π CdL π Cognome, Nome<br />
Cognome Matricola<br />
Rossi 305011<br />
Neri 345526<br />
Viola 554363<br />
Blu 565544<br />
| π | = | Studenti |<br />
CdL<br />
Fisica<br />
Matematica<br />
| π | < | Studenti |<br />
Cognome<br />
Rossi<br />
Neri<br />
Viola<br />
Blu<br />
Nome<br />
Marco<br />
Massimo<br />
Mary<br />
Sara<br />
| π | = | Studenti |<br />
casualmente<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 28
SQL si comporta diversamente sulle proiezioni !<br />
Diversamente dall’algebra relazionale, in SQL le proiezioni<br />
non collassano<br />
Studenti<br />
Cognome Nome CdL Matricola<br />
Rossi Marco Fisica 305011<br />
Neri Massimo Fisica 345526<br />
Viola Mary Matematica 554363<br />
Blu Sara Matematica 565544<br />
<strong>Algebra</strong> relazionale<br />
π CdL Studenti<br />
CdL<br />
Fisica<br />
Matematica<br />
Proiezione di CdL<br />
SQL<br />
Select CdL<br />
from Studenti<br />
CdL<br />
Fisica<br />
Fisica<br />
Matematica<br />
Matematica<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 29<br />
Join<br />
• Principale operatore dell’algebra relazionale<br />
• Consente di stabilire connessioni tra dati in tabelle<br />
differenti grazie al fatto che il modello relazionale è un<br />
modello “per valori”<br />
• Due forme principali di join:<br />
– join NATURALE: è importante il nome degli attributi<br />
– THETA join<br />
• Entrambi i tipi di join sono denotati dal simbolo<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 30
Un esempio di join NATURALE<br />
Studenti<br />
Nome Cognome Matricola<br />
Paolo Rossi 40445<br />
Piero Bianchi 43555<br />
Piero Verdi 43566<br />
Marco Rossi 55655<br />
Esami<br />
Matricola Materia Voto<br />
40445 Informatica 18<br />
55655 Fisica 24<br />
40445 Matematica 30<br />
43555 Algoritmi 27<br />
40445 Fisica 23<br />
Studenti<br />
Esami<br />
Nome Cognome Matricola Materia Voto<br />
Paolo Rossi 40445 Informatica 18<br />
Paolo Rossi 40445 Matematica 30<br />
Paolo Rossi 40445 Fisica 23<br />
Piero Bianchi 43555 Algoritmi 27<br />
Marco Rossi 55655 Fisica 24<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 31<br />
Join naturale: definizione<br />
• Due relazioni r 1 (X 1 ) e r 2 (X 2 )<br />
• r 1 r 2 (join naturale di r 1 e r 2 ) è una relazione su X 1 ∪ X 2 avente come<br />
tuple l’insieme<br />
{ t su X 1 ∪ X 2 | t [X 1 ] ∈ r 1 e t [X 2 ] ∈ r 2 }<br />
o, equivalentemente<br />
{ t su X 1 ∪ X 2 | esiste t 1 ∈ r 1 e t 2 ∈ r 2 con<br />
t [X 1 ] = t 1 e t [X 2 ] = t 2 }<br />
Le tuple del join si ottengono come concatenazione di tuple che<br />
CONCORDANO SUI CAMPI COMUNI<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 32
Join naturale: esempio<br />
Studenti ⇐ r 1<br />
Nome Cognome Matricola<br />
Paolo Rossi 40445<br />
Piero Bianchi 43555<br />
Piero Verdi 43566<br />
Marco Rossi 55655<br />
Esami ⇐ r 2<br />
Matricola Materia Voto<br />
40445 Informatica 18<br />
55655 Fisica 24<br />
40445 Matematica 30<br />
43555 Algoritmi 27<br />
40445 Fisica 23<br />
Studenti Esami= { tsu X 1 ∪ X 2 | t [X 1 ] ∈ r 1 e t [X 2 ] ∈ r 2 }<br />
{ t su X 1 ∪ X 2 | esiste t 1 ∈ r 1 e t 2 ∈ r 2 con t [X 1 ] = t 1 e t [X 2 ] = t 2 }<br />
t<br />
Nome Cognome Matricola Materia Voto<br />
Paolo Rossi 40445 Informatica 18<br />
Paolo Rossi 40445 Matematica 30<br />
Paolo Rossi 40445 Fisica 23<br />
Piero Bianchi 43555 Algoritmi 27<br />
Marco Rossi 55655 Fisica 24<br />
X 1 X 2<br />
X1 ∩ X 2<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 33<br />
Join naturale: osservazioni<br />
• Le tuple nel join sono ottenute combinando tuple<br />
dalle relazioni di partenza che concordano sugli<br />
attributi comuni<br />
• Gli attributi comuni tipicamente formano una<br />
chiave per una delle due relazioni coinvolte<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 34
Join naturale su più attributi<br />
Studenti<br />
Nome Cognome Matr Univ<br />
Paolo Rossi 40445 MI<br />
Piero Bianchi 43555 MI<br />
Marco Verdi 43566 TO<br />
Paolo Rossi 40445 FI<br />
Esami<br />
Materia Voto Univ Matr<br />
Informatica 18 TO 43566<br />
Fisica 24 MI 40445<br />
Matematica 30 MI 43555<br />
Algoritmi 27 MI 43555<br />
Fisica 23 FI 40445<br />
Studenti<br />
Esami<br />
Nome Cognome Matr Univ Materia Voto<br />
Paolo Rossi 40445 MI Fisica 24<br />
Piero Bianchi 43555 MI Matematica 30<br />
Piero Bianchi 43555 MI Algoritmi 27<br />
Marco Verdi 43566 TO Informatica 18<br />
Paolo Rossi 40445 FI Fisica 23<br />
•Quali chiavi?<br />
•Quali vincoli<br />
d’integrità?<br />
•Join naturale?<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 35<br />
I join possono essere “incompleti”<br />
Se una tupla in una relazione non ha una “controparte” nell’altra<br />
allora essa non partecipa al join (tupla “pendente”)<br />
Professori<br />
Dipartimenti<br />
Professore<br />
Rossi<br />
Bianchi<br />
Verdi<br />
Dipartimento<br />
Informatica<br />
Fisica<br />
Fisica<br />
Dipartimento<br />
Fisica<br />
Matematica<br />
Direttore<br />
Blu<br />
Neri<br />
Professori<br />
Dipartimenti<br />
Professore Dipartimento Direttore<br />
Bianchi Fisica Blu<br />
Verdi Fisica Blu<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 36
I join possono essere vuoti<br />
Se nessuna tupla in una relazione ha una “controparte” nell’altra,<br />
cioè, se ogni tupla è “pendente”<br />
Professori<br />
Dipartimenti<br />
Professore<br />
Rossi<br />
Bianchi<br />
Verdi<br />
Dipartimento<br />
Informatica<br />
Fisica<br />
Fisica<br />
Dipartimento<br />
Biologia<br />
Matematica<br />
Direttore<br />
Blu<br />
Neri<br />
Professori<br />
Dipartimenti<br />
Professore Dipartimento Direttore<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 37<br />
Professore<br />
Rossi<br />
Bianchi<br />
Verdi<br />
I join possono essere “pieni”<br />
Se ogni tupla in una relazione ha una “controparte” nell’altra abbiamo<br />
un join di massima cardinalità pari al prodotto delle cardinalità<br />
Professori<br />
Dipartimento<br />
Fisica<br />
Fisica<br />
Fisica<br />
Professori<br />
Università<br />
Università<br />
Dipartimento<br />
Fisica<br />
Fisica<br />
Professore Dipartimento Città<br />
Rossi Fisica MI<br />
Rossi Fisica TO<br />
Bianchi Fisica MI<br />
Bianchi Fisica TO<br />
Verdi Fisica MI<br />
Verdi Fisica TO<br />
Città<br />
MI<br />
TO<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 38
Cardinalità di un join<br />
Siano r 1 (X 1 ) e r 2 (X 2 ) due relazioni. In generale, vale che<br />
0 ≤ | r 1 r 2 | ≤ | r 1 | . | r 2 |<br />
( Notazione: | r | è la cardinalità dell’istanza r ). Inoltre:<br />
• Se il join è completo, allora<br />
| r 1 r 2 | ≥ max{| r 1 | , | r 2 |}<br />
• Se X 1 ∩ X 2 contiene una chiave per r 2 , allora<br />
| r 1 r 2 | ≤ | r 1 |<br />
• Se X 1 ∩ X 2 è una chiave primaria per r 2 ed esiste un vincolo<br />
di integrità referenziale tra X 1 ∩ X 2 in r 1 e tale chiave, allora<br />
| r 1 r 2 | = | r 1 |<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 39<br />
Join esterni (outer joins)<br />
• Variante del join che permette di mantenere informazioni<br />
da OGNI tupla<br />
• Le tuple che non hanno controparte vengono completate<br />
con dei NULL<br />
• Tre tipi di join esterno<br />
– Destro (right): sono completate solo le tuple della prima<br />
relazione<br />
– Sinistro (left): sono completate solo le tuple della<br />
seconda relazione<br />
– Pieno (full): sono completate le tuple di entrambe<br />
relazione<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 40
Join esterni (outer joins)<br />
Esame<br />
Corsi<br />
Studente<br />
Rossi<br />
Verdi<br />
Bianchi<br />
Materia<br />
Fisica<br />
Fisica<br />
Informatica<br />
Professore<br />
Neri<br />
Scuri<br />
Materia<br />
Matematica<br />
Informatica<br />
Esame<br />
Esame<br />
LEFT Corsi<br />
RIGHT Corsi<br />
Studente Materia Professore<br />
Rossi Fisica NULL<br />
Verdi Fisica NULL<br />
Bianchi Informatica Scuri<br />
Studente Materia Professore<br />
NULL Matematica Neri<br />
Bianchi Informatica Scuri<br />
Esame<br />
FULL Corsi<br />
Studente Materia Professore<br />
Rossi Fisica NULL<br />
Verdi Fisica NULL<br />
Bianchi Informatica Scuri<br />
NULL Matematica Neri<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 41<br />
Il join naturale è<br />
Join n-ario<br />
• commutativo: r 1 r 2 = r 2 r 1<br />
• associativo: (r 1 r 2 ) r 3 = r 1 (r 2 r 3 )<br />
Possiamo definire un join n-ario come:<br />
n<br />
r i<br />
i = 1<br />
Abbreviazione<br />
= r 1 r 2 … r n<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 42
Cliente<br />
Cognome<br />
ID_Cliente<br />
Rossi 10<br />
Bianchi 11<br />
Verdi 9<br />
Join n-ario: esempio<br />
Noleggio<br />
ID_Cliente<br />
ID_CD<br />
10 1<br />
9 1<br />
10 2<br />
CD<br />
ID_CD<br />
Artista<br />
1 REM<br />
2 U2<br />
Cliente Noleggio CD<br />
Cognome ID_Cliente ID_CD Artista<br />
Rossi 10 1 REM<br />
Rossi 10 2 U2<br />
Verdi 9 1 REM<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 43<br />
Prodotto cartesiano di tabelle<br />
• Il join naturale è definito anche su tabelle che non<br />
hanno attributi comuni<br />
• In tal caso non imponiamo alcuna condizione sulle<br />
concatenazioni. Il join conterrà tutte le possibili<br />
concatenazioni ⇒ prodotto cartesiano<br />
• A volte il prodotto cartesiano viene indicato con<br />
r 1 ×r 2<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 44
Prodotto cartesiano: esempio<br />
Studenti<br />
Cognome<br />
Corso<br />
CdL<br />
Nome<br />
Materia<br />
Rossi<br />
Bianchi<br />
Neri<br />
Fisica<br />
Fisica<br />
Matematica<br />
Fisica<br />
Matematica<br />
Meccanica<br />
<strong>Algebra</strong><br />
Studenti<br />
CdL<br />
Cognome Corso Nome Materia<br />
Rossi Fisica Fisica Meccanica<br />
Rossi Fisica Matematica <strong>Algebra</strong><br />
Bianchi Fisica Fisica Meccanica<br />
Bianchi Fisica Matematica <strong>Algebra</strong><br />
Neri Matematica Fisica Meccanica<br />
Neri Matematica Matematica <strong>Algebra</strong><br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 45<br />
Join n-ario: esempio<br />
Cliente<br />
Cognome<br />
ID_Cliente<br />
Rossi 10<br />
Bianchi 11<br />
Verdi 9<br />
Noleggio<br />
ID_Cliente<br />
ID_CD<br />
10 1<br />
9 1<br />
10 2<br />
CD<br />
ID_CD<br />
Artista<br />
1 REM<br />
2 U2<br />
Cliente Noleggio CD<br />
Cognome ID_Cliente ID_CD Artista<br />
Rossi 10 1 REM<br />
Rossi 10 2 U2<br />
Bianchi 11 1 REM<br />
Bianchi 11 2 U2<br />
Verdi 9 1 REM<br />
Verdi 9 2 U2<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 46
Theta join<br />
A volte, vedi l’esempio precedente, il prodotto cartesiano non<br />
è molto significativo:<br />
Theta join: join + selezione<br />
r 1 ϑ r 2 = σ ϑ (r 1 r 2 )<br />
ϑ congiunzione di uguaglianze ⇒ equi-join<br />
es: ϑ = (ID = Matr) and (Ditta = Sede) and (Paga = Stipendio)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 47<br />
Equi join: esempio<br />
Studenti<br />
Cognome<br />
Corso<br />
CdL<br />
Nome<br />
Materia<br />
Rossi<br />
Bianchi<br />
Neri<br />
Fisica<br />
Fisica<br />
Matematica<br />
Fisica<br />
Matematica<br />
Meccanica<br />
<strong>Algebra</strong><br />
σ Corso = Nome (Studenti CdL) = Studenti Corso = Nome CdL<br />
Cognome Corso Nome Materia<br />
Rossi Fisica Fisica Meccanica<br />
Rossi Fisica Matematica <strong>Algebra</strong><br />
Bianchi Fisica Fisica Meccanica<br />
Bianchi Fisica Matematica <strong>Algebra</strong><br />
Neri Matematica Fisica Meccanica<br />
Neri Matematica Matematica <strong>Algebra</strong><br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 48
Join naturale via equi join<br />
Di fatto, il join naturale viene realizzato mediante equi join.<br />
In che modo???<br />
X ,Y campi comuni<br />
•INPUT: r(W,X,Y), s(X,Y,Z)<br />
•OUTPUT: r(W,X,Y) s(X,Y,Z)<br />
senza utilizzare il join naturale<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 49<br />
Join naturale via equi join<br />
I step<br />
Ridenominazione dei campi comuni, così applico tranquillamente<br />
join naturali ottenendo prodotti cartesiani<br />
s(X,Y,Z) ⇒ ρ X’,Y’ ← X,Y (s)<br />
relazione su (X’,Y’,Z)<br />
II step<br />
Equi join sui campi ridenominati<br />
r(W,X,Y) X=X’ and Y=Y’ ρ X’,Y’ ← X,Y s(X,Y,Z) relazione su (W,X,Y,X’,Y’,Z)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 50
Join naturale via equi join<br />
III step<br />
Proiezione degli attributi che effettivamente intervengono in<br />
r(W,X,Y)<br />
s(X,Y,Z)<br />
π W,X,Y,Z<br />
r(W,X,Y)<br />
X=X’ and Y=Y’ ρ X’,Y’ ← X,Y s(X,Y,Z)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 51<br />
Query<br />
• Una query è una funzione da istanze di database a<br />
relazioni<br />
• Le query sono formulate in algebra relazionale<br />
mediante espressioni su relazioni<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 52
Esempi di query: Esercizio 1<br />
Si assuma il seguente schema di data base per la gestione di una biblioteca:<br />
LIBRO(codice_libro, autore, titolo)<br />
LETTORE(codice_lettore, nome, cognome)<br />
PRESTITO(codice_lettore, codice_libro, data_prestito)<br />
Si esprima, nell’algebra relazionale, ciascuna delle seguenti affermazioni:<br />
a) Titoli dei libri presi a prestito il giorno 12/5/99;<br />
b) Autori dei libri presi a prestito dai signori Paolo Rossi;<br />
c) Codici dei lettori che hanno preso a prestito libri scritti da Gibson<br />
oppure da Sterling.<br />
a) a) π titolo titolo<br />
σ data_prestito=12/5/99 data_prestito=12/5/99<br />
PRESTITO LIBRO<br />
b) b) π autore autore<br />
σ nome=‘Paolo’ nome=‘Paolo’ and and cognome=‘Rossi’ cognome=‘Rossi’<br />
LETTORE PRESTITO LIBRO<br />
c) c) π codice_lettore σ codice_lettore autore=‘Gibson’ autore=‘Gibson’ or or autore=‘Stirling’ LIBRO autore=‘Stirling’ PRESTITO<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 53<br />
Ulteriori aspetti dell’algebra relazionale<br />
<br />
<br />
<br />
Valori nulli nelle espressioni algebriche<br />
Viste<br />
Equivalenza di espressioni algebriche<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 54
Come gestire NULL nelle espressioni<br />
condizionali?<br />
Esame<br />
Matricola Cognome Voto<br />
305011 Bianchi 23<br />
324511 Verdi 21<br />
308666 Neri NULL<br />
• σ Voto>22 (Esame)<br />
• Quali ennuple compaiono nel risultato?<br />
• La prima sì, la seconda no; e la terza?<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 55<br />
Una logica a tre valori<br />
• Vero (V) , Falso (F), Sconosciuto (U, unknown)<br />
• Tabelle di verità:<br />
not<br />
F<br />
U<br />
V<br />
V<br />
U<br />
F<br />
or F U V<br />
F F U V<br />
U U U V<br />
V V V V<br />
and F U V<br />
F F F F<br />
U F U U<br />
V F U V<br />
• Una selezione produce come risultato le ennuple per cui il<br />
predicato di selezione è VERO<br />
• In molti casi la logica a tre valori produce un risultato<br />
“sensato,“ in altri no<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 56
Esame<br />
Qualche problema col NULL<br />
Matricola Cognome Voto<br />
305011 Bianchi 23<br />
324511 Verdi 21<br />
308666 Neri NULL<br />
Che tabella denota la seguente espressione?<br />
σ Voto > 22 (Esame) ∪ σ Voto ≤ 22 (Esame)<br />
• Intuitivamente:<br />
• Di fatto:<br />
Esame<br />
Esame - σ Matricola = 308666 (Esame)<br />
Cio` perche’ le le selezioni vengono valutate<br />
SEPARATAMENTE<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 57<br />
Esame<br />
Qualche problema col NULL<br />
Matricola Cognome Voto<br />
305011 Bianchi 23<br />
324511 Verdi 21<br />
308666 Neri NULL<br />
Che tabella denota la seguente espressione?<br />
σ Voto > 22 or Voto ≤ 22 (Esame)<br />
• Intuitivamente:<br />
• Di fatto:<br />
Esame<br />
Esame - σ Matricola = 308666 (Esame)<br />
Cio` perche’ anche le le condizioni atomiche vengono valutate<br />
SEPARATAMENTE<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 58
Come ottenere risultati sempre sensati?<br />
Trattare il valore nullo "sintatticamente," con<br />
condizioni atomiche specifiche:<br />
A is NULL<br />
A is not NULL<br />
Anche in in SQL<br />
Vero quando A contiene NULL<br />
Vero quando A non contiene NULL<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 59<br />
Come ottenere Esami con la selezione su Voto?<br />
Esame<br />
Matricola Cognome Voto<br />
305011 Bianchi 23<br />
324511 Verdi 21<br />
308666 Neri NULL<br />
σ Voto > 22 (Esame) ∪ σ Voto ≤ 22 (Esame) ∪ σ Voto is NULL (Esame)<br />
σ Voto > 22 or Voto ≤ 22 or Voto is NULL (Esame)<br />
La presenza di NULL va gestita esplicitamente<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 60
Viste e Architettura ANSI/SPARC per DBMS<br />
utenti<br />
Schema esterno<br />
Schema esterno<br />
utenti<br />
Schema esterno<br />
Schema esterno<br />
utenti<br />
Schema esterno<br />
Schema esterno<br />
Schema logico<br />
Schema logico<br />
Schema interno (fisico)<br />
Schema interno (fisico)<br />
Possono essere<br />
realizzate<br />
tramite VISTE<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 61<br />
Afferenza<br />
Impiegato<br />
Rossi<br />
Neri<br />
Bruni<br />
Mori<br />
Viste, esempio<br />
Direzione<br />
Reparto<br />
Reparto<br />
Vendite<br />
Acquisti<br />
Acquisti<br />
Vendite<br />
Vendite<br />
Personale<br />
Personale<br />
Direttore<br />
Leoni<br />
Falchi<br />
Leoni<br />
Supervisione<br />
Impiegato Reparto Direttore<br />
Rossi Vendite Falchi<br />
Neri Acquisti Leoni<br />
Bruni Vendite Falchi<br />
Mori Personale Leoni<br />
Relazioni base base<br />
Vista = Relazione derivata da da quelle base<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 62
Viste (relazioni derivate)<br />
• Possono esistere rappresentazioni diverse per gli stessi dati<br />
(cfr. architettura ANSI/SPARC a tre livelli)<br />
• In una base dei dati relazionale, relazioni derivate:<br />
– relazioni il cui contenuto è funzione del contenuto di<br />
altre relazioni (definito per mezzo di interrogazioni)<br />
• In contrasto, le relazioni di base hanno un contenuto<br />
autonomo<br />
• Le relazioni derivate possono essere definite su altre<br />
derivate, a patto che non esistano definizioni circolari<br />
• Viste = Relazioni derivate<br />
• Anche in SQL<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 63<br />
Viste virtuali e materializzate<br />
• Due tipi di relazioni derivate:<br />
– viste materializzate: relazioni derivate memorizzate<br />
nella base di dati;<br />
VANTAGGI: immediatamente disponibili per le<br />
interrogazioni<br />
SVANTAGGI: appesantiscono gli aggiornamenti;<br />
non sono supportate dai DBMS<br />
– relazioni virtuali (o viste): sono supportate dai DBMS;<br />
una interrogazione su una vista viene eseguita<br />
"ricalcolando" la vista<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 64
Viste, motivazioni<br />
• Schema esterno o vista d'utente:<br />
– ogni utente vede solo cio' che gli interessa e nel modo<br />
in cui gli interessa, senza essere distratto dal resto<br />
– ogni utente vede solo cio' che e' autorizzato a vedere<br />
(autorizzazioni sulle viste)<br />
• Strumento di programmazione: con le viste si puo'<br />
semplificare la scrittura di interrogazioni; molto utile per<br />
espressioni complesse e/o con sottoespressioni ripetute<br />
Invece:<br />
• L'utilizzo di viste non influisce sull'efficienza delle<br />
interrogazioni (salvo aspetti trascurabili)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 65<br />
Afferenza<br />
Impiegato<br />
Rossi<br />
Neri<br />
Bruni<br />
Mori<br />
Viste, esempio<br />
Direzione<br />
Reparto<br />
Reparto<br />
Vendite<br />
Acquisti<br />
Acquisti<br />
Vendite<br />
Vendite<br />
Personale<br />
Personale<br />
Direttore<br />
Leoni<br />
Falchi<br />
Leoni<br />
Definizione della vista Supervisione<br />
Supervisione = Afferenza Direzione<br />
Operatore di creazione di una vista. Analogo all’assegnamento<br />
σ Direttore='Leoni' (Supervisione) eseguita come σ Direttore='Leoni' (Afferenza<br />
Direzione)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 66
Viste e aggiornamenti, attenzione<br />
Afferenza<br />
Impiegato Reparto<br />
Direzione<br />
Reparto Direttore<br />
Rossi Vendite<br />
Acquisti Leoni<br />
Neri Acquisti<br />
Vendite Falchi<br />
Supervisione<br />
Impiegato Direttore<br />
Rossi Falchi<br />
Neri Leoni<br />
Vista:<br />
Supervisione =<br />
π Impiegato, Direttore (Afferenza<br />
Direzione)<br />
• Vogliamo inserire, nella vista, il fatto che Mori ha come<br />
direttore Lupi; come facciamo?<br />
• Gli aggiornamenti possibili sulle viste sono limitati<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 67<br />
Viste come strumento di programmazione,<br />
per semplificare la stesura di query<br />
Afferenza<br />
Impiegato<br />
Rossi<br />
Neri<br />
Reparto<br />
Vendite<br />
Acquisti<br />
Direzione<br />
Reparto<br />
Acquisti<br />
Vendite<br />
Direttore<br />
Leoni<br />
Falchi<br />
Vista<br />
Supervisione = (Afferenza<br />
Direzione)<br />
Trovare gli impiegati che hanno lo stesso direttore di Rossi<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 68
Trovare gli impiegati che hanno lo stesso direttore di Rossi<br />
AFFERENZA(Impiegato, Reparto)<br />
DIREZIONE(Reparto, Direttore)<br />
0 Passo<br />
Vista<br />
Supervisione = (Afferenza<br />
Direzione)<br />
I Passo<br />
Trovare il direttore di Rossi<br />
π Direttore (σ Impiegato=‘Rossi' (Afferenza<br />
Direzione))<br />
II Passo Usare I Passo nella tabella Afferenza Direzione<br />
π Impiegato (π Direttore (σ Impiegato=‘Rossi' (Afferenza Direzione)) (Afferenza Direzione))<br />
Con vista π Impiegato (π Direttore (σ Impiegato=‘Rossi‘ Supervisione) Supervisione)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 69<br />
Equivalenza di espressioni algebriche<br />
Esempio dall’aritmetica<br />
Equivalente a<br />
x + y(z + x) x + yz + yx x(1 + y) + yz<br />
Applicazione di di proprietà dell’algebra<br />
Anche nell’algebra relazionale viene studiata l’equivalenza<br />
tra espressioni<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 70
Equivalenze assolute e “in casi particolari”<br />
Esempio dall’aritmetica<br />
x + x = x. x non e` vera in generale ma in certi casi<br />
x ∈ {0,2}<br />
Esempio dall’algebra relazionale<br />
π A σ A > 0 (R) ≡ σ A > 0 π A (R) e` vera in generale (per ogni schema)<br />
π C (R S) ≡ R π C R π C S e` vera sse R ed S hanno in comune {C}<br />
Dipende dallo schema<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 71<br />
Equivalenza nell’algebra relazionale<br />
Due tipi di equivalenze<br />
Relativa: E 1 ≡ R E 2 se E 1 (r) = E 2 (r) per ogni istanza r di R<br />
Assoluta: E 1 ≡ E 2 se E 1 ≡ R E 2 per ogni R<br />
π A σ A > 0 (R) ≡ σ A > 0 π A (R) e` vera in generale (per ogni schema)<br />
π C (R S) ≡ R π C R π C S<br />
e` vera sse R ed S hanno in comune {C}<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 72
Importanza di stabilire equivalenze<br />
Esecuzione di una query in un DBMS<br />
Query SQL<br />
Trasformazione in in<br />
espressioni algebriche<br />
Ottimizzatore di di<br />
query<br />
Esecuzione<br />
della query<br />
Scelta dell’espressione<br />
di di “minor costo”<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 73<br />
Come eseguire una query<br />
STUDENTI(Nome, Cognome, Indirizzo, Matr)<br />
ESAMI(Matr, Materia, Voto, Data)<br />
Esami di Paolo Rossi<br />
1. 1. σ Nome=‘Paolo’ Nome=‘Paolo’ and and Cognome=‘Rossi’ (STUDENTI Cognome=‘Rossi’ ESAMI)<br />
2. 2. σ Nome=‘Paolo’ Nome=‘Paolo’ and andCognome=‘Rossi’ (STUDENTI) ESAMI<br />
Quale la più vantaggiosa in termini operativi?<br />
La seconda opera con tabelle più succinte<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 74
Alcune equivalenze dell’algebra relazionale<br />
• σ P and Q R ≡ σ P (σ Q R)<br />
• π A (E) ≡ π A (π A,B (E))<br />
Atomizzazione delle selezioni<br />
preparatoria<br />
Idempotenza delle proiezioni<br />
preparatoria<br />
• σ F (E 1 E 2 ) ≡ E 1 σ F (E 2 ) Pushing selections down<br />
se la condizione F fa riferimento<br />
unicamente ad attributi in E 2<br />
• σ F (E 1 E 2 ) ≡ E 1 F E 2 Selezione + Prod. cart. = theta join<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 75<br />
Anticipazione della proiezione rispetto al join<br />
Espressioni<br />
E 1 E 2<br />
Attributi<br />
X 1 X 1 ∩ X 2<br />
X 2<br />
E 2<br />
π X1 ,Y 2<br />
( E 1<br />
) ≡ E 1 π Y2 E 2<br />
Y 2<br />
Su cui viene fatto il join<br />
Non partecipano al join<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 76
Esempio di query “inefficiente”<br />
STUDENTI(Nome, Cognome, Indirizzo, Matr)<br />
ESAMI(Stud, Materia, Voto, Data)<br />
Nome e cognome degli studenti che hanno sostenuto l’esame di Fisica<br />
π Nome, Nome, Cognome (σ Cognome (σ Matr=Stud Matr=Stud and and Materia=‘Fisica’ (ESAMI Materia=‘Fisica’ STUDENTI))<br />
Operativamente inefficiente: devo calcolare il prodotto cartesiano<br />
di due “grandi” tabelle per estrarre un numero ristretto di tuple<br />
Provo a trasformarla<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 77<br />
Trasformazione in query “efficiente”<br />
STUDENTI(Nome, Cognome, Indirizzo, Matr)<br />
ESAMI(Stud, Materia, Voto, Data)<br />
π Nome, Nome, Cognome (σ Cognome (σ Matr=Stud Matr=Stud and and Materia=‘Fisica’ (ESAMI<br />
Materia=‘Fisica’ STUDENTI))<br />
1° passo) π Nome, Cognome (σ Matr=Stud ( σ Materia=‘Fisica’ (ESAMI STUDENTI)))<br />
2° passo) π Nome, Cognome (σ Matr=Stud ( σ Materia=‘Fisica’ ESAMI) STUDENTI))<br />
3° passo) π Nome, Cognome (( σ Materia=‘Fisica’ ESAMI) Matr=Stud STUDENTI)<br />
4° passo) π Nome, Cognome (π Matr ( σ Materia=‘Fisica’ ESAMI) Matr=Stud STUDENTI)<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 78
Alcune equivalenze che coinvolgono<br />
operazioni insiemistiche<br />
• σ F (E 1 ∪ E 2 ) ≡ σ F (E 1 ) ∪ σ F (E 2 )<br />
Distributività di σ su ∪<br />
• σ F (E 1 -E 2 ) ≡ σ F (E 1 ) - σ F (E 2 ) Distributività di σ su -<br />
• π X (E 1 ∪ E 2 ) ≡ π X (E 1 ) ∪ π X (E 2 )<br />
Distributività di π su ∪<br />
Attenzione!<br />
π X (R (R 11 -R 22 )) ≠ π X (R (R 11 ))--π X (R (R 22 ))<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 79<br />
Studente1<br />
Matricola Cognome<br />
304 Rossi<br />
305 Blu<br />
Studente2<br />
Matricola Cognome<br />
304 Rossi<br />
305 Verdi<br />
π X (R 1 -R 2 )<br />
Studente1 - Studente2<br />
Matricola Cognome<br />
305 Blu<br />
π X (R 1 ) - π X (R 2 )<br />
π Matricola<br />
(Studente1) π Matricola<br />
(Studente2)<br />
Matricola<br />
304<br />
305<br />
Matricola<br />
304<br />
305<br />
π Matricola (Studente1 - Studente2)<br />
π Matricola<br />
(Studente1) - π Matricola<br />
(Studente2)<br />
Matricola<br />
305<br />
≠<br />
Matricola<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 80
Alcune equivalenze che coinvolgono<br />
operazioni insiemistiche<br />
• σ Por Q R ≡ σ P (R) ∪ σ Q (R)<br />
or = ∪<br />
• σ P and Q R ≡ σ P (R) ∩ σ Q (R)<br />
and = ∩<br />
•E (E 1 ∪ E 2 ) ≡ (E E 1 ) ∪ (E E 2 ) Distributività<br />
di su ∪<br />
(c) Carlo Mereghetti <strong>Algebra</strong> <strong>Relazionale</strong> 81