The forum of the Computer Science students of the University of Pisa

Domande Orale Ghelli

Orale gennaio 2015
Dopo il classico preorale - fatto di qualche domanda teorica e alcune query (una delle quali decisamente tosta) - ha iniziato ad interrogarmi partendo dagli errori dei compitini e del preorale.

Avendo fatto tutto bene ha iniziato chiedendomi di confrontare la complessità degli algoritmi di analisi e di sintesi e mi ha chiesto di fare un'analisi dettagliata al caso pessimo di uno dei due (non sono sicuro di quale fosse, ma credo quello di analisi).

Orale gennaio 2016
Si concentra soprattutto su normalizzazione, dipendenze funzionali e piani di accesso, fortunatamente non ha mai chiesto la primissima parte del corso (cos'è un sistema informativo...)

Le mie domande sono state:
- quand'è che una decomposizione preserva i dati (lo avevo sbagliato allo scritto)
- qual'è la cardinalità dell'insieme risultante dalla group by, e quale dipendenza funzionale introduce la group by
- quali sono i fattori da considerare per fare un piano di accesso per una join fra tre tabelle

A mio avviso è tranquillissimo e disposto a farti ragionare anche se non sai le cose, per fartici arrivare (gli interessa solo che hai capito il ragionamento).
Ad un collega molto bravo prima di me ha chiesto:

- In caso di fallimento è meglio fare la ripartenza in memoria o sul disco? (alla fine non c'è una soluzione, hanno solo elencato pro e contro di entrambi i sistemi)

Orale gennaio 2016
Al mio orale (il 20 gen) non si è concentrato sulla normalizzazione ma sull'ultima parte XD, comunque si, basta studiare la normalizzazione e l'ultima parte (quella sui trigger, piani di accesso e quella parte teorica) per l'orale, per quanto riguarda il preorale praticamente è come il secondo compitino con in aggiunta le query.
Consiglio generale; studiate e andate tranquilli, il ghelli è alla mano e aiuta abbastanza nell'orale, e a parer mio se fai un buon preorale, l'orale può anche andare malino, ma passi sempre con un buon voto, cioè per bocciare all'orale devi fare scena muta.
Ho preso 24, MB e S ai 2 compitini, un preorale con 2/3 query leggermente sbagliate e un orale tra il malino e il discreto, per farvi un idea.

Orale giugno 2017
Mi son seduto con i due compitini superati entrambi senza errori
Preorale scritto, composto da
-5 query SQL
-3 punti sul trovare dipendenze funzionali, spiegare che problemi ha uno schema riportato e perchè una decomposizione riportata è sbagliata
-definizione di dipendenza funzionale, verifica di dipendenze su in istanza
-proprietà delle transazioni, algoritmi e tecniche utilizzate per implementarle

risposte corrette a tutto, orale veloce, mi ha chiesto di ottimizzare maggiormente un dettaglio nella risoluzione del secondo compitino (una sort che poteva essere risparmiata manipolando una sort precedente).
-Quali sono i casi in cui è conveniente usare un sistema NoSQL e quando invece conviene un sistema a modello relazionale
-Ci sono persone che sostengono che sia una buona idea appoggiarsi ad un DBMS tradizionale, e altre che ritengono che invece sia ottimale implementare da se un sistema di gestione direttamente sul file system, ognuna delle due posizioni ha argomenti a favore, parlamene.

Voto finale 30L

Orale giugno 2017
Il pre-orale scritto consisteva in
- 5 Query + 1 Opzionale (una più una meno non ricordo)
- Definizione di Decomposizioni che preservano i dati
- Dare formalmente la definizione del Teorema delle decomposizioni binarie
- Differenza tra protocollo disfare e protocollo non-disfare
- Descrivere sinteticamente le forme BCNF e 3NF
- Parlare delle 4 forme di organizzazione primaria (Seriale, Sequenziale, Hash, B+ Albero)

L'orale è iniziato vedendo i compitini:
domande fatte sul primo compitino:
- rifare la query che avevo sbagliato (e io l'ho sbagliata di nuovo)
- discussione sulle chiavi (ho confuso alcune cose)
domande fatte sul secondo compitino:
- rifare un pezzo dell'algoritmo di analisi che avevo sbagliato (e l'ho azzeccato)
- rifare tutti gli esercizi lasciati in bianco o che avevo sbagliato sulle transazioni
domande fatte sul pre-orale:
- provare a riscrivere meglio il Teorema delle decomposizioni binarie (senza successo)
- provare a correggere la def. delle Decomposizioni che preservano i dati (senza successo)
- ho scritto una boiata sul protocollo Non-disfare (correggendomi con successo)
- Definizione formale di dipendenza funzionale

TL;DR domande su tutto ciò che sbagliate negli scritti e nel pre-appello.

Orale giugno 2017
- 5 query con una opzionale su degli schemi Libro, Autore, AutoreLibro
- Definizioni di BCNF/3NF e Algoritmo analisi/sintesi
- Trovare le dipendenze funzionail in uno schema dato (pazienti, ricoveri e ospedali)
- Applicare analisi e sintesi sullo schema precedente
- Definizione di partizione che preserva i dati
- Caratteristiche e protocolli/algoritmo per le transazioni

Orale veloce iniziato riguardando i compitini e correggendo qualche errore che avevo fatto,
domande aggiuntive:
- Perchè si usa il commit periodico?
- Teorema delle partizioni binarie
- Esempio che dimostra il precedente teorema
- Disfare rallenta l'operazione di ripristino?

Orale giugno 2017
-5 query con una opzionali degli schemi Attore,Film,FilmAttore
particolarissima una query, che richiedeva l'uso di due GroupBy, ma tutto sommato nella norma
-Definizione di Decomposizione che preserva i dati e teorema di decomposizione binaria
-differenza tra disfare non disfare
-differenze tra 3FN E FNBC e descrivere le differenza tra algoritmo di analisi e algoritmo di sintesi
-elencare pro e contro dei vari tipi di Organizzazione dei dati

Mi ha tenuto all'orale 5 minuti,anche meno, il tempo di farmi correggere due errori nelle query e chiedermi di dargli la definizione corretta di non disfare(a cui non sono riuscito a rispondere).

voto finale 27

Orale giugno 2017
- 5 query sullo schema Autori, AutoriLibri, Libri, Editori, di cui l’ultima un po’ più difficile
- Dare la definizione formale di decomposizione che preserva i dati
- Dire se, data la tabella seguente, le decomposizioni R1(AB), R2(BC) e R1(AB), R2(AC) preservano i dati.

A B C
1 12 10
2 12 20
3 13 30

R: Si usa il Th. delle decomposizioni binarie:
la prima non preserva i dati (poiché AB intersecato BC non è superchiave per almeno uno dei due insiemi di attibuti).
La seconda li preserva (stesso ragionamento di sopra).

- Date le seguenti query dire cosa succede ai libri il cui editore non è ‘ABC’ (se vengono portati tutti o in parte nel risultato)
Select l.titolo
From Libri l
Where Not Exists(Select *
From Autorilibri al
Where l.CodLibro = al.CodLibro And l.editore = ‘ABC’
And al.CodAutore <> ‘Albano’)
)
Select l.titolo
From Libri l
Where Not Exists(Select *
From Autorilibri al
Where l.CodLibro = al.CodLibro And l.editore <> ‘ABC’
And al.CodAutore <> ‘Albano’)
)
- Dire cosa vuol dire X determina Y (dare la definizione formale di Dipendenza Funzionale)
- Dire che cosa è un indice e per quali operazioni viene usato
- Descrivere sinteticamente le proprietà delle transazioni (ACID)

Scritto passato con i compitini (O al primo e B al secondo)
Orale velocissimo in cui ti chiede di ragionare sugli errori fatti nei vari compiti e
due domande sulle transazioni (come si implementa l’atomicità e differenza tra disfare e non disfare) poiché avevo lasciato in bianco l’esercizio al compitino.

Voto finale 28

Orale giugno 2018
Pre-orale composto da:
- 5 query;
- Ricavare 5 dipendenze funzionali;
- Dire quando una decomposizione preserva i dati, e dire se le due decomposizioni indicate li preservano;
- Descrivere brevemente il protocollo 2PL e dire quale proprietà delle transazioni implementa;
- Descrivere brevemente la proprietà di atomicità e serializzabilità.

Orale brevissimo, nel quale discute i compitini e il pre-orale; in più ha chiesto il teorema delle decomposizioni binarie e come viene implementato il protocollo non disfare.

Primo compitino passato con B e secondo con O; nel pre-orale ho sbagliato una dipendenza funzionale che mi ha fatto ricalcolare.
Voto finale 30.

Orale giugno 2018
Pre-orale 8/06/2018 :

- 5 query (un paio di queste erano un po’ più articolate);
- Definizione di derivazione e implicazione logica;
- Definizione di chiave esterna;
- Spiegazione del protocollo di lock a due fasi (two-phase-locking) specificando il significato della parola “a due fasi”;
- Scrivere le proprietà di una transazione con le relative descrizioni.

Nell’ultima parte orale il professore guarda i compitini e in caso di risposte sbagliate chiede di correggerle. Dopo aver visto i compitini si passa alla correzione del pre-orale e a qualche domanda più teorica.

Per ulteriori domande all’orale il professore prende spunto dagli errori delle prove scritte.
Nel mio caso avevo dato una definizione poco precisa sulla serializzabiltá e poi mi sono state chieste le funzionalitá dei DBMS.

In ogni caso il professore è molto disponibile ad aiutare e far ragionare lo studente per arrivare alla soluzione corretta.

Presentato con MB al primo compitino, O al secondo e il voto finale 28


Orale giugno 2018
-5 query:
1 con 2 groupby,
1 con doppio universale;
-differenze tra 3FN e BCNF;
-differenze algoritmo sintesi e analisi;
-Tipi di organizzazione dati(seriale, sequenziale, hash, B+albero);
-differenza tra disfare e non disfare;
Definizione indice e disegnare due tabelle con indici che dava lui.
Dopo ha rivisto i compitini e mi ha corretto il preorale chiedendomi di modificare una query sbagliata. Alla fine mi ha chiesto come funziona l'indexnestedloop e come mai è piu efficente il mergesort dell'indexnestedloop.

Sono partito da buono e molto buono ai compitini, passato con 30L.

Molto tranquillo e ti fa pensare parecchio. Se le cose non le sai o passa oltre o tu fa arrivare.
A quelli prima di me ha chiesto le proprietà delle transazioni, dove e perche si crea l'overhead, e altre che non ricordo.
Orale del 01/07/19
Come di consueto Ghelli ha dato da fare un pre-orale scritto.
Pre-orale che conteneva:
- 5 QUERY
- Definizione di DF derivata e di DF implicata logicamente
- Definizione di Transazione e spiegazione delle sue proprietà
- Spiegare il protocollo 2 Phase Lock
- Definizione di Chiave Esterna

Partivo con compitini valutati O e MB.
Dopo aver commentato le query del preorale (sicuramente la parte a cui tiene di più), mi ha chiesto un'approndimento sulla mia risposta alla domanda sulla Chiave Esterna (ero stato abbanstanza superficiale).
Non mi ha fatto ulteriori domande e mi ha dato 30.

In generale consiglio di studiare per bene le Query perchè sbagliare quelle del pre-orale può compromettere l'intero esame.
Primissimi Orali a distanza - I Appello estivo 2019/2020

Prima un pre-orale individuale, il prof invia a ciascuno un documento con circa 4 tabelle e 5 query da realizzare (non da inventare, ma da scrivere in SQL) in 20/30 minuti

Poi inizia l'orale visualizzando il progetto, e facendo domande su eventuali errori, incomprensioni o sugli effetti di eventuali modifiche (una tipica: presa una query, che differenza fa usare o meno la distinct? ).
Finito il progetto mostra un voto orientativo (buono/molto buono/ottimo …) su quella parte e passa alle query svolte nel pre-orale, anche qui commenta e fa qualche domanda abbastanza semplice. Se non le completi tutte, specialmente le più toste non è un gran danno. Alla fine chiede qualcosa sulla teoria.

Se fai bene progetto e query o comunque rispondi bene alle domande relative a quello, le domande sulla teoria sono poche. Altrimenti ci si sofferma di più. In generale comunque non pretende troppe definizioni precise e aiuta ad arrivarci.


Domande fatte in 4 orali:
• Definizione X determina Y
• Spiegare la serializzabilità
• Come scegliere se mettere un attributo oppure una classe con associazione
• Perché un algoritmo in FNBC è ben fatto
• Perché l'algoritmo di analisi è molto costoso
• Vantaggi algoritmo di sintesi

Tiene conto delle risponde che riceve quando commenta gli esercizi, perché vuole capire che uno sappia cosa ha scritto e perché
Orale 12/6/2020
Ero il secondo di un gruppo di due per il progetto a fare l'orale quindi del progetto non mi ha chiesto nulla. Poi abbiamo discusso del preorale. Ho fatto un errore sulla prima query, e una svista sull'ultima. Della parte relazionale ho fatto qualche errore sull'algoritmo di analisi e non ho visto la dipendenza ridondante, il resto andava bene. Poi è passato alle domande teoriche, le tre su cui abbiamo discusso più a lungo erano:
-Perché copia fisica di un libro non va bene come sottoclasse di testo
-Problematiche del non disfare
-Definizione e implementazione dell'atomicità

Poi ne ha fatte altre 2 o 3 credo con risposta più breve, di queste su una nonostante cercasse di indirizzarmi alla risposta non ho saputo rispondere. Riguardo le altre non sono arrivato immediatamente a quello che voleva sentire su tutte ma lui non ti mette ansia e cerca nei limiti del possibile di guidarti. Ci tiene particolarmente alla conoscenza dei termini, a me non lo ha fatto ma spesso chiede definizione di indice, relazione e simili.

Questo era il pretest

1)Si consideri il seguente schema

Ingredienti(IdIn,NomeIn,Famiglia)
IngredientiRicette(IdIn*,IdR*,percentuale)
Ricette(IdR,Nome,IdBirraioAutore*)
RicetteCondiviseBirrai(IdR*,IdB*)
Birrai(IdB, Nome, Soprannome, Nazione)

Si risponda, senza ripetizioni, alle interrogazioni seguenti.

a) Per ogni ingrediente che appare con una percentuale superiore a 0,1 solo in ricette in cui l’IdBirraioAutore è 100, stampare IdIn e NomeIn

SELECT i.IdIn, i.NomeIn
FROM Ingredienti i JOIN IngredientiRicette ir ON ir.IdIn=i.IdIn
WHERE ir.percentuale>0.1 AND NOT EXISTS
(SELECT*
FROM Ricette r
WHERE r.IdR=ir.IdR AND NOT(r.IdBirraioAutore=100) )


b) Per ogni Nazione, dare la Nazione e il numero totale di ricette il cui BirraioAutore è di quella nazione

SELECT b.Nazione COUNT(*) AS NumeroRicette
FROM Birrai b JOIN Ricette r ON b.IdB=r.IdBirraioAutore
GROUP BY Nazione

c) Per ogni ricetta che ha almeno 5 ingredienti della famiglia ‘Luppoli’ ed è condivisa tra almeno 3 birrai, restituire il Nome della ricetta e il numero di ingredienti

SELECT r.Nome, COUNT(*)
FROM Ricette r JOIN IngredientiRicette ir ON r.IdR=ir.IdR
JOIN Ingredienti i ON i.IdIn=ir.IdIn
WHERE r.IdR = ANY
(SELECT ir.IdR
FROM Ingredienti i JOIN IngredientiRicetta ir ON i.IdIn=ir.IdIn
WHERE i.Famiglia=’Luppoli’
GROUP BY idR HAVING COUNT(*)>5)
AND r.IdR = ANY
(SELECT rcp.IdR
FROM RicetteCondiviseBirrai rcb
GROUP BY IdR HAVING COUNT(*)>3)
GROUP BY r.Nome

d) Per ogni birraio che è autore solo di ricette in cui appare almeno un ingrediente della famiglia ‘zuccheri’ con percentuale superiore allo 0,05, riportare Nome e Soprannome

SELECT b.Nome, b.Soprannome
FROM Birrai b
WHERE NOT EXISTS
(SELECT*
FROM Ricette r
WHERE b.IdB=r.IdBirraioAutore AND
NOT EXISTS
(SELECT *
FROM Ingredienti i JOIN IngredientiRicette ir ON i.IdIn=ir.IdIn
WHERE i.Famiglia=’Zuccheri’ AND ir.Percentuale>0,05 AND ir.IdR=r.IdR))

d) Per ogni ricetta che è condivisa da birrai che appartengono tutti alla stessa nazione, riportare il Nome della ricetta e la Nazione a cui appartengono tutti i birrai che la condividono

SELECT r.Nome, MIN(Nazione)
FROM Ricette r JOIN RicetteCondiviseBirrai rcb ON r.IdR=rcb.IdR
JOIN Birrai b ON b.IdB=rcb.IdB
GROUP BY r.IdR, r.Nome
HAVING COUNT( DISTINCT Nazione) = 1



Si consideri il seguente schema

R(ABCDE, { AE->B, AC->B, B->A, B->C, AC->E }
Ci sono dipendenze ridondanti? Se sì, cancellarle
R(ABCDE, { AE->B, AC->B, B->A, B->C, AC->E }
Non ho trovato dipendenze ridondanti
Calcolare una chiave
D non appare in nessuna dipendenza quindi è parte della chiave
B+ =ABCE
B->A, B->C, AC->E
DB+ =ABCDE DB è una chiave

Applicare l’algoritmo di sintesi
R(ABCDE, { AE->B, AC->B, B->A, B->C, AC->E }
Divido in gruppi con lo stesso determinante le DF, e ne ricavo tabelle con chiave corrispondente al determinante a attributi tutti gli attributi contenuti nelle DF reggruppate
A C E B B A C A E B
Elimino gli schemi contenuti in altri
A C E B
ACEB non è superchiave di F, quindi per portare la decomposizione in 3FN devo aggiungere uno schema con attributi una chiave di F
Decomposizione finale: R1(ACEB) R2(DB)
Applicare l’algoritmo di analisi
R(ABCDE, { AE->B, AC->B, B->A, B->C, AC->E }
AE->B non in FNBC
F1(AEB) F2(ACDE) ho perso le DF B->C AC->B
B->A non in FNBC
F1(AB) F3(EB) F2(ACDE)
AC->E non in FNBC
F1(AB) F3(EB) F2(ACE) F4(ACD)


L'orale credo sia durato tra i 20 e i 30 minuti
Progetto sufficiente voto 27
Orale Terzo Appello
Pretest 1h/1h15
1) Dato lo schema relazionale
AUTORI(IdA,NomeAutore, AnnoNascita, Nazione)
AUTORITESTI(IDA*, IDT*)
TESTI(IdT, Titolo, CasaEd, Lingua, AnnoEdizione)
COPIE (IdCopia, IdT*, Posizione, AnnoAcquisto, StatoConservazione, SpesaAcquisto)
PRESTITI( IdPrestito, IdCopia*, DataPrestito, DataRestituzione,CodU*)
UTENTI (CodU, Nome, Telefono, Nazione)
scrivere le interrogazioni SQL che restituiscono le seguenti informazioni, senza ripetizioni
a) Per tutti gli autori che, dopo il 2000, hanno scritto solo testi in lingua italiana,
riportare nomeautore e annonascita

b) Per ogni AnnoEdizione, riportare l’AnnoEdizione e la spesaacquisto relativa
all’insieme di tutte le copie di tutti i testi che hanno quell’AnnoEdizione

c) Indicare in italiano, senza usare termini informatici ma solo facendo riferimento a
utenti e prestiti, cosa ritornano le seguenti interrogazioni (potrebbe essere una
cosa significativa ma anche una cosa banale come l’insieme vuoto).
Indicare se alcune condizioni sono banali, ovvero se possono essere sostituite
con TRUE o FALSE senza cambiare il risultato, e perché. (Ho evidenziato le sole
differenze tra una query e l’altra)
SELECT *
FROM Utenti u LEFT OUTER JOIN Prestiti p ON (u.CodU=p.CodU)
WHERE p.IdPrestito IS NULL

SELECT *
FROM Utenti u LEFT OUTER JOIN Prestiti p ON (u.CodU=p.CodU)
WHERE p.IdPrestito IS NULL AND p.DataPrestito > 1/1/2010

SELECT *
FROM Utenti u JOIN Prestiti p ON (u.CodU=p.CodU)
WHERE p.IdPrestito IS NULL AND p.DataPrestito > 1/1/2010

d) Per ogni utente per il quale tutti i prestiti hanno DataPrestito successiva al
1/1/2020, riportare il Nome, usando l'operatore ‘not exists’

e) Per ogni testo, riportate il titolo del testo e l’IdCopia e la SpesaAcquisto per la
copia che ha avuto la massima SpesaAcquisto (massima tra le copie del testo in
questione)

f) Per ogni autore del quale la biblioteca ha solo testi con almeno una copia con
stato di conservazione ‘buono’, riportare IdA e Nome

2) Si consideri il seguente schema

R(ABCDE, { AD->B, CE->B, AD->C, C->A }
a) Calcolare una chiave
b) Applicare l’algoritmo di sintesi
c) Applicare l’algoritmo di analisi

3) Si consideri la decomposizione R(A,B,C,D) -> R1(A,B,C), R2(C,D).
a) Sotto quali condizioni questa decomposizione preserva i dati?

b) Fate l’esempio di un’istanza di relazione (un insieme di record) per la quale la
decomposizione precedente viola la definizione di preservazione dei dati

Domande orale: copertura canonica, dipendenza funzionale, vantaggi e svantaggi dell'organizzazione sequenziale, indexnestedloop funzionamento e costo.

Professore molto tranquillo, vuole precisione nelle definizioni e possibilmente l'utilizzo delle stesse parole/esempi che ha usato lui a lezione.
Orale Terzo Appello 31/07/2020
L'esame prevede un pretest iniziale sugli aspetti più importanti del corso, più o meno dura un'ora/ora e mezza

Pretest

1) Si consideri lo schema:
Registi(IdRegista, Nome, NazioneRegista)
Film(IdFilm, Titolo, IdRegista*, Anno, CasaProduzione, Incasso)
FilmAttori(IdFilm*, IdAttore*)
Attori(IdAttore, IdAgente*, Nome, Cognome, DataNascita)
Parentele(IdAttore1*, IdAttore2*, gradoParentela)
e si scrivano in SQL le seguenti interrogazioni

a) Per ogni attore che, dopo il 2000, ha fatto almeno un film con incasso maggiore di 1000, restituire IdAttore e Cognome
(Questa l’ho sbagliata dato che era esistenziale, non universale)

Codice: Seleziona tutto

SELECT A.IdAttore, A.Cognome
FROM Attori A
WHERE NOT EXISTS ( SELECT *
                   FROM FilmAttori FA
                   WHERE A.IdAttore=FA.IdAttore AND NOT EXISTS( SELECT*
                                                                 FROM Film F
                                                                 WHERE F.IdFilm=FA.IdFilm AND F.Anno > 2000 AND F.Incasso > 1000))
b) Per ogni attore che, dopo il 2000, ha fatto solo film con incasso maggiore di 1000, restituire IdAttore e Cognome
(Corretta)

Codice: Seleziona tutto

SELECT A.IdAttore, A.Cognome
FROM Attori A
WHERE NOT EXISTS ( SELECT *
		   FROM Film F, FilmAttori FA
	 	   WHERE F.IdFilm=FA.IdFilm AND A.IdAttore=FA.IdAttore AND F.Anno < 2000 AND F.Incasso < 1000)
c) Per ogni NazioneRegista, ritornare la NazioneRegista e il numero totale di film girati dopo il 2000 da un regista di quella NazioneRegista (fate attenzione ai campi che mettere nella Group By)
(Corretta)

Codice: Seleziona tutto

SELECT R.NazioneRegista, COUNT(*)
FROM Registi R JOIN Film F ON  R.IdRegista = F.IdRegista
WHERE F.Anno > 2000 
GROUP BY R.NazioneRegista
d) Per ogni attore tale che tutti i suoi parenti sono nati dopo di lui, riportare l’attore e la DataNascita - per semplicità, assumiamo che quanto l’attore x è parente di y la relazione Parentele contiene sia (x,y,...) che (y,x,...). Usate NOT EXISTS.
(La struttura è corretta, mi sono incasinato con le parentele)

Codice: Seleziona tutto

SELECT A1.IdA, A1.DataNascita
FROM Attori A1
WHERE NOT EXISTS (SELECT*
	 	 FROM PARENTELE P1, Attori A2, PARENTELE P2
	 	 WHERE A1.IdA=P1.IdAttore1 AND A2.IdA=P2.IdAttore2 AND P1.GradoParentela < P2.GradoParentela)
e) Per ogni attore tale che tutti i suoi parenti sono nati dopo di lui, riportare l’attore, la DataNascita, e la data di nascita del più anziano dei suoi parenti (quello con data di nascita minima)
(Stessa cosa della precedente)

Codice: Seleziona tutto

SELECT A1.IdA, A1.DataNascita, MIN(A1.DataNascita)
FROM Attori A1
WHERE NOT EXISTS (SELECT*
	 	 FROM PARENTELE P1, Attori A2, PARENTELE P2
	 	 WHERE A1.IdA=P1.IdAttore1 AND A2.IdA=P2.IdAttore2 AND P1.GradoParentela < P2.GradoParentela)
GROUP BY A1.IdA, A1.DataNascita
f) Considerate le due query seguenti. Specificare, in linguaggio naturale (ovvero parlando solo di film e di attori ma senza termini informatici) cosa ritorna la prima e, nel caso in cui ritorni qualcosa di diverso, anche che cosa ritorna la seconda.

Film(IdFilm, Titolo, IdRegista*, Anno, CasaProduzione, Incasso)
FilmAttori(IdFilm*, IdAttore*)
Attori(IdAttore, IdAgente*, Nome, Cognome, DataNascita)

Codice: Seleziona tutto

SELECT DISTINCT  f.IdFilm, f.Titolo
	FROM Film f
	WHERE NOT EXISTS (SELECT *
		         FROM FilmAttori fa, Attori a
		         WHERE fa.IdFilm = f.IdFilm AND a.IdAttore = fa.IdAttore
			  AND a.DataNascita > 1/1/2000);
a) La query è universale e ritorna solo i film ed i titoli in cui l’attore è nato prima del 1/1/2000
(Corretto)

Codice: Seleziona tutto

SELECT DISTINCT  f.IdFilm, f.Titolo
	FROM Film f, FilmAttori fa
	WHERE fa.IdFilm = f.IdFilm AND 
		NOT EXISTS (SELECT *
		             FROM FilmAttori a
		             WHERE a.IdAttore = fa.IdAttore AND a.DataNascita > 1/1/2000);
b) Questa è esistenziale e ritorna almeno un film ed un titolo in cui l’attore è nato prima del 1/1/2000
(Corretto)

2) Si consideri il seguente schema:
R<(ABCDE), { C->D, AC->B, AD->B, AD->E, E->C }>

Se c’è una dipendenza ridondante la si cancelli (Corretto)
R<(ABCDE), { C->D, AD->B, AD->E, E->C }>

Trovare almeno una chiave (Corretto)
Una possibile chiave è AC ( A compare solo a sinistra e B solo a destra, quindi un sottoinsieme di CDE + A dà sicuramente una chiave)

Si applichi l’algoritmo di sintesi (Corretto)
R1(CD), R2(ADBE), R3(EC) *ADBE è chiave

Si applichi l’algoritmo di analisi (Corretto)
(ABCDE)
C→ D (NO IN BCNF) (Perdo le DF AD→ B, AD→ E)
(ABCE), E→ C (NO IN BCNF)
Il risultato è: (CD), (EC) e (ABE)


3) Si consideri una tabella che riporta attori e film:
AttoriFilm(IdFilm, Titolo, IdRegista*, Anno, IdAttore, Nome, Cognome, CasaProduzione)

Si esprimano i seguenti vincoli come dipendenze funzionali.,

Una stessa casa di produzione non produce mai due film con lo stesso Anno
{CasaProduzione → IdFilm, Anno} (Sbagliato, troppo stringente e irrealistica)

Non accade che lo stesso attore sia in due film diversi con lo stesso titolo
{IdAttore →IdFilm, Titolo } (idem)

Un regista non può girare due film nello stesso anno con due case di produzione diverse
{IdRegista→ CasaProduzione, IdFilm } (idem)


Orale
L'orale è durato circa 30 minuti. Partivo con un progetto valutato Insufficiente/Sufficiente, quindi per i primi 15/20 minuti si è soffermato sugli errori fatti. Le domande che ha fatto successivamente sono state:

- Definizione di Dipendenza funzionale
- Cos'è l'atomicità?
- Definizione di Chiave e come viene usata nelle dipendenze funzionali
- Definizione di implicazione logica

Il Prof.Ghelli è tranquillo e cerca di farti ragionare se non riesci ad arrivare subito al concetto, l'esame è stato valutato con 21.
pretest online del 18 settembre 2020

Allegati

Appello del 04/06/2020 (su Microsoft Teams).

In allegato le query chieste come pre-esame e il progetto finale (il cui codice sorgente LaTeX si trova qui).
Il professore ha fatto alcune domande sullo schema concettuale e logico relazionale del progetto consegnato, chiedendo di motivare alcune scelte come la reificazione o meno di alcune relazioni molti a molti. Ha precisato che non si trattava di trovare una scelta giusta, ma di motivare coerentemente le scelte fatte. Dato che le interrogazioni e i piani di accesso erano corretti, non ha chiesto nulla di quella parte.
Ha chiesto alcune definizioni puntuali e precise (purtroppo non ricordo esattamente cosa, ma erano cose affrontate e semplici come "atomicità", "dipendenza funzionale" e simili); dato che le risposte lo soddisfacevano, non ha fatto altre domande.
Anche quando lə candidatə non sta andando benissimo, il professore non mette a disagio e anzi cerca di tranquillizzare, far riflettere, valorizzare quello che è stato detto e instradare verso la risposta.
Progetto valutato "Ottimo", pretest completo e corretto (moltə a quell'appello non hanno fatto in tempo a finirlo, consiglio di esercitarsi sulle query in velocità), voto 30L.

Allegati