Corso di. Basi di Dati I. 4. Algebra relazionale

Documenti analoghi
Corso di. Basi di Dati I. 3. Vincoli di integrità

Aggiornamenti e Interrogazioni

Operatori derivati dagli insiemi

Parte III L algebra relazionale

Il theta-join, espresso come prodotto cartesiano seguito da una selezione, è il tipo di join operativamente più generale. Infatti:

Linguaggi per basi di dati e SQL

Operatori derivati dagli insiemi. Algebra Relazionale. Unione. Operatori derivati dagli insiemi

Linguaggi per basi di dati. Linguaggi per basi di dati e SQL. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

Parte III. L algebra relazionale

Operatori derivati dagli insiemi. Algebra Relazionale. Unione. Operatori derivati dagli insiemi

Linguaggi per basi di dati

Dichiarativi : specificano le proprietà del risultato ("che cosa") Procedurali specificano le modalità di generazione del risultato ("come")

Introduzione all algebra relazionale. Prof. Giovanni Giuffrida

Tipi di operatori. Gli operatori dell algebra relazionale sono classificabili nelle seguenti categorie:

Linguaggi per Basi di Dati - 1. Algebra Relazionale. Algebra Relazionale. Linguaggi per Basi di Dati - 2. Operatori Insiemistici.

Modulo 2 Data Base 3

Equivalenze di espressioni. Equivalenze. Equivalenze. Atomizzazione delle selezioni ( F 2 (E)) Idempotenza delle proiezioni

Basi di dati Algebra relazionale Figure ed esempi

Interrogazioni (Query) Esempi. Esempi. Esempi

SQL QUERY: Le interrogazioni del database

Algebra Relazionale. Dario Allegra Data Management 1 1

Basi di dati e Relazioni

Accesso ai dati di un DB. Algebra relazionale. Accesso ai dati di un DB. Algebra relazionale

ALGEBRA RELAZIONALE. DB -Algebra Relazionale 1

L algebra relazionale in RA

Corso di. Basi di Dati I. 2. Il modello relazionale

Equivalenza di Espressioni Algebriche

Basi di dati. Linguaggi di interrogazione

Modello relazionale e algebra relazionale (lucidi integrativi del corso)

Corso di Basi di Dati

Lezione 6. Algebra e Calcolo Relazionale

Modulo 8 I data base Unità 5 Le Query

Algebra Relazionale.

Scopo. Informatica. Sistema informativo. Sistema informatico

Corso di Informatica

Precorsi di matematica

Linguaggi per basi di dati. Interrogazione delle basi di dati. Linguaggi di interrogazione per basi di dati relazionali. Linguaggi di interrogazione

Algebra Relazionale. T. Catarci, M. Scannapieco, Corso di Basi di Dati, A.A. 2008/2009, Sapienza Università di Roma

Corso di. Basi di Dati I. 9. Esercitazioni in SQL: Check, asserzioni, viste

Algebra relazionale D O C E N T E P R O F. A L B E R T O B E L U S S I. Anno accademico 2012/13

Scopo Laboratorio di Informatica

BASI DATI: algebra relazionale INFORMATICA APPLICATA E SISTEMI DI ELABORAZIONE DELLE INFORMAZIONI

Operazioni nel Modello Relazionale

ALGEBRA RELAZIONALE. Linguaggi di interrogazione relazionale

Lezione 5. Algebra relazionale

3 Algebra Relazionale

Basi di dati e Relazioni

Scopo Informatica. Sistema informativo. Sistema informatico. Gestione dell informazione per le lauree triennali

Informatica II Basi di Dati (07/08) Parte 2. 4 Accesso ai dati di un DB. Accesso ai dati di un DB. Accesso ai dati di un DB

Il Modello Relazionale e le operazioni

(Lezione SQL 3) Barbara Di Camillo Dipartimento di Ingegneria dell Informazione. Università degli Studi di Padova

QL (Query Language) Alice Pavarani

Instanze inconsistenti. Informatica II Basi di Dati (07/08) Parte 2. Instanze inconsistenti. Vincoli di integrità

Riconoscere e formalizzare le dipendenze funzionali

BASI DATI: algebra relazionale

Informatica. per laurea triennale di area non informatica. 1 Le basi di dati

Elementi di Informatica LB Basi di Dati. Anno accademico 2007/2008 Prof. Stefano Contadini

Il modello relazionale

Atzeni, Ceri, Paraboschi, Torlone Basi di dati McGraw-Hill, ALGEBRA E CALCOLO RELAZIONALE

<Nome Tabella>.<attributo>

Corso sul linguaggio SQL

Algebra relazionale (versione formale )

L algebra relazionale

Basi di dati. Gabriella Trucco

Interrogare una base di dati: algebra relazionale e SQL. Savino Castagnozzi Giorgio Macauda Michele Meomartino Salvatore Picerno Massimiliano Sartor

Basi di dati (database)

Fondamenti di Teoria delle Basi di Dati

Queries su più tabelle

Logica Proposizionale

ALGEBRA'RELAZIONALE'

Elementi di teoria degli insiemi

Teoria degli Insiemi

Algebra relazionale. Algebra relazionale. Operatori dell algebra relazionale. Operatori dell algebra relazionale. Algebra relazionale.

Università di Roma La Sapienza Laurea in Ingegneria Informatica. Basi di Dati. Anno Accademico 2003/2004 Canale M-Z.

SQL. SQL: "storia. Sviluppato nella metà degli anni settanta (1974) presso il laboratorio di ricerca IBM di S.Josè. Dal 1983 ca. "standard di fatto"

Basi di Dati: Corso di laboratorio

L algebra relazionale

SQL Matteo Magnani, Danilo Montesi Università di Bologna SQL. SQL come Data Manipulation Language - (SELECT FROM WHERE ORDER BY)

Algebra Relazionale. Interrogazione Basi di Dati. Algebra relazionale. Algebra relazionale. Unione. Algebra relazionale

Basi di dati 8 novembre 2010 Prova parziale Compito A

ALGEBRA RELAZIONALE (CAPITOLO 3) R. Basili a.a

Informatica Grafica. Basi di dati parte 2

SQL: "storia" 31/05/2006 2

IL MODELLO RELAZIONALE. Patrizio Dazzi a.a

Operatori aggregati. Operatori aggregati. Interrogazioni con raggruppamento. Interrogazioni con raggruppamento

Basi di Dati: Corso di laboratorio

Basi di dati (continua)

ALGEBRA RELAZIONALE (CAPITOLO 3) R. Basili a.a

SQL - Structured Query Language

RISOLVERE EQUAZIONI DI PRIMO GRADO INTERE

Basi di dati IL MODELLO RELAZIONALE

INFORMATICA GENERALE Prof. Alberto Postiglione Dipartimento Scienze della Comunicazione Università degli Studi di Salerno

Tornando all esempio..

Algebra Relazionale.

Basi di Dati: Corso di laboratorio

Transcript:

Corso di Basi di Dati 4. Algebra relazionale A.A. 2016 2017

Algebra relazionale L algebra relazionale è un insieme di operazioni che si effettuano su una base di dati relazionale. Lo scopo è quello di interrogare la base di dati, ottenendo un risultato sotto forma di relazioni, di solito derivate da quelle della base di dati. Si tratta di un linguaggio procedurale, in cui cioè si arriva al risultato voluto descrivendo i vari passaggi necessari ad ottenerlo in termini di operazioni semplici. Esistono anche altri metodi di interrogazione, ad es. il calcolo relazionale, che è un linguaggio dichiarativo, in cui cioè si arriva al risultato voluto descrivendo le sue proprietà, piuttosto che i passaggi necessari ad ottenerlo.

Algebra relazionale Le operazioni che vedremo sono: 1 operazioni insiemistiche tradizionali: unione, intersezione, differenza (si possono applicare alle relazioni, con qualche restrizione); 2 ridenominazione, proiezione, selezione; 3 join (in varie forme).

Unione, intersezione, differenza Considerando una relazione come un sottoinsieme R C 1... C n del prodotto cartesiano delle colonne C 1,..., C n, l unione di due relazioni è definita naturalmente, così come l intersezione e la differenza.

Unione, intersezione, differenza Più concretamente, consideriamo due relazioni R 1, R 2. Supponiamo abbiano lo stesso schema. Esempio: Laureati Cognome Età Residenza Rossi 34 Roma Bianchi 37 Roma Dirigenti Cognome Età Residenza Verdi 35 Milano Bianchi 37 Roma Possiamo definirne l unione, mettendo insieme le righe di entrambe: Laureati Dirigenti Cognome Età Residenza Rossi 34 Roma Bianchi 37 Roma Verdi 35 Milano (il DBMS provvede automaticamente ad eliminare le eventuali ripetizioni!)

Unione, intersezione, differenza Allo stesso modo possiamo definire l intersezione: Esempio: Laureati Cognome Età Residenza Dirigenti Cognome Età Residenza Rossi 34 Roma Verdi 35 Milano Bianchi 37 Roma Bianchi 37 Roma Laureati Dirigenti Cognome Età Residenza Bianchi 37 Roma (qui non c è rischio di ripetizioni)

Unione, intersezione, differenza E la differenza: Esempio: Laureati Cognome Età Residenza Rossi 34 Roma Bianchi 37 Roma Laureati Dirigenti Cognome Età Residenza Rossi 34 Roma Dirigenti Cognome Età Residenza Verdi 35 Milano Bianchi 37 Roma (anche qui non c è rischio di ripetizioni) (ma qui l ordine conta!) Dirigenti Laureati Cognome Età Residenza Verdi 35 Milano

Unione, intersezione, differenza Ripetiamo: Per queste operazioni è necessario che le relazioni siano sullo stesso schema. Se questo non è verificato, possiamo voler definire operazioni simili, ma dovremmo essere più precisi nello specificare cosa vogliamo. Ad esempio, che colonne dovrebbe avere l unione di due relazioni che hanno attributi diversi? Selezioniamo solo le colonne comuni? oppure Mettiamo anche le colonne che figurano in una sola delle relazioni? Vedremo che tali operazioni (più complesse) sono possibili, ma non si chiamano unione, intersezione, differenza (vedi: join).

Ridenominazione La ridenominazione è usata per cambiare gli attributi (cioè i nomi delle colonne) in una relazione. La rappresentiamo come un operatore, con il simbolo ρ, e la notazione è la seguente: Esempio: Paternità Padre Figlio Adamo Caino Adamo Abele Abramo Isacco Abramo Ismaele ρ Nuovo nome Vecchio nome (Relazione). Attenzione: i dati della tabella non cambiano! ρ Genitore Padre (Paternità) Genitore Figlio Adamo Caino Adamo Abele Abramo Isacco Abramo Ismaele

Ridenominazione Cambiare nome a delle colonne più volte, una dopo l altra, si indica naturalmente concatenando gli operatori: Esempio: ρ Parente Genitore (ρ Genitore Padre (Paternità)) Parente Figlio Adamo Caino Adamo Abele Abramo Isacco Abramo Ismaele

Ridenominazione e operatori insiemistici La ridenominazione è utile quando si vogliono applicare gli operatori insiemistici (unione, intersezione, differenza) a tabelle con attributi diversi. Esempio: sarebbe naturale voler unire le tabelle Paternità Maternità Padre Figlio Madre Figlio Adamo Caino Eva Caino Adamo Abele Eva Set Però non si può unirle immediatamente, cioè Paternità Maternità non è permesso, perché le tabelle non hanno gli stessi attributi.

Ridenominazione e operatori insiemistici Ma gli attributi Padre e Madre possono essere raggruppati insieme come Genitore. Allora prima va usata la ridenominazione: Paternità Padre Figlio Adamo Caino Adamo Abele ρ Genitore Padre (Paternità) Genitore Figlio Adamo Caino Adamo Abele Maternità Madre Figlio Eva Caino Eva Set ρ Genitore Madre (Maternità) Genitore Figlio Eva Caino Eva Set

Ridenominazione e operatori insiemistici e poi si può usare l unione: ρ Genitore Padre (Paternità) Genitore Figlio Adamo Caino Adamo Abele ρ Genitore Madre (Maternità) Genitore Figlio Eva Caino Eva Set ρ Genitore Padre (Paternità) ρ Genitore Madre (Maternità) Genitore Figlio Adamo Caino Adamo Abele Eva Caino Eva Set Osservazione: il nome stesso della nuova tabella contiene la traccia di tutte le operazioni usate per ottenerla. Possiamo darle anche un nuovo nome: Genitorialità = ρ Genitore Padre (Paternità) ρ Genitore Madre (Maternità)

Proiezione e selezione La proiezione e la selezione si usano per selezionare (rispettivamente) solo alcune colonne e solo alcune righe di una relazione. La proiezione è la più semplice: bisogna solo indicare esplicitamente quali colonne si vogliono mantenere. Si usa la notazione π Colonne da mantenere (Relazione)

Proiezione Esempio: Studenti Nome Cognome Matricola Data di nascita Corso Fabio Rossi 4453 1.12.1996 Matematica Giulia Bianchi 8759 30.3.1994 Fisica Marco Rossi 6012 20.7.1995 Chimica Giulia Verdi 1404 1.12.1996 Fisica π Nome,Cognome (Studenti) Nome Cognome Fabio Rossi Giulia Bianchi Marco Rossi Giulia Verdi

Proiezione Altro esempio: Studenti Nome Cognome Matricola Data di nascita Corso Fabio Rossi 4453 1.12.1996 Matematica Giulia Bianchi 8759 30.3.1994 Fisica Marco Rossi 6012 20.7.1995 Chimica Giulia Verdi 1404 1.12.1996 Fisica π Nome,Corso (Studenti) Nome Corso Fabio Matematica Giulia Fisica Marco Chimica Giulia Fisica Anche qui il DBMS elimina automaticamente eventuali ripetizioni!

Proiezione In generale il numero di righe di π Colonne da mantenere (Relazione) è il numero di righe di Relazione. Il numero è uguale se e solo se le colonne da mantenere sono una superchiave di Relazione.

Selezione La selezione si usa per selezionare alcune righe di una relazione. Le righe da mantenere si indicano specificando un criterio, che ciascuna di esse deve (singolarmente) rispettare. La notazione è la seguente: σ Criterio (Relazione)

Selezione Esempio: Esami Studente Voto Lode Corso 4453 21 no Analisi 6887 30 sì Geometria 4453 28 no Algebra 4453 28 no Fisica 1837 25 no Algebra 9928 23 no Fisica σ Voto 28 (Esami) Studente Voto Lode Corso 6887 30 sì Geometria 4453 28 no Algebra 4453 28 no Fisica

Selezione Altro esempio: Esami Studente Voto Lode Corso 4453 21 no Analisi 6887 30 sì Geometria 4453 28 no Algebra 4453 28 no Fisica 1837 25 no Algebra 9928 23 no Fisica σ Corso=Fisica (Esami) Studente Voto Lode Corso 4453 28 no Fisica 9928 23 no Fisica

Selezione Attenzione: Normalmente in un DBMS è possibile solo specificare condizioni che riguardano la singola riga. Non è possibile descrivere il sottoinsieme delle righe volute in modo più generale. Per tali operazioni più complesse è necessaria un implementazione ad-hoc.

Join L operazione di join permette di combinare più relazioni in modo simile agli operatori insiemistici, combinando caratteristiche sia dell unione sia dell intersezione. Si può applicare a relazioni che non hanno gli stessi attributi. Ne vedremo diverse varianti, e anche operatori da esso derivati: il join naturale, il join n-ario, il join esterno, il self-join, il theta-join e l equi-join. Queste varianti esistono perché ci sono diversi possibili modi di trattare il fatto che le relazioni non hanno gli stessi attributi, è conveniente combinare join con se stesso e con altre operazioni.

Join naturale Definiamo il join naturale di due relazioni R 1 ed R 2, definite rispettivamente sugli schemi S 1 ed S 2 (ricordiamo: sono i loro insiemi degli attributi). Il join, denotato come è una relazione sullo schema R 1 R 2 S 1 S 2 cioè uniamo le colonne delle due relazioni. Le righe del join R 1 R 2 sono definite nel modo seguente: R 1 R 2 contiene una riga r R 1 ha una riga r 1 che coincide con r sugli attributi S 1, e R 2 ha una riga r 2 the coincide con r sugli attributi S 2.

Join naturale Osservazione: i due schemi S 1 ed S 2 possono avere attributi in comune! Esempio: R 1 R 2 Impiegato Reparto Reparto Piano Rossi Vendite Produzione 2 Neri Produzione Vendite 1 Bianchi Produzione R 1 R 2 Impiegato Reparto Piano Rossi Vendite 1 Neri Produzione 2 Bianchi Produzione 2

Join naturale vs. ridenominazione + unione Confrontiamo il join naturale con la composizione di ridenominazione ed unione. Paternità Maternità Padre Figlio Madre Figlio Adamo Caino Eva Caino Adamo Abele Eva Set ρ Genitore Padre (Paternità) ρ Genitore Madre (Maternità) Genitore Figlio Adamo Caino Adamo Abele Eva Abele Eva Set

Join naturale vs. ridenominazione + unione Confrontiamo il join naturale con la composizione di ridenominazione ed unione. Paternità Maternità Padre Figlio Madre Figlio Adamo Caino Eva Caino Adamo Abele Eva Set Paternità Maternità Padre Madre Figlio Adamo Eva Caino

Join naturale: proprietà Il numero di righe di R 1 R 2 è minore o uguale a n 1 n 2, dove n i è il numero di righe di R i. Non è detto che tutte le righe di R 1 (o tutte le righe di R 2 ) contribuiscano a qualche riga di R 1 R 2. Se sì, il join si dice completo. All estremo opposto, è anche possibile che il join sia vuoto! Questo accade quando nessuna riga di R 1 è combinabile con alcuna riga di R 2 (ricordiamo: le righe devono coincidere negli attributi comuni a R 1 ed R 2 ).

Join naturale e vincoli di integrità referenziale Supponiamo che due relazioni abbiano un vincolo di integrità referenziale, e che le colonne corrispondenti abbiano tutte lo stesso nome. Esempio: Infrazioni(Prov., Numero) Veicoli Allora il join Infrazioni Veicoli ha esattamente tante righe quante ne ha Infrazioni. (Domanda: Perché?)

Join naturale e vincoli di integrità referenziale Esempio: Infrazioni Codice Data Agente Prov. Numero 143886 20.1.2017 277 RM 4E5432 366521 4.3.2017 102 MI 8D1526 Veicoli Prov. Numero Marca FI 2B5881 Ford RM 4E5432 Fiat MI 8D1526 Audi Infrazioni Veicoli Codice Data Agente Prov. Numero Marca 143886 20.1.2017 277 RM 4E5432 Fiat 366521 4.3.2017 102 MI 8D1526 Audi

Join naturale, intersezione e prodotto cartesiano Consideriamo il join R 1 R 2 di due relazioni R 1, R 2 sullo schema rispettivamente S 1, S 2, e con rispettivamente n 1, n 2 righe. Se S 1 = S 2, allora R 1 R 2 = R 1 R 2 Infatti R 1 R 2 è sullo schema S 1 S 2 = S 1 = S 2, e contiene esattamente le righe di R 1 che coincidono con qualche riga di R 2. All estremo opposto, supponiamo S 1 S 2 =. Allora R 1 R 2 contiene n 1 n 2 righe, ottenute combinando ogni riga di R 1 con ogni riga di R 2 senza restrizioni. Abbiamo cioè un prodotto cartesiano di R 1 ed R 2.

Join n-ario Il join, considerato come operazione fra relazioni, è commutativo: ed associativo: R 1 R 2 = R 2 R 1 (R 1 R 2 ) R 3 = R 1 (R 2 R 3 ) Quindi si può scrivere anche un join di più di due relazioni, senza parentesi: o in generale di n relazioni: R 1 R 2 R 3 R 1 R 2... R n = n i=1 R i Questo si chiama join n-ario.

Join esterni Il join R 1 R 2 non include in generale tutte le righe di R 1 ed R 2. Esistono varianti che invece le includono tutte: i join esterni. Con essi, se una riga di una relazione non è compatibile con alcuna riga dell altra, viene estesa mettendo NULL negli attributi mancanti, e viene inclusa nel join. Esistono tre versioni: join esterno sinistro: che estende solo le righe di R 1, join esterno destro: che estende solo le righe di R 2, join esterno completo: R 1 left R 2 R 1 right R 2 R 1 full R 2 che estende le righe di entrambe R 1 ed R 2.

Join esterni Esempio: Paternità Padre Figlio Adamo Caino Adamo Abele Maternità Madre Figlio Eva Caino Eva Set Paternità Maternità Padre Madre Figlio Adamo Eva Caino Paternità left Maternità Padre Madre Figlio Adamo Eva Caino Adamo NULL Abele

Join esterni Esempio: Paternità Padre Figlio Adamo Caino Adamo Abele Maternità Madre Figlio Eva Caino Eva Set Paternità Maternità Padre Madre Figlio Adamo Eva Caino Paternità right Maternità Padre Madre Figlio Adamo Eva Caino NULL Eva Set

Join esterni Esempio: Paternità Padre Figlio Adamo Caino Adamo Abele Maternità Madre Figlio Eva Caino Eva Set Paternità Maternità Padre Madre Figlio Adamo Eva Caino Paternità full Maternità Padre Madre Figlio Adamo Eva Caino Adamo NULL Abele NULL Eva Set

Join esterni e valori NULL Attenzione: I join esterni introducono spesso valori NULL. Vedremo in seguito come vengono definiti gli operatori dell algebra relazionale in presenza di tali valori.

Self-join Il join R R di una relazione R con se stessa è uguale... ad R. Ma può essere utile dopo una ridenominazione! Si chiama allora self-join.

Self-join Esempio: Genitori Genitore Luca Maria Giorgio Silvia Enzo Figlio Elena Elena Luca Maria Maria ρ (Nonno,Genitore) (Genitore,Figlio) (Genitori) Da questa relazione deduciamo che Giorgio, Silvia ed Enzo sono nonni di Elena.

Self-join Esempio: Genitori Genitore Luca Maria Giorgio Silvia Enzo Figlio Elena Elena Luca Maria Maria ρ (Nonno,Genitore) (Genitore,Figlio) (Genitori) Nonno Genitore Luca Elena Maria Elena Giorgio Luca Silvia Maria Enzo Maria Da questa relazione deduciamo che Giorgio, Silvia ed Enzo sono nonni di Elena. ρ (Nonno,Genitore) (Genitore,Figlio) (Genitore) Genitore Nonno Genitore Figlio Giorgio Luca Elena Silvia Maria Elena Enzo Maria Elena

Theta-join Come nell esempio precedente, il join è spesso utile in combinazione con altri operatori. Si possono definire allora altri operatori da esso derivati. Ad esempio il theta-join, che è la composizione di selezione e join: La notazione è: theta-join = selezione join Criterio = σ Criterio Attenzione: In molti DBMS il theta-join è definito invece come composizione di selezione e prodotto cartesiano: theta-join = selezione prodotto cartesiano (ricordiamo: il prodotto cartesiano è il join di due relazioni senza attributi in comune)

Theta-join Esempio: Infrazioni Codice Data Agente Prov. Numero 143886 20.1.2017 277 RM 4E5432 366521 4.3.2017 102 MI 8D1526 Veicoli Prov. Numero Marca FI 2B5881 Ford RM 4E5432 Fiat MI 8D1526 Audi Infrazioni Veicoli Codice Data Agente Prov Numero Marca 143886 20.1.2017 277 RM 4E5432 Fiat 366521 4.3.2017 102 MI 8D1526 Audi

Theta-join Esempio: Infrazioni Codice Data Agente Prov. Numero 143886 20.1.2017 277 RM 4E5432 366521 4.3.2017 102 MI 8D1526 Veicoli Prov. Numero Marca FI 2B5881 Ford RM 4E5432 Fiat MI 8D1526 Audi Infrazioni Data = 4.3.2017 Veicoli Codice Data Agente Prov. Numero Marca 366521 4.3.2017 102 MI 8D1526 Audi

Equi-join Spesso il criterio C di un theta-join R 1 C R 2 fra due relazioni R 1, R 2 è del tipo valore in un attributo di R 1 = valore in un attributo di R 2 In questo caso il theta-join si chiama equi-join. L esempio tipico di equi-join è il join di due relazioni che si vuole abbiano colonne in comune, ma dove i nomi non corrispondono. Invece di 1 ridenominare gli attributi, e poi 2 usare il join, si può usare l equi-join.

Equi-join Esempio: Infrazioni Codice Data Agente Prov. Numero 143886 20.1.2017 277 RM 4E5432 366521 4.3.2017 102 MI 8D1526 Agenti Matricola Nome 081 Rossi 102 Neri 277 Bianchi Infrazioni Agente=Matricola Agenti Codice Data Agente Prov. Numero Matricola Nome 143886 20.1.2017 277 RM 4E5432 277 Bianchi 366521 4.3.2017 102 MI 8D1526 102 Neri Si possono poi elminare le colonne doppie con una proiezione.

Equi-join e join naturale Alcuni DBMS non conservano i nomi delle colonne correlando relazioni diverse: vi aggiungono il nome della relazione di partenza. Esempio: Se viene usata Impiegati(Nome, Cognome, Dipartimento), i suoi attributi diventano Impiegati.Nome, Impiegati.Cognome, Impiegati.Dipartimento In questi casi join naturale non esiste, in quanto colonne provenienti da relazioni diverse non avranno mai lo stesso attributo. Viene quindi sostituito dall equi-join. Esempio Il join di Impiegati(Nome, Dipartimento) e Edifici(Indirizzo, Dipartimento) si fa come Impiegati(Nome, Dipartimento) Impiegati.Dipartimento = Edifici.Dipartimento Edifici(Indirizzo, Dipartimento)

Equivalenza di espressioni algebriche L algebra relazionale permette di formulare espressioni fra loro equivalenti, cioè che producono lo stesso risultato. L equivalenza può essere assoluta, se è vera sempre indipendentemente dagli schemi delle relazioni coinvolte. Si scrive Relazione Altra relazione relativa, se è vera solo su un certo schema. Si scrive Relazione schema Altra relazione

Equivalenza di espressioni algebriche Esempi: Per ogni relazione R e qualsiasi scelta di criteri C 1, C 2 per la selezione σ, l equivalenza è sempre vera. σ C1 AND C 2 (R) σ C1 (σ C2 (R)) Consideriamo due relazioni R 1, R 2 su schemi rispettivamente S 1, S 2, e supponiamo A, B, C S 1 S 2 con A S 1 S 2 e B C =. L equivalenza π A B (R 1 ) π A C (R 2 ) S π A B C (R 1 R 2 ) è vera se e solo se S 1 S 2 = A. Perché a sinistra il join avviene su relazioni che hanno in comune solo A, mentre a destra R 1 ed R 2 possono avere più colonne in comune, e allora il join in generale sarà diverso.

Equivalenza di espressioni algebriche Tali equivalenze sono utili in pratica, perché alcune operazioni richiedono più risorse (tempo e spazio) di altre. Eseguendo una serie di operazioni, è molto utile ridurre le dimensioni delle relazioni che vengono create nei passi intermedi, o almeno far sì che le operazioni più onerose (es. il join) vengano eseguite su relazioni piccole. Le equivalenze servono ad ottimizzare i vari passaggi in questo senso.

Equivalenza di espressioni algebriche Alcune equivalenze utili: Atomizzazione delle selezioni: che abbiamo già visto. Idempotenza delle proiezioni: σ C1 AND C 2 (R) σ C1 (σ C2 (R)) π A (R) π A (π A B (R)) dove A e B sono sottoinsiemi degli attributi di R. Anticipazione della selezione rispetto al join: σ C (R 1 R 2 ) R 1 σ C (R 2 ) che vale solo se il criterio di selezione C fa riferimento solo ad attributi di R 2 e non di R 1.

Equivalenza di espressioni algebriche Anticipazione della proiezione rispetto al join: Siano R 1, R 2 relazioni definite sugli schemi risp. S 1, S 2. Sia T 2 S 2 con T 2 S 1 S 2. Allora nel join solo le colonne di T 2 vengono confrontate con colonne di S 1, e vale π S1 T 2 (R 1 R 2 ) R 1 π T2 (R 2 ) Combinando l equivalenza precedente con l idempotenza delle proiezioni otteniamo: π X (R 1 C R 2 ) π X (π T1 (R 1 ) C π T2 (R 2 )) che vale sotto le seguenti ipotesi: R 1, R 2 sono relazioni su risp. S 1, S 2, il criterio C di theta-join coinvolge sottoinsiemi J 1 di S 1 e J 2 di S 2, con J i S 1 S 2, T 1 = (S 1 X ) J 1, T 2 = (S 2 X ) J 2 Cioè: facendo una proiezione dopo un theta-join, possiamo eliminare sin dall inizio le colonne che non compaiono dopo la proiezione e che non sono coinvolte nel theta-join.

Equivalenza di espressioni algebriche Esempio: Vediamo come queste equivalenze vengono usate in pratica. Consideriamo due relazioni: Impiegati(Matricola, Nome, Cognome, Età, Stipendio), Supervisione(Capo, Impiegato). Supponiamo di voler elencare i capi degli impiegati che hanno meno di 30 anni. Dobbiamo prima costruire una relazione che contenga le informazioni di entrambe le tabelle: Impiegati Supervisione Poi imponiamo: Impiegato di Supervisione si riferisce a Matricola di Impiegati (vincolo di integrità referenziale), vogliamo solo gli impiegati che hanno meno di 30 anni. Quindi: σ Età<30 AND Matricola=Impiegato (Impiegati Supervisione)

Equivalenza di espressioni algebriche Infine vogliamo solo il campo Capo : π Capo (σ Età<30 AND Matricola=Impiegato (Impiegati Supervisione)) È un espressione poco efficiente, perché coinvolge pochi attributi delle due tabelle, ma crea subito un prodotto cartesiano, il cui numero di righe è il prodotto del numero di righe di Impiegati e di Supervisione. Per ottimizzarla, spezziamo prima le selezioni in passi elementari: π Capo (σ Età<30 (σ Matricola=Impiegato (Impiegati Supervisione))) Poi possiamo usare l equi-join al posto della selezione e join: π Capo (σ Età<30 (Impiegati Matricola=Impiegato Supervisione))

Equivalenza di espressioni algebriche Questa che abbiamo ottenuto π Capo (σ Età<30 (Impiegati Matricola=Impiegato Supervisione)) è già un espressione migliore, perché un equi-join di solito è implementato internamente in modo più efficiente di un prodotto cartesiano seguito da una selezione. Ad esempio il DBMS non ha bisogno di immagazzinare tutti i dati del prodotto cartesiano prima di iniziare a fare la selezione, può applicarla di riga in riga mentre crea il prodotto cartesiano, registrando effettivamente la riga solo se il criterio è rispettato. (Questo dipende chiaramente dal DBMS.)

Equivalenza di espressioni algebriche Continuiamo da: π Capo (σ Età<30 (Impiegati Matricola=Impiegato Supervisione)) Notiamo che nell equi-join: ci interessano comunque solo gli impiegati con meno di 30 anni, solo l attributo Matricola viene coinvolto nell equi-join, e poi nessun attributo di Impiegati rimane dopo la proiezione finale. Usiamo allora l ultima equivalenza vista, ottenendo: π Capo (π Matricola (σ Età<30 (Impiegati)) Matricola=Impiegato Supervisione) Questa espressione è ancora migliore: l equi-join viene fatto su relazioni probabilmente più piccole di quelle di partenza.

Equivalenza di espressioni algebriche Vediamo altre equivalenze. Distributività della selezione rispetto all unione: σ C (R 1 R 2 ) σ C (R 1 ) σ C (R 2 ) e lo stesso con intersezione ( ) e differenza ( ). Distributività della proiezione rispetto all unione: π X (R 1 R 2 ) π X (R 1 ) π X (R 2 ) Attenzione: La proiezione non è distributiva rispetto alla differenza, né all intersezione! Cioè in generale π X (R 1 R 2 ) π X (R 1 ) π X (R 2 ), π X (R 1 R 2 ) π X (R 1 ) π X (R 2 ). Ad esempio, se una riga r 1 di R 1 coincide con una riga r 2 di R 2 su X, ma r 1 ed r 2 non coincidono su altri attributi, allora r 1 comparirà in π X (R 1 R 2 ) ma non in π X (R 1 ) π X (R 2 ).

Equivalenza di espressioni algebriche Infine: la selezione con più criteri, legati logicamente con AND, OR, NOT, è legata agli operatori insiemistici: σ C1 OR C 2 (R) σ C1 (R) σ C2 (R) σ C1 AND C 2 (R) σ C1 (R) σ C2 (R) σ C1 AND NOT C 2 (R) σ C1 (R) σ C2 (R) l unione e l intersezione sono commutative ed associative, distributività del join rispetto all unione: R (R 1 R 2 ) = (R R 1 ) (R R 2 ) il theta-join e l equi-join non sono associativi!

Algebra relazionale con valori NULL Finora abbiamo visto gli operatori dell algebra relazionale ipotizzando che non siano presenti valori NULL. In pratica però tali valori vanno ammessi, ed è necessario che il comportamento del DBMS in loro presenza sia ben specificato, ad es. di fronte ad operazioni di confronto. Esempio: Persone Nome Età Rossi 31 Neri 28 Bianchi NULL Come interpretare l espressione in questa relazione? Età 30

Algebra relazionale con valori NULL Vediamo vari modi di dare una risposta. In ogni caso partiamo dal presupposto che NON consideriamo la disuguaglianza NULL 30 come VERA, visto che nella relazione il dato NULL nel dominio Età vuol dire chiaramente che l età della persona non è nota, quindi non si può affermare con certezza che sia 30. Esempio:Una selezione sceglie le righe su cui il criterio è VERO. Allora qui abbiamo σ Età 30 (Persone) Nome Età Rossi 31

Algebra relazionale con valori NULL Questo presupposto è ragionevole, però va formalizzato precisamente per evitare risultati inaspettati. Esempio: La relazione σ Età 30 (Persone) σ Età<30 (Persone) dovrebbe essere uguale a...persone, ma non lo è in presenza di valori NULL! Infatti abbiamo σ Età 30 (Persone) σ Età<30 (Persone) Nome Età Rossi 31 Neri 28 Bianchi NULL

Algebra relazionale con valori NULL Un modo di formalizzare la nostra scelta è di usare una logica a tre valori: vero, falso, sconosciuto. Gli operatori logici NOT, AND, OR con questi tre valori sono i seguenti: NOT V F S F V S AND V F S V V F S F F F F S S F S OR V F S V V V V F V F S S V S S

Algebra relazionale con valori NULL Una logica a tre valori come questa può essere usata per formulare l algebra relazionale con valori NULL in modo formalmente corretto. Ma non rende più intuitivi risultati come l esempio precedente: la relazione σ Età 30 (Persone) σ Età<30 (Persone) rimane diversa da Persone. Con espressioni eventualmente molto più complicate, il rischio di inserire operatori aspettandosi un risultato diverso è alto.

Algebra relazionale con valori NULL Una formalizzazione migliore (adottata in SQL) consiste nel 1 aggiungere gli operatori IS NULL, IS NOT NULL, 2 considerare automaticamente FALSA ogni condizione logica se coinvolge dati NULL, come se si aggiungesse sempre implicitamente AND IS NOT NULL. Esempio: L espressione va letta come Età 30 (Età 30) AND (Età IS NOT NULL)

Algebra relazionale con valori NULL In questo modo non sorprende che σ Età 30 (Persone) σ Età<30 (Persone) Persone perché in realtà va letta come σ Età 30 AND Età IS NOT NULL Avremo invece (Persone) σ Persone Età<30 AND Età IS NOT NULL (Persone) σ Età 30 (Persone) σ Età<30 (Persone) σ Età IS NULL (Persone) = Persone

Algebra relazionale con valori NULL Discutiamo il comportamento dei singoli operatori che abbiamo visto, in presenza di valori NULL. Attenzione: Unione, intersezione, differenza si comportano come prima, cioè come se NULL fosse un valore come gli altri. P Nome Età Rossi 31 Neri 28 Bianchi NULL Q Nome Età Rossi 31 NULL 31 Bianchi NULL P Q P Q P Q Nome Età Nome Età Nome Età Rossi 31 Rossi 31 Neri 28 Neri 28 Bianchi NULL Bianchi NULL NULL 31

Algebra relazionale con valori NULL La proiezione si comporta allo stesso modo: P π Età (P) Nome Età Età Rossi 31 31 Neri NULL NULL Bianchi NULL E la selezione si comporta come abbiamo visto (aggiungendo cioè sempre AND IS NOT NULL ).

Algebra relazionale con valori NULL Il join è uguale ad un equi-join dove si richiede uguaglianza su tutti gli attributi comuni. Quindi si aggiunge come sopra AND IS NOT NULL quando si confrontano le righe sulle colonne comuni. La conseguenza è che due righe non sono compatibili se hanno valori NULL su colonne comuni, anche se coincidono su tutti i valori noti.

Algebra relazionale con valori NULL Esempio: Infrazioni Codice Data Agente Prov. Numero 143886 20.1.2017 277 RM 4E5432 366521 4.3.2017 102 NULL 8D1526 Veicoli Prov. Numero Marca FI 2B5881 Ford RM 4E5432 Fiat MI 8D1526 Audi Infrazioni Veicoli Codice Data Agente Prov. Numero Marca 143886 20.1.2017 277 RM 4E5432 Fiat

Algebra relazionale con valori NULL Attenzione: Con valori NULL, il join di due relazioni con gli stessi attributi non è uguale alla loro intersezione! Esempio: P Q Nome Età Nome Età Rossi 31 Neri 28 Bianchi NULL Rossi 31 NULL 31 Bianchi NULL P Q Nome Età Rossi 31 Bianchi NULL P Q Nome Età Rossi 31