Algebra relazionale (II)
description
Transcript of Algebra relazionale (II)
Algebra relazionale (II)
Join Naturale
Numero attributi di r1r2 somma numeri attributi di r1 e r2Spesso 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
Prov
Numero
Proprietario
Indirizzo
RM 2F7643 Verdi Piero v. Tigli
RM 1A2396 Verdi Piero v. Tigli
RM 4E5432 Bini Luca v. Aceri
MI 2F7643 Luci Gino v. Aceri
Auto
Codice
Data Agente
Art
Prov
Numero
143256
25/10/03
567 44 RM 4E5432
987554
26/10/03
456 34 RM 4E5432
987557
26/10/03
456 34 RM 2F7643
630876
15/10/03
456 53 MI 2F7643
539856
12/10/03
567 44 MI 2F7643
Infrazioni
Join Naturale
Prov
Numero
Proprietario
Indirizzo
RM 2F7643 Verdi Piero v. Tigli
RM 1A2396 Verdi Piero v. Tigli
RM 4E5432 Bini Luca v. Aceri
MI 2F7643 Luci Gino v. Aceri
Auto
Codice
Data Agente
Art
Prov
Numero
143256
25/10/03
567 44 RM 4E5432
987554
26/10/03
456 34 RM 4E5432
987557
26/10/03
456 34 RM 2F7643
630876
15/10/03
456 53 MI 2F7643
539856
12/10/03
567 44 MI 2F7643
Infrazioni
Join Naturale
Codice
Data Agente
Art
Prov
Numero
Proprietario
Indirizzo
143256
25/10/03
567 44 RM 4E5432 Bini Luca v. Aceri
987554
26/10/03
456 34 RM 4E5432 Bini Luca v. Aceri
987557
26/10/03
456 34 RM 2F7643 Verdi Piero v. Tigli
630876
15/10/03
456 53 MI 2F7643 Luci Gino v. Aceri
539856
12/10/03
567 44 MI 2F7643 Luci Gino v. Aceri
Infrazioni Auto
•Tra Infrazioni e Auto esiste vincolo integrità referenziale•{Prov,Numero} è chiave di Auto•Quindi, ogni tupla di Infrazioni è combinata esattamente conuna 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
Impiegato
Progetto
Capo
Rossi P124 Mori
Neri P124 Mori
Bianchi P124 Mori
Rossi P124 Bruni
Neri P124 Bruni
Bianchi P124 Bruni
Impiegato
Progetto
Rossi P124
Neri P124
Bianchi P124
Progetto
Capo
P124 Mori
P124 Bruni
Rel1 Rel2
Rel1 Rel2
Un esempio di join con |r1|x|r2| tuple
Join incompleti
Join incompleti hanno tuple senza corrispondenza, dette dangling tuples
Impiegato
Reparto
Rossi Vendite
Neri Produzione
Bianchi Produzione
Reparto Capo
Produzione
Mori
Acquisti Bruni
Rel1 Rel2
Impiegato
Reparto Capo
Neri Produzione
Mori
Bianchi Produzione
Mori
Rel1 Rel2
Join incompleti
Caso limite: se non ci sono tuple combinabili, risultato del join è relazione vuota (senza tuple)
Impiegato
Reparto
Rossi Vendite
Neri Produzione
Bianchi Produzione
Reparto Capo
Acquisti Mori
Acquisti Bruni
Rel1 Rel2
Impiegato
Reparto CapoRel1 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 contropartiNon 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
Impiegato
Reparto
Rossi Vendite
Neri Produzione
Bianchi Produzione
Reparto Capo
Produzione
Mori
Acquisti Bruni
Rel1 Rel2
Impiegato
Reparto Capo
Rossi Vendite NULL
Neri Produzione
Mori
Bianchi Produzione
Mori
Rel1 LEFT Rel2
Join esterni
Impiegato
Reparto
Rossi Vendite
Neri Produzione
Bianchi Produzione
Reparto Capo
Produzione
Mori
Acquisti Bruni
Rel1 Rel2
Impiegato
Reparto Capo
Neri Produzione
Mori
Bianchi Produzione
Mori
NULL Acquisti Bruni
Rel1 RIGHT Rel2
Join esterni
Impiegato
Reparto
Rossi Vendite
Neri Produzione
Bianchi Produzione
Reparto Capo
Produzione
Mori
Acquisti Bruni
Rel1 Rel2
Impiegato
Reparto Capo
Rossi Vendite NULL
Neri Produzione
Mori
Bianchi Produzione
Mori
NULL Acquisti Bruni
Rel1 FULL Rel2
Theta-Join
Serve per fare Join su relazioni senza attributi omonimiOperatore 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
Impiegato
Reparto
Rossi Vendite
Neri Produzione
Bianchi Produzione
Divisione
Capo
Vendite Bruni
Produzione
Mori
Acquisti Baldi
Rel1 Rel2
Impiegato
Reparto Divisione Capo
Rossi Vendite Vendite Bruni
Neri Produzione
Produzione
Mori
Bianchi Produzione
Produzione
Mori
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 selezioneSe 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)))
Join naturale Equi-join
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 R1Equi-join tra R1 e R2 per selezionare tuple in corrispondenzaProiezione del risultato per eliminare attributi ridondanti
Esercitazione
Che cos’è StudentiLavoratori?
Matricola Cognome
Nome
123456 Bruni Andrea
654321 Neri Dario
456123 Reale Carla
Matricola Cognome
Nome
321654 Bianco Giovanni
654321 Neri Dario
456123 Reale Carla
Studenti
Lavoratori
Esercitazione
Che cos’è StudentiLavoratori?
Matricola Cognome
Nome
123456 Bruni Andrea
654321 Neri Dario
456123 Reale Carla
Matricola Cognome
Nome
321654 Bianco Giovanni
654321 Neri Dario
456123 Reale Carla
Studenti
Lavoratori
Esercitazione
Che cos’è Studenti - Lavoratori?
Matricola Cognome
Nome
123456 Bruni Andrea
654321 Neri Dario
456123 Reale Carla
Matricola Cognome
Nome
321654 Bianco Giovanni
654321 Neri Dario
456123 Reale Carla
Studenti
Lavoratori
Esercitazione
Che cos’è NumeroMatricola(Studenti)?
Matricola Cognome
Nome
123456 Bruni Andrea
654321 Neri Dario
456123 Reale Carla
Studenti
Esercitazione
Che cos’è Voto>25(Studenti)?
Cognome
Nome Età
Voto
Bruni Dario 21 29
Neri Dario 23 29
Reale Carla 20 22
Studenti
Esercitazione
Che cos’è Voto>25 Eta<23(Studenti)?
Cognome
Nome Età
Voto
Bruni Dario 21 29
Neri Dario 23 29
Reale Carla 20 22
Studenti
Esercitazione
Che cos’è Voto>25 Eta<23(Studenti)?
Cognome
Nome Età
Voto
Bruni Dario 21 29
Neri Dario 23 29
Reale Carla 20 22
Studenti
Esercitazione
Che cos’è Cognome,Nome(Studenti)?
Cognome
Nome Età
Voto
Bruni Dario 21 29
Neri Dario 23 29
Reale Carla 20 22
Studenti
Esercitazione
Che cos’è Nome,Voto(Studenti)?
Cognome
Nome Età
Voto
Bruni Dario 21 29
Neri Dario 23 29
Reale Carla 20 22
Studenti
Esercitazione
Che cos’è Cognome,Nome,Età,Voto(Studenti)?
Cognome
Nome Età
Voto
Bruni Dario 21 29
Neri Dario 23 29
Reale Carla 20 22
Studenti
Esercitazione
Che cos’è Studenti Esami (join naturale)?
Matricola
Cognome
Nome
123456 Bruni Dario
654321 Neri Dario
456123 Reale Carla
Studenti
Matricola
Corso Voto
123456 Psicologia 23
123456 Informatica
29
654321 Psicologia 29
456123 Psicologia 22
Esami
Esercitazione
Che cos’è Studenti Esami (join naturale)?
Matricola
Cognome
Nome
123456 Bruni Dario
654321 Neri Dario
456123 Reale Carla
Studenti
Numero Corso Voto
123456 Psicologia 23
123456 Informatica
29
654321 Psicologia 29
456123 Psicologia 22
Esami
Esercitazione
Che cos’è Studenti Esami (join naturale)?
Matricola
Cognome
Nome
123456 Bruni Dario
654321 Neri Dario
456123 Reale Carla
Studenti
Matricola
Corso Voto
654123 Psicologia 23
789456 Informatica
29
901234 Psicologia 29
876987 Psicologia 22
Esami
Esercitazione
Che cos’è Studenti Lavoratori (join naturale)?
Matricola Cognome
Nome
123456 Bruni Andrea
654321 Neri Dario
456123 Reale Carla
Matricola Cognome
Nome
321654 Bianco Giovanni
654321 Neri Dario
456123 Reale Carla
Studenti
Lavoratori
Esercitazione
Studenti Esami è un join completo?
Matricola
Cognome
Nome
123456 Bruni Dario
654321 Neri Dario
456123 Reale Carla
Studenti
Matricola
Corso Voto
123456 Psicologia 23
123456 Informatica
29
654321 Psicologia 29
456123 Psicologia 22
Esami
Esercitazione
Che cos’è Studenti LEFT Esami?
Matricola
Cognome
Nome
123456 Bruni Dario
654321 Neri Dario
456123 Reale Carla
Studenti
Matricola
Corso Voto
987654 Psicologia 23
987654 Informatica
29
654321 Psicologia 29
456123 Psicologia 22
Esami
Esercitazione
Che cos’è Studenti FULL Esami?
Matricola
Cognome
Nome
123456 Bruni Dario
654321 Neri Dario
456123 Reale Carla
Studenti
Matricola
Corso Voto
987654 Psicologia 23
987654 Informatica
29
654321 Psicologia 29
456123 Psicologia 22
Esami