Corso di Laurea in Ingegneria Informatica Fondamenti di Informatica II Modulo “Basi di dati” a.a. 2012-2013 Docente: Gigliola Vaglini Docenti di laboratorio: Francesco Pistolesi, Antonio Virdis 1 Un altro operatore algebrico derivato: divisione • Vogliamo trovare i nomi dei clienti che hanno un conto • corrente in tutte le filiali di banca di Pisa. Le relazioni sono – Branch( Branch(bank_name, bank_name, branch_name, branch_name, branch_city) branch_city) – Account(branch_name branch_name, , bank_name, , Account( bank_name account_number, account_number, branch_city) branch_city) – Depositor( Depositor(account_number, account_number, customer_name) customer_name) CN,BN (depositor account) BN (BC=‘ branch)) BC=‘Pisa’ Pisa’ (branch)) 2 1 Cosa si intende CN,BN (depositor account) BN (BC=‘ BC=‘Pisa’ Pisa’ (branch)) • Equivale a CN (depositor account) – CN ((CN (depositor account) X BN (BC=‘ BC=‘Pisa’ Pisa’ (branch)) CN,BN (depositor account)) 3 CN (depositor account) X BN (BC=‘ branch) BC=‘Pisa’ Pisa’ (branch) Si combinano tutti i clienti presenti nel data base con le filiali di Pisa; togliendo da questo insieme le coppie (cliente,filiale) presenti nel data base, cioè cioè CN,BN (depositor account) Restano i clenti che hanno un conto in una filiale a Pisa, ma non in tutte. Togliendo dai clienti del data base i clienti ottenuti, restano i clienti che hanno un conto in tutte le filiali di Pisa. 4 2 Definizione • Siano r(R) e s(S) relazioni con R S, rs è una relazione su R-S; una tupla t rs iff – t R-S (r) – t’ s, t” r tale che • t’[S]= t” t”[S] e • t’[R[R-S]= t 5 Lezione 12 Linguaggi di interrogazione dichiarativi: Calcolo Relazionale 6 3 Calcolo relazionale • Una famiglia di linguaggi dichiarativi, basati sul calcolo dei predicati del primo ordine • Diverse versioni: – calcolo relazionale su domini – calcolo su ennuple con dichiarazioni di range 7 Calcolo su domini • • • • { A1: x1, …, An: xn | f } Ai sono nomi di attributi xi sono nomi di variabili La lista di coppie Ai : xi viene detta target list (descrive il risultato) f è una formula – Formule atomiche sono R(A1: x1, …, An: xn), xn), che è vera sui valori di x1… x1…xn che formano una tpla di R, e xi xj, xj, che è vera sui valori di xi e xj che soddisfano 8 4 Calcolo su tuple con dichiarazione di range { x1.Z1, …, xn.Zn | xi(R1), …, xj(Rm) | f } • x1.Z1, …, xn.Zn è la target list • xi(R1) ,…, xj(Rm) è la range list (dice il campo di variabilità delle variabili) • f è una formula, con formule atomiche del tipo xi.Zi xj.Zj, ad esempio 9 Base di dati per gli esempi Impiegati(Matricola,Nome, Età, Stipendio) Supervisione(Capo, Impiegato) 10 5 Esempio 1a • Trovare gli impiegati che guadagnano più di 40 milioni { Matricola: m, Nome: n, Età: e, Stipendio: s| Impiegati (Matricola: m, Nome: n, Età: e, Stipendio: s) s > 40 } 11 Esempio 1b • Trovare gli impiegati che guadagnano più di 40 milioni { i.* | i(Impiegati) | i.Stipendio > 40 } 12 6 Esempio 2a • Trovare nome e matricola degli impiegati che guadagnano più di 40 milioni { Matricola: m, Nome: n | Impiegati (Matricola: m, Nome: n, Età: e, Stipendio: s) s > 40 } oppure { Matricola: m, Nome: n | e,s(Impiegati (Matricola: m, Nome: n, Età: e, Stipendio: s) s > 40) } 13 Esempio 2b • Trovare nome e matricola degli impiegati che guadagnano più di 40 milioni { i.(Matricola, Nome) | i(Impiegati) | i.Stipendio > 40 } 14 7 Quantificatori esistenziali e universali • Per interrogazioni più complesse, che in algebra ad esempio richiedevano una differenza, servono altri strumenti • , – Sono intercambiabili – x(f)=¬( x(¬ x(¬(f))) – x(f)=¬( x(¬ x(¬(f))) 15 Quantificatori esistenziali e universali • Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più più di 40 milioni. {Matricola: c, Nome: n | Impiegati(Matricola: c, Nome: n, Età Età: e, Stipendio: s) Supervisione(Capo:c, Impiegato:m) m'( m'(n'( n'(e'( e'(s'( ¬(Impiegati(Matricola:m', Nome:n', Età Età:e', Stipendio:s') Supervisione(Capo:c, Impiegato:m')) s' > 40))))} 40))))} 16 8 Quantificatori esistenziali e universali • Trovare matricola e nome dei capi i cui impiegati guadagnano tutti più più di 40 milioni. {Matricola: c, Nome: n | Impiegati(Matricola: c, Nome: n, Età Età: e, Stipendio: s) Supervisione(Capo:c, Impiegato:m) ¬ m'( m'(n'( n'(e'( e'(s‘( Impiegati(Matricola: m', Nome: n', Età Età: e', Stipendio: s') Supervisione(Capo:c, Impiegato:m') s' 40))))} 40))))} 17 Quantificatori esistenziali e universali {Matricola: c, Nome: n | Impiegati(Matricola: c, Nome: n, Età Età: e, Stipendio: s) Supervisione(Capo:c, Impiegato:m) ¬ m'( m'(n'( n'(e'( e'(s'( Impiegati(Matr Impiegati(Matr:: m', Nome: n', Età Età: e', Stip: Stip: s') Supervisione(Capo:c, Impiegato:m') s' 40))))} 40))))} { i.(Matricola, Nome) | s(Supervisione), i(Impiegati) | i.Matricola=s.Capo ¬(i'(Impiegati )( s'(Supervisione) i'(Impiegati)( s'(Supervisione) (s.Capo=s'.Capo s'.Impiegato=i'.Matricola i'.Stipendio 40)))} 40)))} 18 9 Calcolo su domini, discussione • Pregi: – dichiaratività dichiaratività • Difetti: – "verbosità "verbosità": tante variabili! • Le variabili del calcolo dei domini rappresentano singoli valori • Nel calcolo su tple rappresentano tple – possibilità possibilità di scrivere espressioni senza senso (dipendenti dal dominio) dominio) • A:x, A:x, B:y| B:y| R(A:x) R(A:x) y=y y=y – nell'algebra tutte le espressioni hanno un senso (indipendenti dal dominio) dominio) 19 Calcolo su tuple, discussione • Il calcolo su tuple con dichiarazioni di range non permette di esprimere alcune interrogazioni importanti, in particolare le unioni: R1(AB) R2(AB) – Ogni variabile ha un solo range nel risultato, mentre vorremmo tple sia della prima relazione che della seconda • Nota: intersezione e differenza sono esprimibili • Per questa ragione SQL (che è basato su questo calcolo) prevede un operatore esplicito di unione, ma non tutte le versioni prevedono intersezione e differenza 20 10 Calcolo e algebra • Calcolo e algebra sono "equivalenti" – per ogni espressione del calcolo relazionale che sia indipendente dal dominio esiste un'espressione dell'algebra relazionale equivalente a essa – per ogni espressione dell'algebra relazionale esiste un'espressione del calcolo relazionale equivalente a essa (e di conseguenza indipendente dal dominio) 21 Calcolo e algebra: limiti • l'insieme di interrogazioni esprimibili è • significativo Ci sono però interrogazioni interessanti non esprimibili, ad es. – interrogazioni inerentemente ricorsive, come la chiusura transitiva 22 11 Chiusura transitiva Supervisione(Impiegato, Capo) • Per ogni impiegato, trovare tutti i superiori (cioè il capo, il capo del capo, e cosi' via) Impiegato Rossi Neri Lupi Capo Mori Lupi Bruni Falchi Impiegato Rossi Neri Lupi Rossi Superiore Mori Lupi Bruni Falchi Falchi 23 Chiusura transitiva • Nell'esempio, basterebbe il join della relazione • con se stessa, previa opportuna ridenominazione Ma aggiungiamo una nuova ennupla Impiegato Rossi Neri Lupi Falchi Capo Mori Lupi Bruni Falchi Leoni Impiegato Rossi Neri Lupi Rossi Lupi Rossi Superiore Mori Lupi Bruni Falchi Falchi Leoni Leoni 24 12 Chiusura transitiva • Non esiste in algebra e calcolo relazionale la • possibilità di esprimere l'interrogazione che calcoli la chiusura transitiva di una relazione qualunque L’operazione si simula con un mumero di join illimitato 25 Esercitazione 5 26 13 1 • Si consideri il seguente schema di base di dati – Aeroporto (Città, Nazione) – Volo (IdVolo, Giorno, OraArrivo, CittàArrivo, CittàPartenza, OraPartenza) – Aereo (Tipo, NumPasseggeri, QuantMerci) • Scrivere una espressione dell’algebra relazionale che elenchi gli identificatori dei voli internazionali in partenza da Pisa con durata inferiore alle 2 ore. 27 Soluzione IdVolo ( NazioneItalia(Aeroporto) CittàArrivo=Città CittàPartenza =‘Pisa’ OraArrivo – OraPartenza) < 2 (Volo)) • Rappresentare lo stesso risultato nel calcolo dei domini. 28 14 • {IdVolo:iv | Volo (IdVolo: iv, Giorno: g, OraArrivo: oa, CittàArrivo: ca, CittàPartenza: cp, OraPartenza: op) Aeroporto (Città: c, Nazione:n) c=ca cp= "Pisa" n ≠"Italia" (oa-op) <2} • Rappresentare lo stesso risultato nel calcolo delle tuple. 29 • Soluzione: • { i.(IdVolo) | i(Volo), a(Aeroporto) | i.CittàArrivo=a.Città i.CittàPartenza = "Pisa“ a.Nazione ≠"Italia" i.OraArrivo-i.OraPartenza +) <2 } 30 15 2 • Si consideri l’espressione algebrica • dove R1, R2 , R3 hanno gli schemi R1(AB), R2(CDE), R3(FGH). Trasformarla in modo da ridurre la dimensione dei risultati intermedi. 31 Soluzione 32 16 3 • Si consideri uno schema relazionale contenente le relazioni R1(ABC), R2(DG), R3(EF) • Formulare in calcolo relazionale su tuple e su domini l'interrogazione realizzata in algebra relazionale dalla seguente espressione: 33 Soluzione • Questa espressione non è esprimibile in calcolo sulle tuple a causa dell'unione tra due diverse tabelle. • In calcolo sui domini l'espressione diventa: 34 17 4 • Si consideri uno schema relazionale contenente le relazioni R1(ABC), R2(DG), R3(EF). Formulare in calcolo relazionale su tuple l'interrogazione realizzata in algebra relazionale dalla seguente espressione: 35 Soluzione • i.(D,G), s(E,F)i(R3), s(R1) s.B=i.F i.G=s.C i.D=s.A 36 18 5 • Si consideri il seguente schema di base di dati Aeroporto (Città, Nazione) Volo (IdVolo, TipoAereo, GiornoSettimana, CittàPartenza, OraPartenza, CittàArrivo, OraArrivo) Aereo (TipoAereo, NumPasseggeri, QuantMerci) • Scrivere un’espressione in algebra relazionale che elenchi per volo e giorno della settimana i collegamenti diretti tra Roma e Bucarest. 37 Soluzione 38 19 Soluzione Lo studente scriva un’espressione in algebra relazionale che elenchi tutte le città con cui è collegata direttamente Pisa sia come città di arrivo che come città di partenza. 39 Soluzione Lo studente definisca la query precedente anche nel calcolo relazionale sulle tuple. 40 20 Soluzione • Non si può fare 41 6 • Dato il seguente schema: – AEROPORTO(Città, Nazione,NumPiste) – VOLO(IdVolo,GiornoSett,CittàPart,OraPart, CittàArr,OraArr,TipoAereo) – AEREO(TipoAereo,NumPasseggeri,QtaMerci) scrivere in algebra relazionale la interrogazione che permette di determinare gli aeroporti italiani che hanno solo voli interni. 42 21 Soluzione 43 7 • Si consideri il seguente insieme di relazioni: • Film(CodFilm, Titolo, CodRegista, Anno) • Produzione (CasaProduzione, Nazionalita, • • • CodFilm, Costo) Attore (CodAttore, Cognome, Nome, Sesso, DataNascita, Nazionalita) Interpretazione (CodFilm, CodAttore, Personaggio) Regista (CodRegista, Cognome, Nome, Sesso, DataNascita, Nazionalita) 44 22 7.a Definire in algebra relazionale una query che produca la lista dei titoli dei film che “Marcello Mastroianni” ha interpretato. 45 Soluzione 46 23 Esprimere la stessa query nel calcolo relazionale dei domini e delle tuple. 47 7.b • Definire in algebra relazionale una query che produca la lista dei titoli dei film che “Marcello Mastroianni” ha interpretato senza “Sofia Loren”. 48 24 Soluzione 49 Esprimere la stessa query nel calcolo dei domini 50 25
© Copyright 2024 Paperzz