440 likes | 617 Views
Algebra relazionale (II). Join Naturale. Numero attributi di r1 r2 somma numeri attributi di r1 e r2 Spesso join fatto su chiave di relazione Per esempio: Infrazioni( Codice ,Data,Agent,Art, Prov , Numero ) Auto( Prov , Numero ,Proprietario,Indirizzo)
E N D
Join Naturale • Numero attributi di r1r2 somma numeri attributi di r1 e r2 • Spesso join fatto su chiave di relazione • Per esempio: Infrazioni(Codice,Data,Agent,Art,Prov,Numero) Auto(Prov,Numero,Proprietario,Indirizzo) • Spesso imposto vincolo di integrità referenziale tra attributi di join (per evitare che r1 faccia riferimento a valori inesistenti in r2)
Join Naturale Infrazioni Auto
Join Naturale Infrazioni Auto
Join Naturale Infrazioni Auto • Tra Infrazioni e Auto esiste vincolo integrità referenziale • {Prov,Numero} è chiave di Auto • Quindi, ogni tupla di Infrazioni è combinata esattamente con • una tupla di Auto
Join completi • Date r1(X) e r2(Y), r1r2 è completo se e solo se, per ogni tupla t1 di r1 esiste tupla t in r1r2 tale che t[X]=t1 e analogamente per r2
Join completi • Cardinalità di un insieme: il numero di elementi che appartengono al insieme • Cardinalità di A: scritto |A| • Per esempio: |{a,b,d}|=3, ||=0
Join completi • Cardinalità di join: • Se r1r2 è completo: max(|r1|,|r2|) |r1r2| |r1|x|r2|
Join completi Rel1 Rel2 Rel1 Rel2 Un esempio di join con |r1|x|r2| tuple
Join incompleti • Join incompleti hanno tuple senza corrispondenza, dette dangling tuples Rel1 Rel2 Rel1 Rel2
Join incompleti • Caso limite: se non ci sono tuple combinabili, risultato del join è relazione vuota (senza tuple) Rel1 Rel2 Rel1 Rel2
Cardinalità di join • Date r1(X) e r2(Y): 0 |r1r2| |r1|x|r2| • Se r1 r2 completo: |r1r2| max(|r1|,|r2|) Ogni tuple di r1 combinata con almeno 1 tupla di r2 e viceversa
Cardinalità di join • Se XY contiene chiave per r2 |r1r2| |r1| Ogni tuple di r1 combinata con al più 1 tupla di r2
Cardinalità di join • Se XY contiene chiave per r2 e c’è vincolo di integrità referenziale fra XY in r1 e la chiave di r2 |r1r2| = |r1| Ogni tuple di r1 combinata esattamente con 1 tupla di r2
Join esterni • Per combinare sempre le tuple di due relazioni, anche quando non ci sono corrispondenze tra i valori degli attributi comuni, inserendo valori NULL in assenza di controparti • Non tralasciano tuple di operandi nel risultato
Join esterni • Join esterno sinistro: estende solo le tuple del primo operando • Aggiunge tuple di r1 senza corrispettivo in r2 • Join esterno destro:estende solo le tuple del secondo operando • Aggiunge tuple di r2 senza corrispettivo in r1 • Join esterno completo: estende tuple di entrambi gli operandi • Bilaterale
Join esterni Rel1 Rel2 Rel1 LEFT Rel2
Join esterni Rel1 Rel2 Rel1 RIGHT Rel2
Join esterni Rel1 Rel2 Rel1 FULL Rel2
Theta-Join • Serve per fare Join su relazioni senza attributi omonimi • Operatore derivato: si ottiene come prodotto cartesiano seguito da selezione di tuple che verificano condizione di uguaglianza tra valori di attributi r1 F r2 = F(r1 r2)
Theta-Join Rel1 Rel2 Reparto=Divisione(Rel1 Rel2)
Theta-Join ed Equi-Join • Theta-Join: r1 F r2 = F(r1 r2) • Condizione di selezione F è formula proposizionale come descritto per operatore di selezione • Se F è congiunzione di uguaglianze tra attributi di r1 e attributi di r2: theta-join detto equi-join
Theta-Join ed Equi-Join • Per esempio: • Rel1(Impiegato,Reparto), Rel2(Divisione,Capo) Reparto=Divisione(Rel1 Rel2) • Infrazioni(Codice,Data,Ag,Art,Prov,Num), Auto(Provincia,Targa,Prop,Indirizzo) Prov=Provincia Num=Targa(Infrazioni Auto)
Theta-Join ed Equi-Join • Theta-join e equi-join più utili di join naturale • Permettono di operare su relazioni senza attributi in comune • Join naturale simulabile mediante ridenominazione, equi-join e proiezione
Theta-Join ed Equi-Join • Per esempio: R1(A,B,C), R2(B,C,D) R1R2 = A,B,C,D(R1B=B’C=C’(B’,C’B,C(R2)))
Theta-Join ed Equi-Join • Per esempio: R1(A,B,C), R2(B,C,D) R1R2 = A,B,C,D(R1B=B’C=C’(B’,C’B,C(R2))) Equi-join Join naturale
Theta-Join ed Equi-Join • Per esempio: R1(A,B,C), R2(B,C,D) R1R2 = A,B,C,D(R1B=B’C=C’(B’,C’B,C(R2))) • Si ridenomina R2 affinchè abbia attributi diversi da quelli di R1 • Equi-join tra R1 e R2 per selezionare tuple in corrispondenza • Proiezione del risultato per eliminare attributi ridondanti
Esercitazione • Che cos’è StudentiLavoratori? Studenti Lavoratori
Esercitazione • Che cos’è StudentiLavoratori? Studenti Lavoratori
Esercitazione • Che cos’è Studenti - Lavoratori? Studenti Lavoratori
Esercitazione • Che cos’è NumeroMatricola(Studenti)? Studenti
Esercitazione • Che cos’è Voto>25(Studenti)? Studenti
Esercitazione • Che cos’è Voto>25 Eta<23(Studenti)? Studenti
Esercitazione • Che cos’è Voto>25 Eta<23(Studenti)? Studenti
Esercitazione • Che cos’è Cognome,Nome(Studenti)? Studenti
Esercitazione • Che cos’è Nome,Voto(Studenti)? Studenti
Esercitazione • Che cos’è Cognome,Nome,Età,Voto(Studenti)? Studenti
Esercitazione • Che cos’è Studenti Esami (join naturale)? Studenti Esami
Esercitazione • Che cos’è Studenti Esami (join naturale)? Studenti Esami
Esercitazione • Che cos’è Studenti Esami (join naturale)? Studenti Esami
Esercitazione • Che cos’è Studenti Lavoratori (join naturale)? Studenti Lavoratori
Esercitazione • Studenti Esami è un join completo? Studenti Esami
Esercitazione • Che cos’è Studenti LEFT Esami? Studenti Esami
Esercitazione • Che cos’è Studenti FULL Esami? Studenti Esami