Abbiamo definito il database come un insieme di relazioni e vincoli. Per relazioni si intende la tabella relazionale, ossia un insieme di tuple con la caratteristica che le righe e le colonne sono disordinate. Le colonne convenzionalmente sono ordinate ma non sempre per questo vengono chiamate per nome (o attributo) e non per numero. L’algebra relazionale è molto importante, in quanto oltre a fornire un fondamento formale per le operazioni del modello relazionale, è usata come base per implementare e ottimizzare le interrogazioni nei sistemi di gestione di basi di dati relazionali (RDBMS). Un’espressione di calcolo relazionale crea una nuova relazione che è specificata in termini di variabili che assumono valori sulle righe delle relazioni memorizzate nella base di dati e/o sulle colonne delle relazioni memorizzate. Introduciamo una serie di operatori relazionali, ovvero gli strumenti che permettono di associare dati ad altri dati. Operatore Select Operatore unario è usato per selezionare ed estrarre dal database un sottoinsieme di tuple di una relazione (R) che soddisfano una condizione di selezione. Esempio P σ<età≥14>(Persona) Quindi se applichiamo l’operatore alla tabella Persona verranno estratte solo le tuple che verifica la condizione età ≥ 14 Persona Nome Età P Nome Età Antonio 10 Franco 15 Franco 15 Giorgio 20 Giorgio 20 Il risultato di questa operazione viene posto nella relazione P ovvero una tabella fittizia con gli stessi attributi della relazione principale che contiene solo le righe che soddisfano la condizione di selezione. Operatore π<col1,col2…>(Relazione) quest’operatore si chiama Project estrae determinate colonne dalla tabella Relazione Es. Persona Nome Età Sesso Antonio 10 M Franco 15 M Giorgio 20 null Anna 10 F P π<età,sesso>(Persona) P Età 10 15 20 10 Sesso M M null F In quest’esempio vengono copiati i dati relativi ad Antonio ed Anna perché il campo sesso è diverso OPERATORE RENAME: ρ<b1, b2,...., bk> (R) La sua sintassi e’: P ρ<b1, b2,…., bk> (R). Si applica ad una relazione R per cambiare il nome degli attributi e crea una nuova relazione. Può essere usato quando a causa di una Project cambia il valore semantico degli attributi. Ad esempio in una relazione “Impiegato dirige Dipartimento”, dove “Impiegato” e “Dipartimento” sono tipi di entità, “dirige” è il tipo di relazione, Nome_impiegato è un attributo del tipo di entità “Impiegato”, possiamo utilizzare l'operatore rename sull'attributo “Nome_impiegato” cambiandolo in “Nome_direttore”. Tutti gli operatori visti finora sono detti operatori unari, essi sono tranquillamente usabili in tutti i linguaggi visti in precedenza. Per introdurre gli altri tipi di operatori (quelli insiemistici), saremo costretti a definire le operazioni quali Unioni, Intersezioni, Prodotti cartesiani e differenze insiemistiche. OPERATORI INSIEMISTICI: operano su due relazioni alla volta ponendo il risultato in una terza relazione. UNIONE R PUQ INTERSEZIONE R P∩Q DIFFERENZA R P―Q PRODOTTO CARTESIANO R PxQ Particolare attenzione riveste il prodotto cartesiano, che prese due tabelle in input ne crea una terza (R) formata da tutte le coppie possibili delle due tabelle. OPERATORE JOIN: serve a combinare due relazioni aventi uno o più attributi in comune, generando una nuova relazione che contiene le righe della prima e della seconda tabella secondo i valori uguali dell'attributo comune. La sua sintassi: A <condizione di join> B -> R cioè vengono copiate in R tutte le colonne di A e B, ma colo le righe che verificano la condizione di join. Inoltre l'operatore Join presenta alcune varianti: Se la condizione di join è data dalla condizione di uguaglianza tra due attributi allora l'operazione viene anche chiamata di EQUIJOIN; Se la condizione di join è data da altra natura, allora viene anche chiamata ѲJOIN (Thetajoin); Se la condizione di join è un'uguaglianza tra attributi che hanno lo stesso nome, allora viene anche chiamata NATURAL JOIN. Quest’ultimo punto è rappresentabile anche con (A*B); LEFTJOIN: prende tutte le tuple della prima relazione e solo quelle che hanno l’attributo in comune della seconda relazione; RIGHTJOIN: prende tutte le tuple della seconda relazione e solo quelle che hanno l’attributo in comune della prima relazione; FULL OUTER JOIN: prende tutte le tuple sia della prima che della seconda relazione e se ci sono corrispondenze tra alcune, queste compariranno sulla stessa riga. Esercizio Creazione di un db che contiene questionari Testo Numero Tipo Testo risp. Data Ora Domanda Nome Cod. Fisc Età Città Persona Rispond e d Aperta Ammet te Chiusa Testo Voto Sceglie (voto) Tipo di Risposta Questionario Argomento Range1 Range2 [email protected] Appartie ne a [email protected]