Scaricare la presentazione
La presentazione è in caricamento. Aspetta per favore
PubblicatoDavide Cicci Modificato 11 anni fa
1
Nataliya Rassadko rassadko@disi.unitn.it
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 NULL
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 Transazioni Passi principali
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 T1<ST2 se per azioni A1 di T1 e A2 di T2 A1 occorre prima di A2 A1 e A2 riguardano lo stesso elemento di DB Una delle due azione A1, A2 è write Nodi di graf sono le transazioni dello schema S Tra nodi i e j esiste l’arco se Ti<STj
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) 1 1 2 2 3 3
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<WTM(x), altrimenti operazione è accetata e RTM(x):=ts Operazione write(x, ts) è cessata se ts<WTM(x) o ts<RTM(x), altrimenti operazione è accetata e WTM(x):=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 Request Response Value Request Response Value read(A, st2) OK RTM(A)=st2 read(A, st2) OK RTM(A)=st2 write(B, st2) OK WTM(B)=st2 write(B, st2) OK WTM(B)=st2 write(B, st1) NO killed write(B, st1) NO killed Abort2 Possiamo write con st1
11
Esempio 3 Dire se il programma seguente e’ conflict-serialzable? In caso affermativo, cos’e’ 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 Lo scheduler è legale se
ri(X) occorre dopo sli(X) o xli(X) senza qualsiasi ui(X) interveniente wi(X) occorre dopo xli(x) senza qualsiasi ui(X) interveniente Tutti lock devono occorrere prima di unlock sullo stesso elemento (2PL) Lo scheduler è legale se Dopo xli(X) non può occorrere xlj(X) o slj(X) senza ui(X) interveniente Dopo sli(X) non può occorrere xlj(X) senza ui(X) interveniente
15
Esercizi su FD ABCD: A->BC, B->C, C->D ABCD B->C BCD AB
BCNF Dependency-preserving? Se non è dependency preserving, trovare 3NF ABCD B->C BCD AB C->D CD BC
16
Dependency Preserving Decomposition
A->BC CD BC AB B->C C->D B->C C->D (F1F2F3)+=F+ (CB)+=BCD≠(ABC)+
17
Non si trova tramite chiusura
3NF: Passo 1 Non si trova tramite chiusura Trovare calnonical cover di FD Tutti FD: nonredundant repeat Use the union rule to replace dependencies 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)}
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 ACD∩B= B non è extraneous F’ = (F – {A → BC}) ∪ {A →(BC – C)}={C->D} ∪{A->B} A+=AB AB∩C= 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 Relazioni Cardinalità
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 B C 1 NULL 2 3 5 (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)
25
ESERCIZIO Trovare i modelli dei prodotti IBM che sono Notebook o
Desktop. Fornitori(CodiceFornitore,Nome,Indirizzo,Città) Prodotti (CodiceProdotto,Nome,Marca,Modello) Catalogo (CodiceFornitore,CodiceProdotto,Costo) SELECT Modello FROM Prodotti WHERE Marca = 'IBM‘ AND ( Nome = ‘Notebook‘ OR Nome = ‘Desktop’ )
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 A B C 1 2 NULL 5 4 6 (4) (5) (2,5,4)
27
ESERCIZIO Visualizzare i titoli dei film in cui hanno recitato attori di sesso femminile per cui non si conosce l’anno 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, l’ammontare 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 quell’albergo. Clienti(Cod_cli,Cognome,Nome,Citta,Salario,Eta) Prenot(Cod_cli,Cod_alb,Camera,Giorni,Acconto) Alberghi(Cod_alb,Nome,Citta) 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;
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,OraArr,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 1993. Regista(Nome, DataNascita, Nazionalita`) Film(Titolo, NomeRegista, Anno) Proiezione(Nomecinema, Nomefilm, Citta`) 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`)
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. Giornalista (NOME,DataN,Citta) Articolo (TITOLO,DATA,Autore,Genere,Giornale,Pagina) Giornale (TESTATA,Direttore,CittaSede) 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)
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))
Presentazioni simili
© 2024 SlidePlayer.it Inc.
All rights reserved.