Linguaggi per Basi di Dati - 1 Università degli Studi di Trieste Corso di Laurea in Informatica D. Gubiani marzo 2008 Distinguiamo due classi di linguaggi per basi di dati : - linguaggi di definizione, o definition data language (DDL), utilizzati per definire gli schemi logici e le autorizzazioni per l accesso - linguaggi di manipolazione dei dati, o data manipulation language (DML), utilizzati per l interrogazione e l aggiornamento delle istanze di basi di dati D. Gubiani 1 D. Gubiani 2 Linguaggi per Basi di Dati - 2 Inoltre, distinguiamo tra - linguaggi dichiarativi, che specificano unicamente le proprietà del risultato (SQL, QBE) - linguaggi procedurali, che specificano le modalità di generazione del risultato (algebra relazionale) È un linguaggio di interrogazione dei dati di tipo procedurale basato su concetti di tipo algebrico L algebra relazionale mette a disposizione un insieme di operatori che agiscono su relazioni producendo relazioni (proprietà di chiusura dell algebra relazionale, che garantisce la composizionalità degli operatori) Dato uno schema di base di dati R, un interrogazione può essere vista come una funzione che, per ogni istanza r R, produce una relazione su un dato insieme di attributi D. Gubiani 3 D. Gubiani 4 Operatori Binarie (o insiemistiche): unione, intersezione (operazione derivata), differenza, prodotto cartesiano Unarie: selezione, proiezione, rinomina Derivate: join (join naturale, theta-join) Le relazioni sono insiemi: l algebra relazionale mette a disposizione gli operatori insiemistici (binari) di base (unione, differenza prodotto cartesiano e intersezione) Ogni operatore riceve in input due relazioni e restituisce in output una relazione (eventualmente vuota) È possibile applicare le operazioni di unione, intersezione e differenza solo a relazioni definite sugli stessi attributi È possibile applicare l operazione di prodotto cartesiano solo a relazioni definite su attributi diversi D. Gubiani 5 D. Gubiani 6
Unione Intersezione r 1 r 2 = {t t r 1 t r 2 }. Unione laureati e quadri r 1 r 2 = {t t r 1 t r 2 }. Determinare i laureati che sono anche quadri D. Gubiani 7 D. Gubiani 8 Differenza Prodotto Cartesiano - 1 r 1 r 2 = {t t r 1 t r 2 }. Determinare i laureati che non sono quadri Operazione insiemistica Prende in ingresso due relazioni e restituisce in uscita una relazione che contiene tutte le possibili combinazioni di tuple Intersezione: A B = A - (A - B) D. Gubiani 9 D. Gubiani 10 Prodotto Cartesiano - 2 Prodotto Cartesiano - 3 Cardinalità del risultato del prodotto cartesiano: card(risultato) = card(tabella1) card(tabella2) Possono sorgere conflitti fra i nomi: in tali casi occorre la rinomina degli attributi D. Gubiani 11 D. Gubiani 12
Selezione - 1 Sono operatori che prendono in input una relazione (e restituiscono in output una relazione) Due operatori più uno: - selezione - proiezione - rinomina Prende in ingresso una relazione e seleziona il sottoinsieme delle istanze che soddisfano una data condizione Sintassi: σ condizione (r) CONDIZIONI ELEMENTARI: nome attributo operatore confronto nome attributo nome attributo operatore confronto valore costante CONDIZIONI COMPLESSE: si ottengono dalle condizioni elementari utilizzando i connettivi logici D. Gubiani 13 D. Gubiani 14 Selezione - 2 Selezione - 3. Selezionare tutti gli impiegati che afferiscono al dipartimento 4 σ DNO=4 (Impiegato) Grado del risultato della selezione: grado(risultato) = grado(operando) Cardinalità del risultato della selezione: card(risultato) card(operando) Indice di selettività della operazione: indice di selettività = card(risultato) card(operando) D. Gubiani 15 D. Gubiani 16 Proiezione - 1 Proiezione - 2. Determinare matricola, cognome e stipendio di ogni impiegato Prende in ingresso una relazione e restituisce la porzione di tale relazione relativa al sottoinsieme di attributi specificati in input Sintassi: π <listaattributi> (r) π Matricola,Cognome,Stipendio (Impiegato) D. Gubiani 17 D. Gubiani 18
Proiezione - 3 Selezione e Proiezione Grado del risultato della proiezione: grado(risultato) grado(operando) - il caso = non è, però, significativo Selezione e proiezione - sono operazioni complementari (ortogonali) - possono essere eseguite in sequenza. π Matricola,Cognome (σ Stipendio>50 (Impiegati)) Cardinalità del risultato della proiezione: card(risultato) card(operando) D. Gubiani 19 D. Gubiani 20 Osservazione Rinomina Può essere utile assegnare un nome alle relazioni intermedie. (vedi testo in precedenza) - r 1 σ Stipendio>50 (Impiegato) - r 2 π Matricola,Cognome (r 1 ) È spesso utile (alle volte necessario) rinominare gli attributi Sintassi: ρ B1...B n A 1...A n (r). r 2 ρ Matr50 Cognome50 Matricola Cognome (π Matricola,Cognome (r 1 )) D. Gubiani 21 D. Gubiani 22 Operatori derivati Join Componendo le operazioni di base, si possono ottenere nuove operazioni (operazioni derivate): - Join - Divisione - Semi-join L operatore di join permette di collegare dati contenuti in relazioni diverse, confrontando i loro valori Esistono due tipi fondamentali di join: - θ-join - Natural-Join D. Gubiani 23 D. Gubiani 24
θ-join - 1 θ-join - 2 L operazione di θ-join: combinazione fra prodotto cartesiano e selezione σ cond (r X s) = r cond s dove ogni condizione elementare in cond coinvolge un attributo di R ed un attributo di S D. Gubiani 25 D. Gubiani 26 θ-join ed Equi-Join Natural-Join Sintassi: r condizione join s Assumendo che r R(A 1...A n ) e s S(B 1...B m ), la condizione di join condizione join ha la forma: condizione join cond 1 and...and cond k dove cond i = attr. di R op. confronto attr. di S ; Se cond 1...cond k sono tutte condizioni di uguaglianza, il join è detto Equi-Join Versione dell operazione di Join in cui si confrontano tutti e soli gli attributi con lo stesso nome Sintassi: R S o, equivalentemente, R S D. Gubiani 27 D. Gubiani 28 Osservazioni Semi-Join In genere, nella condizione di join non viene utilizzato il connettivo OR che può essere sostituito dall operazione UNION L operazione di natural-join è ovviamente possibile solo nel caso in cui gli attributi abbiano un nome La relazione vuota è una relazione L operazione di θ-join senza condizioni e l operazione di Natural-Join senza attributi con lo stesso nome degenerano entrambe nel prodotto cartesiano Proiezione del risultato di un Natural-Join sugli attributi di una relazione Sintassi: R S π R (R S) R S π S (R S). Determinare tutti gli impiegati che lavorano ad almeno un progetto r IMPIEGATI LAVORAINPROGETTO con r R(Matricola,Cognome,DNum,Salario) D. Gubiani 29 D. Gubiani 30
Divisione - 1 Divisione - 2. Determinare il cognome degli impiegati che lavorano a tutti i progetti cui lavora Rossi Soluzione 1: ROSSI σ cognome=rossi (IMPIEGATI) R PROG ROSSI LAVORAINPROGETTO R P π progetto (R PROG) IMP LAVORAINPROGETTO R P R π cognome (IMP IMPIEGATI) D. Gubiani 31 D. Gubiani 32 Divisione - 3 Soluzione 2: CANDIDATI π matricola (IMPIEGATI) CONDIZIONI CANDIDATI R P NO GOOD CONDIZIONI LAVORAINPROGETTO CANDIDATI CATTIVI π matricola (NO GOOD) R MATR CANDIDATI CANDIDATI CATTIVI R π cognome (R MATR IMPIEGATI) Esiste una serie di operazioni addizionali che non possono essere ricavate dalle operazioni di base: - Funzioni aggregate - Join esterno - Unione esterna D. Gubiani 33 D. Gubiani 34 Funzioni Aggregate - 1 Funzioni Aggregate - 2 Operano su un insieme di dati e restituiscono come risultato un dato aggregato (una relazione contenente un solo valore) Sintassi: F OPERATORE Attributo (r). Determinare il numero di impiegati dell azienda, il loro stipendio medio, lo stipendio massimo e l ammontare complessivo degli stipendi D. Gubiani 35 D. Gubiani 36
Funzioni Aggregate - 3 Join Esterno - 1 Si possono usare anche più funzioni aggregate: F SUM salario, AVERAGE salario (IMPIEGATI) Il nome dell attributo del risultato è la combinazione operatore attributo (è possibile la rinomina) Esiste la possibilità di eseguire preliminarmente una partizione delle tuple in modo che la funzione venga eseguita separatamente sugli elementi di ciascuna classe -. Determinare il numero di impiegati per ogni dipartimento R1 DNO F COUNT matricola (IMPIEGATI) Consente di gestire dei casi non coperti dal Join tradizionale Esistono tre tipi di Join esterno: - Destro - Sinistro - Completo D. Gubiani 37 D. Gubiani 38 Join Esterno - 2 Unione Esterna. Determinare il cognome dei dipendenti con eventualmente i progetti a cui lavorano R π Cognome,Progetto (IMPIEGATI left join LAVORAINPROGETTO). Determinare l unione delle relazioni Facoltà(Nome,SSN,Dipartimento,Rank) Studenti(Name,SSN,Dipartimento,Advisor) R FacoltàUnione Esterna Studenti dove R(Nome,SSN,Dipartimento,Rank,Advisor) Realizza l unione fra relazioni non compatibili rispetto all unione Gli attributi non comuni assumono il valore NULL nelle tuple per le quali non hanno un valore D. Gubiani 39 D. Gubiani 40 Equivalenza Dipendente dallo Schema L algebra relazionale permette di formulare espressioni fra loro equivalenti Diversi tipi di equivalenza: - equivalenza dipendente dallo schema - equivalenza assoluta E 1 R E 2 se E 1 (r) = E 2 (r) per ogni r R. π A,B (R 1 ) π A,C (R 2 ) R π A,B,C (R 1 R 2 ) Se e solo se R 1 ed R 2 hanno in comune il solo attributo A D. Gubiani 41 D. Gubiani 42
Equivalenza Assoluta (Non Dipendente dallo Schema) Ottimizzazione Algebriche - 1 E 1 E 2 se E 1 R E 2 per ogni R. Per qualsiasi schema R, è facile vedere che π A,B (σ A>0 (R)) σ A>0 (π A,B (R)) L ottimizzazione algebrica ha lo scopo di trovare un espressione che sia equivalente all espressione data e possa essere eseguita in modo più efficiente D. Gubiani 43 D. Gubiani 44 Ottimizzazione Algebriche - 2 Infatti, in fase di esecuzione delle interrogazioni (specificate in SQL) vengono tradotte in algebra relazionale e viene valutato il costo - il costo dell esecuzione di un interrogazione può essere valutato in termini delle dimensioni dei risultati intermedi In presenza di alternative equivalenti viene scelta l espressione con costo minore Le trasformazioni di equivalenza sono operazioni che sostituiscono un espressione con un altra a essa equivalente - interessanti se riducono il costo Alcune trasformazioni: - atomizzazione delle selezioni - idempotenza delle proiezioni - anticipazione della selezione rispetto al join - anticipazione della proiezione rispetto al join D. Gubiani 45 D. Gubiani 46 Atomizzazione delle Selezioni Idempotenza delle Proiezioni Una congiunzione di selezioni può essere sostituita da una sequenza di selezioni atomiche σ F1 F 2 (E) σ F1 (σ F1 (E)) Successive applicazioni permettono di operare su condizioni atomiche Una proiezione può essere trasformata in una sequenza di proiezioni che eliminano i vari attributi in varie fasi π X (E) π X (π X,Y (E)) Nota. E è un espressione definita su un insieme di attributi che contiene X e Y. Nota. E è una qualsiasi espressione. D. Gubiani 47 D. Gubiani 48
Anticipazione della Selezione Rispetto al Join Anticipazione della Proiezione Rispetto al Join Anticipazione della selezione rispetto al join (pushing selections down) σ F (E 1 E 2 ) E 1 σ F (E 2 ) Anticipazione della proiezione rispetto al join (pushing projections down) π X1,Y 2 (E 1 E 2 ) E1 π Y2 (E 2 ) Nota. Con E1 è definita su X1, E2 è definita su X2, Y2 X2 e (X1 X2) Y2 (gli attributi di X2 Y2 non sono coinvolti nel join). Nota. Se la condizione F coinvolge solo attributi della sottoespressione E2. Combinata con l idempotenza delle proiezioni, permette di eliminare subito da ciascuna relazione gli attributi che non compaiono nel risultato e non sono coinvolti nel join D. Gubiani 49 D. Gubiani 50 Altre - 1 Altre - 2 Inglobamento di una selezione in un prodotto cartesiano σ F (E 1 E 2 ) E 1 F E 2 Distributività della selezione rispetto all unione σ F (E 1 E 2 ) σ F (E 1 ) σ F (E 2 ) Distributività della selezione rispetto alla differenza σ F (E 1 E 2 ) σ F (E 1 ) σ F (E 2 ) Distributività della proiezione rispetto all unione π X (E 1 E 2 ) π X (E 1 ) π X (E 2 ) Trasformazioni basate sulla corrispondenza tra operatori insiemistici e selezioni complesse: σ F1 F 2 (R) σ F1 (R) σ F2 (R) σ F1 F 2 (R) σ F1 (R) σ F2 (R) σ F1 (R) σ F2 (R) σ F1 (F 2)(R) σ F1 (R) σ F2 (R) Proprietà distributiva del join rispetto all unione E (E 1 E 2 ) (E E 1 ) (E E 2 ) Osservazione. La proiezione non è distributiva rispetto alla differenza. D. Gubiani 51 D. Gubiani 52-1 - 2. Dato lo schema {DIPARTIMENTO(dNumero, dnome, manager), IMPIEGATO(matricola, nome, cognome, dip, stipendio)}, trovare i nomi dei dipartimenti il cui manager guadagna più di 80000 euro. Soluzione non ottimizzata: π dnome (σ matricola=manager stipendio>80000 (IMPIEGATO DIPARTIMENTO)) Si può riscrivere come: π dnome (σ matricola=manager (σ stipendio>80000 (IMPIEGATO DIPARTIMENTO))) D. Gubiani 53 D. Gubiani 54
- 3 Si può riscrivere come: π dnome (σ stipendio>80000 (IMPIEGATO) matricola=manager DIPARTIMENTO) Si può riscrivere come: π dnome (π matricola (σ stipendio>80000 (IMPIEGATO)) matricola=manager DIPARTIMENTO) D. Gubiani 55