Corso di Basi di Dati L’Algebra Relazionale Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/ Algebra Relazionale L’algebra relazionale è un linguaggio (procedurale) di interrogazione per basi di dati relazionali. Altri linguaggi DML di interrogazione: SQL2/SQL3 (standard de facto, già visto ..) Calcolo relazionale (linguaggio dichiarativo) Datalog (basato su Prolog) Algebra Relazionale All’interno di un DBMS, le query SQL sono controllate ed eseguite da un interprete SQL. L’interprete spesso traduce l’SQL in un altro linguaggio procedurale (~algebra relazionale) per motivi di: Facilità d’esecuzione è possibile scomporre query complesse in una sequenza di procedure da eseguire. Ottimizzazione è possibile riscrivere (automaticamente) le query procedurali in modo da consumare meno memoria o tempo di esecuzione. Algebra Relazionale Il linguaggio dell’algebra relazionale è costituito da una serie di operatori (algebrici) che: si applicano ad una relazione (definizione di relazione nel modello relazionale). producono in output una relazione. sono componibili, ossia è possibile utilizzarli in cascata per creare interrogazioni complesse. Gli operatori possono essere unari o binari. Algebra Relazionale Interrogazione SQL Generata dall’utente/ applicazione Traduttore SQL Linguaggio Procedurale Interrogazione linguaggio procedurale Ottimizzatore di query Interrogazione ottimizzata Esecuzione DB INTERPRETE SQL DEL DBMS Algebra Relazionale Il linguaggio dell’algebra relazionale è costituito da una serie di operatori (algebrici): Operatori su insiemi: unione, intersezione, differenza. Operatori su attributi: ridenominazione, selezione, proiezioni. Operatori intra-relazionali: join naturale, thetajoin, equi-join, etc. Algebra Relazionale Le relazioni sono insiemi è possibile definire operatori insiemistici su di esse: Unione di r1(X) ed r2(X): r = r1 Èr2 = {t | t Î r1 OR t Î r2 } Intersezione di r1(X) ed r2(X): r = r1 Èr2 ={t |t Î r1 AND t Î r2 } Differenza di r1(X) ed r2(X): r = r1 -r2 ={t |t Î r1 AND t Ï r2 } Le relazioni r1 ed r2 devono avere lo stesso schema! Algebra Relazionale CALCIATORI ALLENATORI Nome Cognome Nascita Nome Cognome Nascita Giuseppe Rossi 10/03/19769 Giovanni Bianchi 10/06/1980 Roberto Bianchi 14/06/1982 Roberto Bianchi 14/06/1982 Michele Verdi 17/08/1983 Michele Verdi 17/08/1983 CALCIATORI ÈALLENATORI CALCIATORI ÇALLENATORI Nome Cognome Nascita Giuseppe Rossi 10/03/19769 Roberto Bianchi 14/06/1982 Michele Verdi 17/08/1983 Giovanni Bianchi 10/06/1980 Nome Cognome Nascita Roberto Bianchi 14/06/1982 Michele Verdi 17/08/1983 Algebra Relazionale CALCIATORI ALLENATORI Nome Cognome Nascita Nome Cognome Data Giuseppe Rossi 10/03/19769 Giovanni Bianchi 10/06/1980 Roberto Bianchi 14/06/1982 Roberto Bianchi 14/06/1982 Michele Verdi 17/08/1983 Michele Verdi 17/08/1983 CALCIATORI ÈALLENATORI Nome Cognome CALCIATORI ÇALLENATORI ??? Nome Cognome ??? Q. Cosa accade se le relazioni non hanno esattamente lo stesso schema, ma dispongono di attributi con nomi diversi? Algebra Relazionale L’operatore di ridenominazione r consente di modificare i nomi degli attributi di una relazione. rB1,B2, … BM A1, A2, .. AM (r) SEMANTICA: Modifica lo schema della relazione, ridenominando gli attributi A1, A2, …AM in B1, B2, BM senza alterare i dati della relazione. B1 B2 … BM A1 A2 … AM Algebra Relazionale CALCIATORI ALLENATORI Nome Cognome Nascita Nome Cognome Data Giuseppe Rossi 10/03/19769 Giovanni Bianchi 10/06/1980 Roberto Bianchi 14/06/1982 Roberto Bianchi 14/06/1982 Michele Verdi 17/08/1983 Michele Verdi 17/08/1983 CALCIATORI È rNASCITA<-DATA (ALLENATORI) Nome Cognome Nascita Giuseppe Rossi 10/03/19769 Roberto Bianchi 14/06/1982 Michele Verdi 17/08/1983 Giovanni Bianchi 10/06/1980 CALCIATORI Ç rNASCITA<-DATA (ALLENATORI) Nome Cognome Nascita Roberto Bianchi 14/06/1982 Michele Verdi 17/08/1983 Algebra Relazionale L’operatore di selezione sF(r) consente di selezionare un sottoinsieme delle tuple della relazione r, in base alla condizione specificata da F. Relazione r A1 … … A2 … Relazione r’ A5M sF(r) A1 A2 … A5M … … … Insieme delle righe di r che soddisfano la condizione F Algebra Relazionale L’operatore di selezione sF(r) consente di selezionare un sottoinsieme delle tuple della relazione r, in base alla condizione specificata da F. s F (r) = {t | t Î r AND F(t) = TRUE} La condizione F è definita come insieme di predicati connessi da operatori logici. F= P1 Op P2 Op … PN Op e’ un operatore booleano (AND, OR, NOT) Algebra Relazionale La condizione F e’ definita come insieme di predicati connessi da operatori logici. F= P1 Op P2 Op … PN Ogni predicato è del tipo AqB oppure Aqc, dove: q e’ un operatore di confronto (<,>,=,<>,<=,>=). A e B sono attributi di r, su cui ha senso l’operatore contiene una valore compatibile con il dominio di A. Algebra Relazionale CALCIATORI Nome Cognome Nascita Anni Societa’ Giuseppe Rossi 10/03/19769 32 Dinamo Roberto Bianchini 14/06/1982 33 Polisportiva Michele Verdi 17/08/1983 27 Polisportiva Giovanni Bianchi 10/06/1980 29 Dinamo s (ANNI>30)Ù(SOCIETA=DINAMO) (CALCIATORI) Nome Cognome Nascita Anni Societa’ Giuseppe Rossi 10/03/19769 32 Dinamo Algebra Relazionale CALCIATORI Nome Cognome Nascita Anni Societa’ Giuseppe Rossi 10/03/19769 32 Dinamo Roberto Bianchini 14/06/1982 33 Polisportiva Michele Verdi 17/08/1983 27 Polisportiva Giovanni Bianchi 10/06/1980 29 Dinamo s (NOME="GIUSEPPE")Ú(COGNOME="BIANCHI") (CALCIATORI) Nome Cognome Nascita Anni Societa’ Giuseppe Rossi 10/03/19769 32 Dinamo Giovanni Bianchi 10/06/1980 29 Dinamo Algebra Relazionale CALCIATORI Nome Cognome Nascita Anni Societa’ Giuseppe Rossi 10/03/19769 32 Dinamo Roberto Bianchini 14/06/1982 NULL Polisportiva Michele Verdi 17/08/1983 27 NULL Giovanni Bianchi 10/06/1980 29 Dinamo s (ANNI>30)Ù(SOCIETA=DINAMO) (CALCIATORI) Q. Cosa accade in presenza di valori nulli? Algebra Relazionale A. Come in SQL, si utilizza una logica a 3 valori: True (T), False (F), Unknown (U). NOT AND T F U OR T F U T F T T F U T T T T F T F F F F F T F U U U U U F U U T U U Si utilizzano gli operatori IS NULL e IS NOT NULL per verificare se un certo attributo ha valore uguale a NULL o meno. Algebra Relazionale CALCIATORI Nome Cognome Nascita Anni Societa’ Giuseppe Rossi 10/03/19769 NULL Dinamo Roberto Bianchi 14/06/1982 33 Polisportiva Michele Verdi 17/08/1983 27 Polisportiva Giovanni Bianchi 10/06/1980 35 NULL s (ANNI>30)Ù(SOCIETA=DINAMO) (CALCIATORI) Nome Cognome Nascita Anni Societa’ Algebra Relazionale CALCIATORI Nome Cognome Nascita Anni Societa’ Giuseppe Rossi 10/03/19769 NULL Dinamo Roberto Bianchi 14/06/1982 33 Polisportiva Michele Verdi 17/08/1983 27 Polisportiva Giovanni Bianchi 10/06/1980 35 NULL s (ANNI>30)Ù((SOCIETA=DINAMO)Ú(SOCIETA IS (CALCIATORI) NULL )) Nome Cognome Nascita Anni Societa’ Giovanni Bianchi 10/06/1980 35 NULL Algebra Relazionale L’operatore di proiezione pY(r) consente di selezionare un sottoinsieme degli attributi di r. p Y (r) = {t[Y]| t Î r} Y=(A1,A5) A1 … … … A2 A3 … p Y (r) A5 A1 … … A5 Algebra Relazionale L’operatore di proiezione pY(r) consente di selezionare un sottoinsieme degli attributi di r. Qual è la cardinalità di pY(r)? Nel caso generale, |pY(r)| <= |r| Se Y è superchiave di R, allora |pY(r)|= |r| Q. Vale anche il viceversa? (Se |pY(r)|= |r| allora Y è una superchiave di R?) Algebra Relazionale CALCIATORI Nome Cognome Nascita Anni Societa’ Giuseppe Rossi 10/03/19769 32 Dinamo Roberto Bianchi 14/06/1982 33 Polisportiva Michele Verdi 17/08/1983 27 Polisportiva Giovanni Bianchi 10/06/1980 27 Dinamo p (NOME,COGOME) (CALCIATORI) Nome Cognome Giuseppe Rossi Roberto Bianchi Michele Verdi Giovanni Bianchi p (ANNO) (CALCIATORI) Anni 32 33 27 Algebra Relazionale E’ possibile scrivere espressioni componendo gli operatori algebrici … complesse PRESIDENTI CALCIATORI Nome Cognome Squadra Nome Cognome Squadra Giuseppe Rossi Dinamo Luciano Rossi Dinamo Roberto Bianchi Dinamo Michele Rosati Polisportiva Michele Verdi Polisportiva s SQUADRA=DINAMO (CALCIATORI ÈPRESIDENTI) Nome Cognome Squadra Luciano Rossi Dinamo Giuseppe Rossi Dinamo Roberto Bianchi Dinamo Algebra Relazionale E’ possibile scrivere espressioni componendo gli operatori algebrici … complesse PRESIDENTI CALCIATORI Nome Cognome Squadra Nome Cognome Squadra Giuseppe Rossi Dinamo Luciano Rossi Dinamo Roberto Bianchi Dinamo Michele Rosati Polisportiva Michele Verdi Polisportiva Cognome PCOGNOME (s SQUADRA=DINAMO (CALCIATORI ÈPRESIDENTI)) Rossi Bianchi Algebra Relazionale L’operatore di join naturale consente di correlare dati tra relazioni diverse, sulla base di valori comuni in attributi comuni. CALCIATORI Nome Cognome Squadra SQUADRE Giuseppe Rossi Dinamo Squadra Punti Roberto Bianchi Dinamo Dinamo 12 Michele Verdi Polisportiva Polisportiva 14 CALCIATORI SQUADRE Nome Cognome Squadra Punti Giuseppe Rossi Dinamo 12 Roberto Bianchi Dinamo 12 Michele Verdi Polisportiva 14 Algebra Relazionale L’operatore di join naturale consente di correlare dati tra relazioni diverse, sulla base di valori comuni in attributi comuni. Data una relazione r1 su attributi X1, ed una relazione r2 su attributi X2: r1 r2 = {t su X1X2 | t[X1 ] Î r1 Ùt[X2 ] Î r2 } La cardinalita’ del join e’ compresa tra 0 e |r1|*|r2|. Algebra Relazionale Se le due relazioni r1 ed r2 hanno lo stesso schema la cardinalità del join è pari a quella dell’interserzione tra r1 ed r2 . IMPIEGATI Codice Nome Ufficio 123 Rossi A 345 Bianchi A 167 Verdi B IMPIEGATI RESPONABILI _UFFICIO Codice Nome Ufficio 123 Rossi A RESPONSABILI_UFFICIO Codice Nome Ufficio 123 Rossi A 345 Michele C CASO SPECIALE 1 Algebra Relazionale Sia X l’attributo in comune tra X1 ed X2. Se X contiene una chiave di r2 il join ha cardinalità massima pari alla cardinalità di r1 (|r1|). SEDI IMPIEGATI Codice Nome Sede 123 Rossi Bologna 345 Bianchi Milano 167 Verdi Milano IMPIEGATI CASO SPECIALE 2 SEDI Sede Mansione Bologna Sviluppo Milano Testing Id Nome Sede Mansione 123 Rossi Bologna Sviluppo 345 Bianchi Milano Testing 167 Verdi Milano Testing Algebra Relazionale Sia X l’attributo in comune tra X1 ed X2. Se esiste un vincolo di integrità referenziale tra l’attributo X in r1 e la relazione r2 il join ha cardinalità pari alla cardinalità di r1 (|r1|). CASO SPECIALE 3 REPARTI PAZIENTI CodiceRep NrLetti Primario Id Nome CodiceRep A3 20 Alberti 123 Rossi A3 B1 10 Gigli 345 Bianchi A3 167 Verdi B1 Id Nome Codice Rep NrLetti Primario 123 Rossi A3 20 Alberti 345 Bianchi A3 20 Alberti 167 Verdi B1 10 Gigli PAZIENTI REPARTI Algebra Relazionale Se le due relazioni r1 ed r2 non hanno attributi in comune la cardinalita’ del join è pari a quella del prodotto cartesiano tra r1 ed r2 (|r1| *|r2|). IMPIEGATI Id Nome Ufficio 123 Rossi A 345 Bianchi A 167 Verdi B UFFICI Codice Telefono A 20-21-216 C 20-21-218 CASO SPECIALE 4 IMPIEGATI UFFICI Id Nome Ufficio Codice Telefono 123 Rossi A A 20-21216 123 Rossi A C 20-21218 345 Bianchi A A 20-21216 345 Bianchi A C 20-21218 167 Verdi B A 20-21216 Algebra Relazionale Il join naturale dispone di alcune proprietà algebriche interessanti: Il join è commutativo: r1 Il join è associativo: Nel caso di join n-ari: Q. Dimostrazione? (r1 r1 r2 = r2 r1 r2 ) r3 = r1 .. rn = (r2 n 1 i r r3 ) Algebra Relazionale E’ possibile stabilire una corrispondenza tra query SQL ed espressioni in algebra relazionale… Schema generale (tralasciando le ridenominazioni) SELECT A1, A2, … An FROM T1, T2, … Tm WHERE Condizione PA1A2 ..An (s Condizione (T1 T2 ... Tm )) Algebra Relazionale Dato il seguente schema: IMPIEGATI(Codice, Nome, Cognome, Livello) STIPENDI (LivelloQualifica, Retribuzione) determinare la retribuzione degli impiegati che si chiamano “Mario”. SELECT RETRIBUZIONE FROM IMPIEGATI, STIPENDI WHERE ((NOME=“MARIO”) AND (LIVELLO=LIVELLOQUALIFICA)) PRETRIBUZIONE (s NOME="MARIO"ÙLIVELLO=LIVELLOQUALIFICA (IMPIEGATI STIPENDI)) Algebra Relazionale Dato il seguente schema: IMPIEGATI(Codice, Nome, Cognome, Livello) STIPENDI (LivelloQualifica, Retribuzione) determinare la retribuzione MEDIA degli impiegati che si chiamano “Mario”. SELECT AVG(RETRIBUZIONE) FROM IMPIEGATI, STIPENDI WHERE ((NOME=“MARIO”) AND (LIVELLO=LIVELLOQUALIFICA)) In algebra relazionale? Non si può esprimere … Algebra Relazionale Il theta-join è un operatore derivato, espresso come un join naturale seguito da un operatore di selezione. Theta-join: r1 r = s F (r1 F 2 r2 ) F è una condizione utilizzabile in una selezione. r1 ed r2 devono avere schemi diversi, ossia non devono avere attributi in comune. Algebra Relazionale Un esempio di theta-join con condizione di selezione (NrPosti>150). VOLI AEREI Codice Partenza Arrivo Modello NrPosti Smoking AZ123 Roma Parigi B747 250 NO AF345 Milano Boston MD80 120 NO AF167 Parigi Londra VOLI NRPOSTI>150 Ù CODICE=MODELLO AEREI Codice Partenza Arrivo Modello NrPosti Smoking AZ123 Roma Parigi B747 250 NO AF345 Milano Boston B747 250 NO AF167 Parigi Londra B747 250 NO Algebra Relazionale L’ equi-join è un theta-join, in cui la condizione di selezione è una congiunzione di atomi di uguaglianza. Equi-join: r1 r = s F (r1 F 2 F è una congiunzione di atomi. r2 ) F = C1 ÙC2 Ù...Cn Ogni atomo è un’uguaglianza, tra due attributi (A,B) oppure tra un attributo ed una costante (d) nel suo dominio. C = (A = d)Ú(A = B) Algebra Relazionale Esempio di equi-join … VOLI AEREI Codice Partenza Arrivo Modello AZ123 Roma Parigi B747 AF345 Milano Boston MD80 AF167 Parigi Londra B737 VOLI MODELLO=CODICE Codice NrPosti Smoking B747 250 NO MD80 120 NO AEREI Codice Partenza Arrivo Modello NrPosti Smoking AZ123 Roma Parigi B747 250 NO AF345 Milano Boston MD80 120 NO Algebra Relazionale Il join naturale di tue relazioni r1 ed r2 può essere espresso mediante gli operatori di selezione, equijoin e ridenominazione. Es. date 2 relazioni: r1(ABC), r2(BCD) Step1: Ridenominazione Step2: Equi-join Step3: Proiezione r1 PABCD (r1 rB'C'<-B,C (r2 ) B=B'ÙC=C' rB'C'<-B,C (r2 ) B=B'ÙC=C' rB'C'<-B,C (r2 )) Algebra Relazionale Come in SQL, è possibile definire delle viste, sotto forma di interrogazioni dell’algebra relazionale cui si assegna un nome. Le viste possono essere usate in altre interrogazioni, per semplificarne la scrittura. Esempio di vista con nome IMPIEGATI IMPIEGATI = s SEDE=BOLOGNA (IMPIEGATI SEDI) Algebra Relazionale L’algebra relazionale consente interrogazioni equivalenti tra loro. di creare L’equivalenza puo’ essere: Dipendente dallo schema E1 ºR E2 Se E1=E2 per ogni istanza r dello schema R Assoluta (per ogni schema) E1 º E2 se E1 ºR E2 per ogni schema R Algebra Relazionale Esempio di uguaglianza dipendente dallo schema! PAB (R1 ) PAC (R2 ) ºR PABC (R1 R2 ) Es. L’uguaglianza funziona sullo schema seguente: R1=VOLI(Codice, AeroportoArrivo, OraArrivo, OraPartenza, Vettore) R2=AEREI(Vettore, NumPasseggeri) … Ma che accade se le due relazioni coinvolte hanno altri attributi in comune oltre a quelli che compaiono in A? Algebra Relazionale STUDENTI ANAGRAFICA Matricola Nome Cognome CdL Nome Cognome CF Data 01212 Marco Rossi Fisica Michele Rossi MR233G 03/01/1990 02121 Michele Bianchi Informatica Michele Marchi MM768H 06/11/1992 43242 Giovanna Verdi Chimica Giovanna Verdi GV1111J 05/11/1993 56776 Daniele Rosati Fisica Giovanna Bianchini GB3133J 23/06/1988 PNOME,CdL (STUDENTI) ¹ PNOME,DATA (ANAGRAFICA) Nome CdL Data Michele Informatica 03/01/1990 Michele Informatica 06/11/1992 Giovanna Chimica 05/11/1993 Giovanna Fisica 23/06/1988 PNOME,CdL,DATA (STUDENTI ANAGRAFICA) Nome CdL Data Giovanna Chimica 05/11/1993 Algebra Relazionale Uguaglianze a livello di schema … Atomizzazione delle selezioni: s F1ÙF2 (E) = s F1 (s F2 (E)) Idempotenza delle proiezioni: PX (E) = PX (PXY (E)) Selezione anticipata: s F (E1 E2 ) = E1 (F fa riferimento solo ad attributi di E2) Inglobamento di una selezione: s F (E1 s F (E2 ) E2 ) = E1 F E2 Algebra Relazionale Uguaglianze a livello di schema (continua)… Commutatività della selezione: s F (PY (E)) = PY (s F (E)) (F deve riferirsi solo ad attributi in Y) Commutatività del join: E1 E2 = E2 E1 Associtatività del join: (E1 E2 ) E3 = E1 (E2 E3 ) Algebra Relazionale Uguaglianze a livello di schema (continua) … Proiezione anticipata: PX1Y 2 (E1 E2 ) = E1 (E1 ed E2 definite su X1 ed X2. Y2 deve l’intersezione di X1 ed X2.) PY 2 (E2 ) contenere Proprieta’ distributive della selezione e proiezione: s F (AÈB) = s F (A)Ès F (B) s F (A- B) = s F (A)- s F (B) PF (AÈB) = PF AÈPF (B) Algebra Relazionale Q. Come si dimostra se un’uguaglianza a livello di schema è valida? Verificare l’opposto è facile Basta trovare un esempio (schema/istanza) su cui l’uguaglianza non vale! PA (E1 F E2 ) = PA (E1 ) F PA (E2 ) Se non ci sono assunzioni sulla struttura di E1, E2, ed A, l’uguaglianza sopra è FALSA CONTROESEMPIO: E1=IMPIEGATI(Codice, Stipendio, Sede) E2=SEDI(Citta, Mansione) A=Stipendio F: (Sede=Citta) Algebra Relazionale Q. Come si dimostra se un’uguaglianza a livello di schema è valida? Es. Dimostrare che: s F1ÙF2 (E) = s F1 (s F2 (E)) SCHEMA DI DIMOSTRAZIONE 1) Occorre dimostrare che: se t Î s F1 (s F2 (E)) Þ 2) Occorre dimostrare che: t Î s F1ÙF 2 (E) se t Î s F1ÙF2 (E) Þ t Î s F1 (s F 2 (E)) Algebra Relazionale Esempio di ottimizzazione di query Dato il seguenti schema: VOLI(Codice, CittaPartenza, CittaArrivo, Vettore) AEREI(Modello, NrPosti, Smoking) Q. Determinare i modelli degli aerei in partenza da Milano con meno di 100 passeggeri. PMODELLO (s MODELLO=VETTOREÙCITTAPART=MILANOÙNRPOSTI<100 (VOLI AEREI)) Algebra Relazionale Esempio di ottimizzazione di query 1. Atomizzazione delle selezioni. PMODELLO (s MODELLO=VETTORE (s CITTAPART=MILANO (s NRPOSTI<100 (VOLI AEREI)))) 2. Anticipazione della selezione rispetto al join PMODELLO (s MODELLO=VETTORE ((s CITTAPART=MILANO (VOLI) (s NRPOSTI<150 AEREI)))) 3. Inglobamento della selezione nel join PMODELLO ((s CITTAPART=MILANO (VOLI) MODELLO=VETTORE (s NRPOSTI<150 AEREI))) Algebra Relazionale Esempio di ottimizzazione di query 4. Anticipazione della proiezione. PMODELLO (((PMODELLO (s CITTAPART=MILANO (VOLI))) º MODELLO=VETTORE (PVETTORE (s NRPOSTI<150 AEREI))))) PMODELLO (s MODELLO=VETTOREÙCITTAPART=MILANOÙNRPOSTI<100 (VOLI AEREI)) Q. E’ possibile ottimizzare ulteriormente l’interrogazione?