La presentazione è in caricamento. Aspetta per favore

La presentazione è in caricamento. Aspetta per favore

SQL: Lezione 9 Nataliya Rassadko

Presentazioni simili


Presentazione sul tema: "SQL: Lezione 9 Nataliya Rassadko"— Transcript della presentazione:

1 SQL: Lezione 9 Nataliya Rassadko

2 Agenda Esami degli anni precedenti Schema Esempi di compiti per esami

3 Le domande tipiche 1/2 SQL + algebra relazionale + datalog JOIN Subquery Raggruppamento e operatori aggregati Query recorsivi NULL Operatori aggregati Normalizzazione a partire da functional dependencies BCNF, dependency-preserving decomposizione, 3NF Con spiegazioni ER Correggere gli errori Disegnare dalla descrizione in linguaggio naturale Scrivere SQL espressioni in DDL

4 Le domande tipiche 2/2 JDBC Passi principali Transazioni Identificare se conflict-serializable Protocollo 2PL Timestamp-based protocollo

5 Esempi0 1 Decidere se ogni scheduler è serializzabile o meno. r2(B); r1(A);w3(A); r3(C);w3(B);w2(A); r1(A); r2(C) r2(B); r1(A);w3(A); r3(C);w3(B);w2(A); r2(C)

6 Come testare conflict-serializability? Graf di precedenza T 1 < S T 2 se per azioni A 1 di T 1 e A 2 di T 2 A 1 occorre prima di A 2 A 1 e A 2 riguardano lo stesso elemento di DB Una delle due azione A 1, A 2 è write Nodi di graf sono le transazioni dello schema S Tra nodi i e j esiste larco se T i < S T j

7 Soluzione per Esempio 1: Graf di Precedenza S1: r2(B); r1(A);w3(A); r3(C);w3(B);w2(A); r1(A); r2(C) S2: r2(B); r1(A);w3(A); r3(C);w3(B);w2(A); r2(C)

8 Esempio 2 Descrivere che fa un scheduler con timestamps con le seguente operazioni: S1: st1; st2; r2(A);w2(B);w1(B) S2: st1; st2; r2(A);w2(B);w1(B);Abort2

9 Timestamp-based scheduler Ogni transazione è associata con timestamp (inizio della transazione) Ogni oggeto è associato con due valori RTM, STM Operazione read(x, ts) è cessata se ts

10 Soluzione per Esempio 2 S1: st1; st2; r2(A);w2(B);w1(B) S2: st1; st2; r2(A);w2(B);w1(B);Abort2 RequestResponseValue read(A, st2) OK RTM(A)=st2 write(B, st2) OK WTM(B)=st2 write(B, st1) NO killed RequestResponseValue read(A, st2) OK RTM(A)=st2 write(B, st2) OK WTM(B)=st2 write(B, st1) NO killed Abort2 Possiamo write con st1

11 Esempio 3 Dire se il programma seguente e conflict-serialzable? In caso affermativo, cose una esecuzione seriale (serial execution) equivalente? In caso negativo, perche no? r4(C); r1(A); r2(B); w2(A); w3(B); w3(A); w4(B); w2(C) r2(C); r1(A); w3(B); w4(A); w1(C); w2(B); w3(A); w2(A)

12 Esempio 4 Descrivere il comportamento di un timestamp-based scheduler con la sequenza di operazioni: st1; r1(A); st2; w2(B); r2(A); w1(B)

13 Esempio 4 Inserire dei locks (shared, exclusive o increment locks) nelle seguenti transizioni in conformita al 2PL. Descrivere come un programmatore trattera il programma risultate. r3(C); r1(A); inc2(B); w3(C); w1(B); w2(B) Risposta: xl3(C);r3(C);sl1(A);r1(A);u1(A);xl2(B);inc2(B);w3(C);u3(C);xl1 (B);w1(B);u1(B);w2(B);u2(B)

14 Ricordiamo La transazione è consistente se r i (X) occorre dopo sl i (X) o xl i (X) senza qualsiasi u i (X) interveniente w i (X) occorre dopo xl i (x) senza qualsiasi u i (X) interveniente Tutti lock devono occorrere prima di unlock sullo stesso elemento (2PL) Lo scheduler è legale se Dopo xl i (X) non può occorrere xl j (X) o sl j (X) senza u i (X) interveniente Dopo sl i (X) non può occorrere xl j (X) senza u i (X) interveniente

15 Esercizi su FD ABCD: A->BC, B->C, C->D BCNF Dependency-preserving? Se non è dependency preserving, trovare 3NF ABCD BCD AB CD BC B->C C->D

16 Dependency Preserving Decomposition CDBCAB C->DB->C A->BC B->C C->D (F1 F2 F3) + =F + (C B) + =BCD(ABC) +

17 3NF: Passo 1 Trovare calnonical cover di FD Tutti FD: nonredundant ver.pdf ver.pdf repeat Use the union rule to replace dependenci es of the form X->B1 and X->B2 with X- >B1B2 Find a functional dependency X->Y with an extraneous attribute and delete it from X->Y until F does not change. A is extraneous in X? ({X} – A) + A use F to calculate closure A is extraneous in Y? X + A use F = (F – {X Y}) {X (Y – A)} Non si trova tramite chiusura

18 Canonical cover nel nostro caso A->BC, B->C, C->D B->C possiamo escludere subito perchè redundant Rimangono A->BC, C->D B o C possono essere extraneous A->BC, C->D F = (F – {A BC}) {A (BC – B)}={C->D} {A->C} A+=ACD ACDB= B non è extraneous F = (F – {A BC}) {A (BC – C)}={C->D} {A->B} A+=AB ABC= C non è extraneous

19 3NF: Passi 2-4 Creare relazione per ogni FD in canonical cover Eliminare la nuove arelazione se è subset di una altra relazione Se nessuna relazione contiene la chiave di R, creare la relazione con attributi di chiave di R Determinare le chiavi di R

20 Nel nostro caso A->BC, C->D R1=ABC - la chiave della relazione iniziale R2=CD 3NF!

21 Altri esercizi su FD ABCDE: AB->C, C->E, E->A ABCDEF: A->B, CE->D, CD->A, BC->D, AE->F ABCDEF: A->F, BC->F, AE->D, F->E

22 ER Esempio Disegnare un modello Entity-relationship per il seguente esempio. Fare delle assunzione ragionevoli per chiavi, cardinalita delle relazione, attributi addizionali, etc. e rendere i presupposti espliciti. Il modello e il database di una linea aerea. Contiene: 1. Passengers (names, addresses, phone numbers etc) 2. Flights (flight number, origin, destination, etc) 3. Planes (manufacturer, capacity, model number) 4. Pilots (name, salary etc) Le relazioni dovrebbero includere informazioni su 1. Chi e prenotato su quale volo 2. Chi e il pilota per ciascun volo 3. Quale aereo e assegnato a quale volo

23 Lo schema di creazione Entità con attributi 1. Passengers (names, addresses, phone numbers etc) 2. Flights (flight number, origin, destination, date, time, duration etc) 3. Planes (manufacturer, capacity, model number) 4. Pilots (name, salary etc) Relazioni 1. Chi e prenotato su quale volo: Passenger-Flight 2. Chi e il pilota per ciascun volo: Pilot-Flight 3. Quale aereo e assegnato a quale volo: Flight-Plane Cardinalità Passenger-Flight: n-1 Pilot-Flight: n-1 Flight-Plane: 1-1 Chiavi Integrità referenziale Vincoli su dominio Entità debole?

24 NULL Esempio (a) SELECT B FROM R WHERE A>C OR A=C (b) SELECT MIN(A),MIN(B),MIN(C) FROM R (c) SELECT MIN(A),AVG(B),MAX(B) ABC 1NULL

25 ESERCIZIO Trovare i modelli dei prodotti IBM che sono Notebook o Desktop. SELECT Modello FROM Prodotti WHERE Marca = 'IBM AND ( Nome = Notebook OR Nome = Desktop ) Fornitori(CodiceFornitore,Nome,Indirizzo,Città) Prodotti (CodiceProdotto,Nome,Marca,Modello) Catalogo (CodiceFornitore,CodiceProdotto,Costo)

26 ESERCIZIO Considerare il seguente schema SELECT B FROM R where A=C SELECT * FROM A SELECT * FROM C SELECT MIN(C), MAX(A),AVG(B) FROM R ABC 12NULL (4) 2.(5) 3.(2,5,4)

27 ESERCIZIO Visualizzare i titoli dei film in cui hanno recitato attori di sesso femminile per cui non si conosce lanno di nascita. Movie(title,year,length,inColor,studioName,producerC#) StarsIn(movieTitle,movieYear,starName) MovieStar(name,address,gender,birthdate) MovieExec(name,address,cert#,netWorth) Studio(name,address,presC#) SELECT title FROM Movie,StarsIn WHERE movieTitle=title AND movieYear=year AND starName in (SELECT name FROM MovieStar WHERE gender=F and birthdate is null)

28 ESERCIZIO Estrarre per ogni cliente le tasse che devono essere pagate per tutte le moto possedute, ipotizzando che se vi sono più proprietari per una moto, lammontare delle tasse viene equamente suddiviso tra i proprietari. (Usare le viste) Moto(Targa,Cilindrata,Marca,Nazione,Tasse) Proprietario(Nome,Targa) Create view TasseInd(Targa,Tassa) as SELECT Targa,Tasse/count(*) FROM Moto join Proprietario on Moto.Targa= Proprietario.Targa GROUP BY Targa Select Nome,SUM(Tassa) FROM Proprietario join TasseInd on Proprietario.Targa=TasseInd.Targa GROUP BY Nome

29 ESERCIZIO Estrarre i nomi dei proprietari di solo moto giapponesi di almeno due marche differenti Moto(Targa,Cilindrata,Marca,Nazione,Tasse) Proprietario(Nome,Targa) SELECT Nome FROM Proprietario JOIN Moto ON Proprietario.Targa=Moto.Targa WHERE Nome NOT IN (SELECT Nome FROM Proprietario JOIN Moto ON Proprietario.Targa=Moto.Targa WHERE Nazione<>Giappone) GROUP BY Nome HAVING COUNT(distinct Marca)>=2

30 ESERCIZIO Estrarre la città in cui si trova lo stadio in cui la squadra italiana gioca più partite. STADIO(Nome,Città,Capienza) INCONTRO(NomeStadio,Data,Ora,Squadra1,Squadra2) NAZIONALE(Paese,Continente,Categoria) CREATE VIEW StadiItalia(NomeStaio,NroPartite) as SELECT NomeStadio,count(*) FROM Incontro WHERE Squadra1=Italia or Squadra2=Italia group by NomeStadio SELECT Città FROM Stadio WHERE NomeStaio in (SELECT NomeStadio FROM StadiItalia WHERE NroPartite=( SELECT max(NroPartite) FROM StadiItalia)

31 ESERCIZIO Calcolare per ogni dipartimento e per ogni anno il numero di progetti già terminati a cui ha partecipato, escludendo i dipartimenti che hanno partecipato in totale a meno di 3 progetti. DIPARTIMENTI(IDDIP,UNIVERSITA,STATO) PARTECIPANO(IDDIPA,IDPROG) PROGETTI(IDPROG,TITOLO,ANNOINIZIO,ANNOFINE) SELECT id_dip, anno_in, COUNT(*) AS num_progetti FROM Progetti Pr JOIN Partecipano Pa ON Pr.id_prog=Pa.id_prog WHERE anno_fi IS NOT NULL AND id_dip NOT IN (SELECT id_dip FROM Partecipano GROUP BY id_dip HAVING COUNT(*) <3) GROUP BY id_dip, anno_in

32 ESERCIZIO Elencare le università che non hanno mai partecipato a progetti già terminati. DIPARTIMENTI(IDDIP,UNIVERSITA,STATO) PARTECIPANO(IDDIPA,IDPROG) PROGETTI(IDPROG,TITOLO,ANNOINIZIO,ANNOFINE) SELECT DISTINCT universita FROM Dipartimenti WHERE universita NOT IN (SELECT universita FROM Dipartimenti D JOIN Partecipano Pa ON D.id_dip = Pa.id_dip JOIN Progetti Pr ON Pa.id_prog=Pr.id_prog WHERE anno_fi IS NOT NULL)

33 ESERCIZIO Per ogni albergo ritornare cognome, nome e città dei clienti che hanno versato un acconto superiore alla media di quellalbergo. Create View acconti as SELECT cod_alb, AVG(acconto) AS media FROM prenot GROUP BY cod_alb; SELECT alberghi.nome,clienti.cognome,clienti.nome, clienti.citta FROM clienti, acconti, prenot, alberghi WHERE clienti.cod_cli=prenot.cod_cli AND prenot.cod_alb=acconti.cod_alb AND prenot.cod_alb=alberghi.cod_alb AND prenot.acconto >= acconti.media; Clienti(Cod_cli,Cognome,Nome,Citta,Salario,Eta) Prenot(Cod_cli,Cod_alb,Camera,Giorni,Acconto) Alberghi(Cod_alb,Nome,Citta)

34 ESERCIZIO Per ogni albergo ritornare cognome, nome e città dei clienti che hanno versato un acconto superiore alla media; Clienti(Cod_cli,Cognome,Nome,Citta,Salario,Eta) Prenot(Cod_cli,Cod_alb,Camera,Giorni,Acconto) Alberghi(Cod_alb,Nome,Citta) A: SELECT AVG(acconto) FROM prenot; B: SELECT alberghi.nome, clienti.cognome, clienti.nome, clienti.citta FROM clienti, prenot, alberghi WHERE clienti.cod_cli = prenot.cod_cli AND prenot.cod_alb = alberghi.cod_alb AND prenot.acconto>A;

35 ESERCIZIO Trovare le materie su cui sono stati fatti almeno 6 appelli in un anno. Studenti(Matricola,Nome,Provincia,AnnoNascita) Esami(Materia,Matricola,NumeroAppello,Voto,Anno) SELECT Anno,Materia FROM ( SELECT DISTINCT Anno,Materia,NumeroAppello FROM Esami) GROUP BY Anno,Materia HAVING COUNT(*)>5

36 ESERCIZIO Determinare per ogni aeroporto italiano il massimo numero di passeggeri che possono arrivare direttamente dalla Francia giovedì. Aeroporto (Città,Nazione,NumPiste) Volo(IdVolo,GiornoSett,CittaPart,OraPart,CittaArr,OraA rr,TipoAereo) Aereo(TipoAereo,NumPasseggeri,QtMerci) SELECT CittaArr,sum(numpassegg) FROM VOLO,AEREO WHERE cittaArr in (select citta from AEREOPORTO where nazione=`Italia`) and CittaPart in (select citta from AEREOPORTO where nazione=`Francia`) and giorno sett=`giovedi` and VOLO.TipoAereo=AEREO.TipoAereo group by CittaArr

37 ESERCIZIO Selezionare le Nazionalita`dei registi che hanno diretto dei film nel 1992 ma non hanno diretto film nel SELECT DISTINCT nazionalita` FROM Regista WHERE Nome in (SELECT nomeRegista FROM Film WHERE Anno=`1992`) and Nome not in (SELECT NomeRegista FROM Film WHERE Anno=`1993`) Regista(Nome, DataNascita, Nazionalita`) Film(Titolo, NomeRegista, Anno) Proiezione(Nomecinema, Nomefilm, Citta`)

38 ESERCIZIO Determinare il nome e la data di nascita dei giornalisti che non hanno mai lavorato per un giornale della propria citta, ma che hanno scritto articoli per altri giornali. SELECT Nome FROM Giornalista AS G JOIN Articolo ON (Autore=Nome) JOIN Giornale ON (Giornale=Testata) WHERE NOME NOT IN (SELECT Autore FROM Articolo JOIN Giornale ON (Giornale=Testata) WHERE G.Citta=CittaSede) Giornalista (NOME,DataN,Citta) Articolo (TITOLO,DATA,Autore,Genere,Giornale,Pagina) Giornale (TESTATA,Direttore,CittaSede)

39 ESERCIZIO Determinare i giornalisti che hanno scritto su un giornale piu` articoli del direttore. Giornalista (NOME,DataN,Citta) Articolo (TITOLO,DATA,Autore,Genere,Giornale,Pagina) Giornale (TESTATA,Direttore,CittaSede) SELECT Nome FROM (Giornalista JOIN Articolo ON (Nome=Autore) JOIN Giornale ON (Testata=Giornale) WHERE Direttore <>Nome GROUP BY Giornale,Autore HAVING COUNT(*)> (SELECT COUNT(*) FROM Giornale JOIN Articolo AS A1 ON (Testata=Giornale) WHERE Direttore=Autore AND A.Giornale=A1.Giornale)

40 ESERCIZIO Definire una vista che restituisce per ogni giornale il genere di articoli maggiormente pubblicati. Giornalista (NOME,DataN,Citta) Articolo (TITOLO,DATA,Autore,Genere,Giornale,Pagina) Giornale (TESTATA,Direttore,CittaSede) CREATE VIEW GeneriGiornale (Genere,Giornale,Numero) S SELECT Genere,Giornale,COUNT(*) FROM Articolo GROUP BY Genere,Giornale CREATE view GenerePref (Genere,Pref) AS SELECT Giornale,Genere FROM GeneriGiornale AS G WHERE Numero=(select max(Numero) FROM GeneriGiornale WHERE G.Giornale=Giornale))


Scaricare ppt "SQL: Lezione 9 Nataliya Rassadko"

Presentazioni simili


Annunci Google