Operazioni sui database • Le operazioni nel modello relazionale sono essenzialmente di due tipi: – Operazioni di modifica della base di dati (update) – Interrogazioni della base di dati per il recupero delle informazioni (query) C. Marrocco Università degli Studi di Cassino Operazioni insiemistiche • Le relazioni sono insiemi. • I risultati debbono essere relazioni. • E’ possibile applicare le operazioni sugli insiemi (unione, intersezione, differenza) a relazioni definite sugli attributi. • Si considerino due relazioni R1 e R2 definite su di uno stesso schema con gli stessi attributi (ipotesi di compatibilità) allora… C. Marrocco Università degli Studi di Cassino Operazioni insiemistiche • Si definisce unione (Union) una nuova relazione ottenuta considerando le tuple di entrambi le relazioni R1 e R2. • Si definisce intersezione (Intersection) una nuova relazione ottenuta considerando le tuple di R1 che sono anche in R2 e viceversa. • Si definisce differenza (Minus) una nuova relazione ottenuta considerando le tuple di R1 escluse quelle che appartengono anche ad R2. • Si definisce prodotto cartesiano (Cartesian Product) una nuova relazione contenente le tuple di R1 concatenate con ciascuna tupla di R2. C. Marrocco Università degli Studi di Cassino Operazioni di modifica del database • Inserimento di una tupla (Insert): permette di inserire una nuova tupla in una relazione. • Cancellazione di una tupla (Delete): elimina una tupla da una relazione. • Modifica di una tupla (Update): cambia i valori di uno o più attributi all’interno della tupla. Queste operazioni potrebbero violare i vincoli di integrità. Pertanto le operazioni di aggiornamento potrebbero “propagarsi” e causare altri aggiornamenti in modo automatico. C. Marrocco Università degli Studi di Cassino Operazioni di modifica del database Nel caso un operazione di aggiornamento di una relazione violi un vincolo di integrità, si possono intraprendere alcune azioni: • Annullare l’operazione che causa la violazione (Reject). • Eseguire l’operazione, informando l’utente della violazione. • Far partire ulteriori aggiornamenti in modo da correggere la violazione (opzione Cascade, opzione Set Null). • Eseguire una routine specificata dall’utente per correggere la violazione C. Marrocco Università degli Studi di Cassino Operazioni sulle relazioni • L’insieme principale delle operazioni per il modello relazionale è l’algebra relazionale. • Le operazioni dell’algebra consentono all’utente di specificare le interrogazioni (query) fondamentali. • Il risultato di un’interrogazione è una nuova relazione, che può essere stata formata a partire da una o più relazioni. Le operazioni dell’algebra, quindi, producono nuove relazioni, che possono essere ulteriormente manipolate usando le operazioni della stessa algebra. C. Marrocco Università degli Studi di Cassino Operazioni sulle relazioni Nelle operazioni relazionali è possibile applicare gli operatori aritmetici e logici classici: • Operatori matematici (/, *, +, -). • Operatori di confronto (>, <, = , <=, >=, <>). • Operatori logici (AND, OR, NOT). • NULL (indica un campo vuoto). C. Marrocco Università degli Studi di Cassino Operazioni sulle relazioni Le operazioni possono essere di due tipi: unarie e binarie Le principali sono: • proiezione • selezione • join Altre operazioni sono: • ridenominazione • funzioni aggregate e di raggruppamento C. Marrocco Università degli Studi di Cassino Proiezione (Project) • L’operazione di proiezione seleziona alcuni attributi (colonne) da una relazione (tabella) e scarta gli altri. • Può essere vista come una partizione verticale della relazione in due relazioni: una con gli attributi richiesti, contenente il risultato dell’operazione, e l’altra con quelli non richiesti. • Rimuove eventuali duplicati delle tuple, in modo che il risultato dell’operazione sia un’insieme di tuple, e quindi una relazione, valida. C. Marrocco Università degli Studi di Cassino Un esempio di proiezione Applicata ad una certa relazione, costruisce una nuova relazione formata da un sottoinsieme definito di attributi. impiegato rossi giordano neri franco franco barbareschi milo milo impiegato rossi giordano neri franco franco barbareschi milo C. Marrocco milo progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa “Fornire gli impiegati ed i progetti in cui sono impegnati” Proietta gli attributi impiegato e progetto Università degli Studi di Cassino Selezione (Select) • L’operazione di selezione è usata per selezionare un sottoinsieme di tuple di una relazione che soddisfano una determinata condizione. • È una sorta di filtro che trattiene solo quelle tuple che soddisfano una condizione qualificante. • Può essere vista come una partizione orizzontale della relazione in due insiemi di tuple: quelle che soddisfano la condizione vengono selezionate e quelle che non la soddisfano e vengono scartate C. Marrocco Università degli Studi di Cassino Un esempio di selezione Applicata ad una certa relazione, costruisce una nuova relazione formata dalle tuple che soddisfano una particolare condizione. impiegato rossi giordano neri franco franco barbareschi milo milo progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione impiegato progetto funzione giordano spazio-2 progettazione barbareschi spazio-2 progettazione m ilo spazio-1 progettazione C. Marrocco “Fornire gli impiegati ed i progetti in cui gli impiegati hanno funzione di progettazione” Seleziona le tuple aventi attributo funzione con valore progettazione Università degli Studi di Cassino Join • E’ la sequenza di un’operazione di prodotto cartesiano seguita da una di selezione, ed è usata molto comunemente per identificare e selezionare tuple correlate da due relazioni. • È un operatore binario che permette di correlare dati contenuti in relazioni diverse, confrontando i valori contenuti in esse. • Ci sono due tipi di join: theta-join e join naturale. C. Marrocco Università degli Studi di Cassino Theta - Join impiegato rossi giordano neri franco franco barbareschi milo milo progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione N 1 ruolo stip. produzione 1800 progettazione 1900 marketing 2000 • Applicato a due relazioni, il theta-join costruisce la relazione formata dalle tuple ottenute combinando le tuple degli operandi per cui è soddisfatta una condizione definita sui valori dei rispettivi attributi. • Le tuple i cui attributi di join sono NULL non compaiono nel risultato. Per questo l’operazione di join non conserva necessariamente tutte le informazioni presenti nelle relazioni partecipanti. C. Marrocco Università degli Studi di Cassino Un esempio di Theta-Join “Fornire l’elenco degli impiegati, i progetti su cui sono impegnati, la funzione svolta e lo stipendio percepito” Theta-join delle relazioni (impiegato, progetto, funzione) e (ruolo, stipendio) con i valori degli attributi funzione e ruolo uguali C. Marrocco impiegato rossi giordano neri franco franco barbareschi milo milo progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa impiegato rossi giordano neri franco franco barbareschi milo milo funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa ruolo stip. produzione 1800 progettazione 1900 marketing 2000 funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione ruolo produzione progettazione marketing produzione produzione progettazione progettazione produzione stip. 1800 1900 2000 1800 1800 1900 1900 1800 Università degli Studi di Cassino Equi – Join L’uso piu comune delle operazioni di join utilizza condizioni di sola uguaglianza. Questo tipo particolare di theta-join, in cui l’unico operatore di comparazione usato è =, viene chiamata equi-join. Nel risultato di un’equijoin si avranno sempre una o piu coppie di attributi con valori identici in ciascuna tupla. C. Marrocco Università degli Studi di Cassino Join Naturale (Natural Join) Poiché uno degli attributi nelle coppie con valori identici è superfluo, è stata introdotta una nuova operazione, chiamata join naturale. Applicato a due relazioni, costruisce la relazione formata dalle tuple ottenute combinando le tuple degli operandi con valori uguali sugli attributi comuni. C. Marrocco Università degli Studi di Cassino Un esempio di Join Naturale “Fornire l’elenco degli impiegati, i progetti su cui sono impegnati, la funzione svolta e lo stipendio percepito” Join naturale delle relazioni (impiegato, progetto, funzione) e (funzione, stipendio) C. Marrocco impiegato rossi giordano neri franco franco barbareschi milo milo progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione funzione stip. produzione 1800 progettazione 1900 marketing 2000 E’ possibile applicare il join naturale perché gli attributi hanno lo stesso nome. impiegato rossi giordano neri franco franco barbareschi milo milo progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione stip. ndio 1800 1900 2000 1800 1800 1900 1900 1800 Università degli Studi di Cassino Join Esterno (Outer Join) • Nel join naturale, le tuple senza corrispondenze (dangling tuple) sono eliminate dal risultato dell’operazione così come le tuple con valori NULL. Ciò può causare perdita di informazione. • Un insieme di operazioni, cosiddetto join esterno, può essere usato quando si vuole tenere nel risultato di una join tutte le tuple di una delle due relazioni oppure quelle di entrambe le relazioni, anche nel caso in cui non si abbiano corrispondenze negli attributi su cui si crea il join. C. Marrocco Università degli Studi di Cassino Join Esterno (Outer Join) • L’operazione di join esterna sinistra (Left Outer Join) mantiene tutte le tuple della prima relazione (di sinistra). Se non c’è una corrispondenza con una tupla di R2, gli attributi di R2 del risultato di join vengono riempiti con valori NULL. • Un’operazione analoga, join esterna destra (Right Outer Join), mantiene tutte le tuple della seconda relazione (di destra) R2. • Una terza operazione, join esterna totale (Full Outer Join), mantiene tutte le tuple di entrambe le relazioni. C. Marrocco Università degli Studi di Cassino Un esempio di query Avendo a disposizione gli operatori visti, è possibile trasformare una qualunque interrogazione sul database in una combinazione di operatori applicati sulle relazioni definite nel database. impiegato telefono Esempio “Trovare nomi e telefoni degli impiegati impegnati nel progetto spazio-1” progetto spazio-1 spazio-2 spazio-3 giardini spa C. Marrocco rossi giordano neri franco barbareschi milo descrizione progetto realizzazione componenti per la stazione spaziale progettazione componenti per la stazione spaziale analisi marketing realizzazione zappe per giardini 814 978 312 223 370 899 funzione produzione progettazione marketing impiegato rossi giordano neri franco franco barbareschi milo milo progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa stip. 1800 1900 2000 funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione Università degli Studi di Cassino Un esempio di query Join naturale delle relazioni (impiegato, progetto, funzione) e (impiegato, telefono) Seleziona le tuple aventi attributo progetto con valore spazio-1 Proietta gli attributi impiegato e telefono C. Marrocco impiegato rossi giordano neri franco franco barbareschi milo milo progetto spazio-1 spazio-2 spazio-3 spazio-1 giardini spa spazio-2 spazio-1 giardini spa funzione produzione progettazione marketing produzione produzione progettazione progettazione produzione telefono 814 978 312 223 223 370 899 899 impiegato progetto funzione rossi spazio-1 produzione franco spazio-1 produzione milo spazio-1 progettazione telefono 814 223 899 impiegato telefono rossi 814 franco 223 milo 899 Università degli Studi di Cassino Ridenominazione (Rename) • Quando si vogliono eseguire più operazioni di algebra relazionale una di seguito all’altra, è possibile applicare un’operazione alla volta e creare relazioni contenenti i risultati intermedi. In quest’ultimo caso occorre dare un nome alle relazioni intermedie. • In generale in un’operazione di Rename si può avere: – una relazione ridenominata con attributi ridenominati; – una relazione ridenominata che non specifica i nomi degli attributi; – una relazione con attributi ridenominati che non specifica il nome della relazione. C. Marrocco Università degli Studi di Cassino Funzioni di aggregazione • Un tipo di interrogazione che non può essere espressa in termini di algebra relazionale di base consiste nello specificare funzioni aggregate matematiche su collezioni di valori del database. • Esempi di queste funzioni prevedono il recupero di valori medi o somme complessive, oppure il numero totale delle tuple di una relazione. • Queste funzioni vengono usate in semplici interrogazioni statistiche che riassumono le informazioni provenienti dalla tuple del database. • Funzioni comuni applicate a collezioni di valori numerici sono Sum, Average, Maximum, Minimum, Count. C. Marrocco Università degli Studi di Cassino Funzioni di raggruppamento • Alcune query potrebbero richiedere di raggruppare i risultati in base a determinati valori degli attributi. • E’ possibile raggruppare le tuple di una relazione in sottoinsiemi caratterizzati da uno stesso valore di un particolare attributo (Group By). • E’ possibile specificare delle condizioni logiche che devono essere verificate sul sottoinsieme di tuple che vengono raggruppate (Having). C. Marrocco Università degli Studi di Cassino