Algebra relazionale
Accesso ai dati di un DB Aggiornamento di DB: funzione che, data istanza di DB, produce altra istanza di DB, sullo stesso schema Modifica, aggiunta, rimozione tuple Interrogazione a DB: funzione che, dato un DB, produce una relazione su un dato schema (non necessariamente uno degli schemi definiti nel DB)
Accesso ai dati di un DB Aggiornamento e interrogazione vengono effettuati usando specifici linguaggi Per esempio: algebra relazionale
Algebra relazionale Linguaggio procedurale di accesso a DB Si specificano operazioni complesse descrivendo procedimento da usare per ottenere soluzione Interrogazioni: espressioni complesse
Algebra relazionale Algebra relazionale: basata su insieme di operatori Definiti su relazioni Producono relazioni come risultati Operatori Insiemistici: unione, intersezione, differenza Specifici: ridenominazione, selezione, proiezione, join
Operatori insiemistici Relazioni: insiemi di tuple omogenee, cioè definite sugli stessi attributi Insiemi: ha senso usare operatori insiemistici Insiemi di tuple omogenee: usare operatori insiemistici solo su relazioni definite sugli stessi attributi Altrimenti, si ottengono insiemi di tuple disomogenee, che non rappresentano relazioni
Unione di relazioni Date due relazioni r1(X) e r2(X) definite sullo stesso insieme di attributi X r1 r2: relazione su X che contiene tuple appartenenti a r1 oppure a r2 oppure a entrambe
Unione di relazioni MatricolaCognomeEtà 9297Neri Neri Verdi38 MatricolaCognomeEtà 7274Rossi Neri Verdi38 MatricolaCognomeEtà 7274Rossi Neri Neri Verdi38 Laureati Dirigenti Laureati Dirigenti
Differenza di relazioni Date due relazioni r1(X) e r2(X) definite sullo stesso insieme di attributi X r1-r2: relazione su X che contiene tuple appartenenti a r1 ma non a r2
Differenza di relazioni MatricolaCognomeEtà 9297Neri Neri Verdi38 MatricolaCognomeEtà 7274Rossi Neri Verdi38 MatricolaCognomeEtà 7274Rossi37 Laureati Dirigenti Laureati - Dirigenti
Intersezione di relazioni Date due relazioni r1(X) e r2(X) definite sullo stesso insieme di attributi X r1 r2: relazione su X che contiene tuple appartenenti sia a r1 che a r2
Intersezione di relazioni MatricolaCognomeEtà 9297Neri Neri Verdi38 MatricolaCognomeEtà 7274Rossi Neri Verdi38 MatricolaCognomeEtà 7432Neri Verdi38 Laureati Dirigenti Laureati Dirigenti
Operatori di manipolazione di relazioni Specifici dell’algebra relazionale (non derivano dalle teoria degli insiemi) Permettono di manipolare relazioni per creare nuove relazione Ridenominazione Selezione Proiezione Join
Operatori di manipolazione di relazioni Specifici dell’algebra relazionale (non derivano dalle teoria degli insiemi) Permettono di manipolare relazioni per creare nuove relazione Ridenominazione Selezione Proiezione Join
Ridenominazione di relazioni Cambia il nome di un attributo di relazione lasciandone inalterata l’istanza (modifica solo intestazione di relazione) Utile per applicare operatori insiemistici a relazioni con attributi di nome diverso
Ridenominazione di relazioni Per esempio: PadreFiglio AdamoCaino AdamoAbele AbramoIsacco AbramoIsmaele MadreFiglio EvaCaino EvaSet SaraIsacco AgarIsmaele Paternità Maternità Paternità Maternità ?
Ridenominazione di relazioni Una ridenominazione: PadreFiglio AdamoCaino AdamoAbele AbramoIsacco AbramoIsmaele GenitoreFiglio AdamoCaino AdamoAbele AbramoIsacco AbramoIsmaele Paternità Genitore Padre (Paternità)
Ridenominazione di relazioni Una ridenominazione: PadreFiglio AdamoCaino AdamoAbele AbramoIsacco AbramoIsmaele GenitoreFiglio AdamoCaino AdamoAbele AbramoIsacco AbramoIsmaele Paternità Genitore Padre (Paternità)
Ridenominazione di relazioni Una ridenominazione: PadreFiglio AdamoCaino AdamoAbele AbramoIsacco AbramoIsmaele GenitoreFiglio AdamoCaino AdamoAbele AbramoIsacco AbramoIsmaele Paternità Genitore Padre (Paternità)
Ridenominazione di relazioni Un’altra ridenominazione: MadreFiglio EvaCaino EvaSet SaraIsacco AgarIsmaele GenitoreFiglio EvaCaino EvaSet SaraIsacco AgarIsmaele Maternità Genitore Madre (Maternità)
Ridenominazione di relazioni GenitoreFiglio AdamoCaino AdamoAbele AbramoIsacco AbramoIsmaele EvaCaino EvaSet SaraIsacco AgarIsmaele Genitore Padre (Paternità) Genitore Madre (Maternità) Corretta applicazione di unione relazioni
Ridenominazione di relazioni CognomeAgenziaStipendio RossiRoma45 NeriMilano53 Imp
Ridenominazione di relazioni CognomeAgenziaStipendio RossiRoma45 NeriMilano53 CognomeFabbricaSalario VerdiLatina33 BruniMonza32 ImpOp
Ridenominazione di relazioni CognomeSedeRetribuzione RossiRoma45 NeriMilano53 VerdiLatina33 BruniMonza32 CognomeAgenziaStipendio RossiRoma45 NeriMilano53 CognomeFabbricaSalario VerdiLatina33 BruniMonza32 ImpOp Sede,Retribuzione Agenzia,Stipendio (Imp) Sede,Retribuzione Fabbrica,Salario (Op)
Ridenominazione di relazioni Sia r(X) è la schema di una relazione r definita su insieme X={A1,…,Ak} … e sia Y un insieme di attributi Y={B1,…,Bk} La ridenominazione B1,..,Bk A1,…,Ak (r) contiene una tupla t’ per ogni tupla t in r, così definita: t’ è una tupla su Y, e t’[Bi]=t[Ai] per 1 i k
Ridenominazione di relazioni Di solito, si indicano nelle ridenominazione solo attributi ridenominati (quelli per cui Ai Bi) Genitore Padre (Paternità): omesso Figlio
Operatori di manipolazione di relazioni Specifici dell’algebra relazionale (non derivano dalle teoria degli insiemi) Permettono di manipolare relazioni per creare nuove relazione Ridenominazione Selezione Proiezione Join
Selezione Data relazione r su insieme di attributi X, selezione F (r) produce relazione su attributi X che contiene tuple di r che soddisfano la condizione di selezione F A B C Selezione secondo F F (r) A B C
Selezione F formula proposizionale: condizione di selezione formata da Operatori booleani: (AND), (OR), (NOT)
Selezione F formula proposizionale: condizione di selezione formata da Operatori booleani Condizione atomiche: termine che possono contenere Confronti fra attributi (per esempio, Stipendio>Tasse, dove Stipendio e Tasse sono attributi) Confronti fra attributi e constanti (per esempio, Età 60, dove Età è un attributo)
Selezione CognomeNomeEtàStipendio RossiMario ,00 NeriLuca ,00 VerdiNico ,00 RossiMarco ,00 Impiegati CognomeNomeEtàStipendio VerdiNico ,00 Età>30 Stipendio>2.000,00 (Impiegati)
Selezione CognomeNomeEtàStipendio RossiMario ,00 NeriLuca ,00 VerdiNico ,00 RossiMarco ,00 Impiegati CognomeNomeEtàStipendio VerdiNico ,00 Età>30 Stipendio>2.000,00 (Impiegati)
Operatori di manipolazione di relazioni Specifici dell’algebra relazionale (non derivano dalle teoria degli insiemi) Permettono di manipolare relazioni per creare nuove relazione Ridenominazione Selezione Proiezione Join
Proiezione Data relazione r su insieme di attributi X e un sottoinsieme Y di X, la proiezione Y (r) è l’insieme di tuple su Y ottenute dalle tuple di r considerando solo i valori su Y Y (r) = {t[Y] | t r} A B C Proiezione su Y Y (r) A B
Proiezione Per esempio: Impiegati(Cognome,Nome,Reparto,Capo) Cognome,Nome (Impiegati) ha attributi Cognome, Nome Relazioni non devono contenere tuple ripetute Tuple uguali collassano in una sola
Proiezione CognomeNomeRepartoCapo RossiMarioVenditeDe Rossi NeriLucaVenditeDe Rossi VerdiNicoPersonaleBaldi RossiMarcoPersonaleBaldi RepartoCapo VenditeDe Rossi PersonaleBaldi Impiegati Reparto,Capo (Impiegati)
Tuple di una proiezione Una proiezione Y (r) contiene al più tante tuple quante r Se Y è una superchiave di r, allora Y (r) contiene tante tuple quante r
Operatori di manipolazione di relazioni Specifici dell’algebra relazionale (non derivano dalle teoria degli insiemi) Permettono di manipolare relazioni per creare nuove relazione Ridenominazione Selezione Proiezione Join
Operatore che permette di correlare dati contenuti in relazioni diverse confrontando i valori delle tuple (modello relazionale basato su valori) Join Naturale Theta-Join
Join Naturale Permette di correlare dati contenuti in relazioni diverse confrontando attributi con stesso nome Produce una relazione definita su unione di insiemi di attributi delle due relazioni su cui opera Tuple del risultato: ottenute combinando le tuple dei due operandi con valore uguale su attributi comuni
Join Naturale Date r1(X) e r2(Y), r1 r2 è relazione su X Y: r1 r2={t su X Y | t[X] r1 e t[Y] r2}
Join Naturale ImpiegatoReparto RossiVendite NeriProduzione BianchiProduzione RepartoCapo ProduzioneMori VenditeDe Rossi Rel1Rel2 Rel1(Impiegato,Reparto)Rel2(Reparto,Capo) X Y
Join Naturale ImpiegatoRepartoCapo RossiVenditeDe Rossi NeriProduzioneMori BianchiProduzioneMori ImpiegatoReparto RossiVendite NeriProduzione BianchiProduzione RepartoCapo ProduzioneMori VenditeDe Rossi Rel1Rel2 Rel1 Rel2
Join Naturale ImpiegatoRepartoCapo RossiVenditeDe Rossi NeriProduzioneMori BianchiProduzioneMori ImpiegatoReparto RossiVendite NeriProduzione BianchiProduzione RepartoCapo ProduzioneMori VenditeDe Rossi Rel1Rel2 Rel1 Rel2
Join Naturale Se relazioni da combinare definite su stesso insieme di attributi, r1(X), r2(X) … r1 r2 = r1 r2 Cioè il join coincide con intersezione: combina tuple con stessi valori di attributi su r1 e r2
Join Naturale RepartoCapo VenditeDe Rossi ProduzioneMori RepartoCapo AcquistiBaldi ProduzioneMori VenditeDe Rossi RepartoCapo ContabilitàTilli ProduzioneMori VenditeDe Rossi Rel1Rel2 Rel1 Rel2
Join Naturale RepartoCapo VenditeDe Rossi ProduzioneMori RepartoCapo AcquistiBaldi ProduzioneMori VenditeRossi RepartoCapo ContabilitàTilli ProduzioneMori VenditeDe Rossi Rel1Rel2 Rel1 Rel2
Join Naturale Se relazioni da combinare definite su insiemi di attributi disgiunti, r1(X), r2(Y) con X Y= … condizione di corrispondenza tra tuple è sempre vera … r1 r2=r1xr2 (prodotto cartesiano) Combina tutte le tuple di r1 con tutte quelle di r2
Join Naturale RepartoCapoImpiegatoProgetto AcquistiBaldiMoriP123 AcquistiBaldi P124 ProduzioneMori P123 ProduzioneMoriBianchiP124 RepartoCapo AcquistiBaldi ProduzioneMori ImpiegatoProgetto MoriP123 BaldiR124 Rel1Rel2 Rel1 Rel2
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) Spesso imposto vincolo di integrità referenziale tra attributi di join (per evitare che r1 faccia riferimento a valori inesistenti in r2)
Join Naturale ProvNumeroProprietarioIndirizzo RM2F7643Verdi Pierov. Tigli RM1A2396Verdi Pierov. Tigli RM4E5432Bini Lucav. Aceri MI2F7643Luci Ginov. Aceri Auto CodiceDataAgenteArtProvNumero /10/ RM4E /10/ RM4E /10/ RM2F /10/ MI2F /10/ MI2F7643 Infrazioni
Join Naturale ProvNumeroProprietarioIndirizzo RM2F7643Verdi Pierov. Tigli RM1A2396Verdi Pierov. Tigli RM4E5432Bini Lucav. Aceri MI2F7643Luci Ginov. Aceri Auto CodiceDataAgenteArtProvNumero /10/ RM4E /10/ RM4E /10/ RM2F /10/ MI2F /10/ MI2F7643 Infrazioni
Join Naturale CodiceDataAgenteArtProvNumeroProprietarioIndirizzo /10/ RM4E5432Bini Lucav. Aceri /10/ RM4E5432Bini Lucav. Aceri /10/ RM2F7643Verdi Pierov. Tigli /10/ MI2F7643Luci Ginov. Aceri /10/ MI2F7643Luci Ginov. Aceri 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), r1 r2 è completo se e solo se, per ogni tupla t1 di r1 esiste tupla t in r1 r2 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 r1 r2 è completo: max(|r1|,|r2|) |r1 r2| |r1|x|r2|
Join completi ImpiegatoProgettoCapo RossiP124Mori NeriP124Mori BianchiP124Mori RossiP124Bruni NeriP124Bruni BianchiP124Bruni ImpiegatoProgetto RossiP124 NeriP124 BianchiP124 ProgettoCapo P124Mori P124Bruni Rel1Rel2 Rel1 Rel2 Un esempio di join con |r1|x|r2| tuple
Join incompleti Join incompleti hanno tuple senza corrispondenza, dette dangling tuples ImpiegatoReparto RossiVendite NeriProduzione BianchiProduzione RepartoCapo ProduzioneMori AcquistiBruni Rel1Rel2 ImpiegatoRepartoCapo BianchiProduzioneMori NeriProduzioneMori Rel1 Rel2
Join incompleti Caso limite: se non ci sono tuple combinabili, risultato del join è relazione vuota (senza tuple)
Cardinalità di join Date r1(X) e r2(Y): 0 |r1 r2| |r1|x|r2| Se r1 r2 completo: |r1 r2| max(|r1|,|r2|) Ogni tuple di r1 combinata con almeno 1 tupla di r2 e viceversa
Cardinalità di join Se X Y contiene chiave per r2 |r1 r2| |r1| Ogni tuple di r1 combinata con al più 1 tupla di r2
Cardinalità di join Se X Y contiene chiave per r2 e c’è vincolo di integrità referenziale fra X Y in r1 e la chiave di r2 |r1 r2| = |r1| Ogni tuple di r1 combinata esattamente con 1 tupla di r2