BASI DI DATI DOMANDE DI TEORIA
Forme normali
Dipendenza funzionale:
dato uno schema di relazione R(X), una dipendenza funzionale (FD) su R è un vincolo di
integrità espresso nelal forma Y→Z, dove Y e Z sono sottoinsiemi di X; in tal caso si dice che Y
determina funzionalmente Z.
Es:
Persona(CF,città, regione) una dipendenza funzionale su persona è un vincolo di integrità
espresso nella forma FD:città→regione che stabilisce che nelle tuple della relazione persona
alla stessa città deve corrispondere sempre la stessa regione. città determina funzionalmente
regione, la chiave CF determina funzionalmente ogni attributo.
Forme normali:
l’obiettivo è quello di produrre schemi di qualità.
la qualità è data da l’assenza di:
- ridondanza nei dati
- anomalie di aggiornamento dei dati
uno schema (R(T),F) dove F contiene solo dipendenze funzionali del tipo X→A.
Definizione 1NF (modello piatto) Uno schema R(X) è in 1NF se e solo se i valori di tutti i domini
degli attributi A € X sono atomici (semplici).
Definizione 2NF (serve per definire schemi esenti dai problemi derivanti dalla dipendenza
parziale di un attributo dalla chiave) Uno schema (R(T),F) è in 2NF se e solo se ogni attributo
non primo di R dipende completamente da ognuna delle chiavi di R.
(attributo primo: appartiene ad almeno una chiave)
esempio di violazione:
FREQUENZA(MATR, CODCOR, NUMEROORE, CODDOC)
FD:CODCOR→CODDOC
CODDOC non è primo, ma dipende solo da CODCOR, non dall’intera chiave
problemi:
- ridondanza: in tutte le frequenza di un corso di ripete lo stesso docente
- anomalia di modifica: se un corso cambia docente si devono modificare tutte le tuple
relative alla frequenza di quel corso
- anomalia di inserimento: non si può inserire un corso senza inserire almeno uno
studente che frequenta
- anomalia di cancellazione: se vengono cancellate tutte le frequenze relative ad un corso
si perde anche l’informazione sul docente del corso
Definizione 3NF (serve per evitare problemi derivanti da attributi non superchiave che
determinano funzionalmente altri attributi non primi) Uno schema (R(T),F) è in 3NF se e solo per
ogni dipendenza funzionale non banale X→A€F, o X è una superchiave o A è primo.
(superchiave: qualsiasi soprainsieme di una chiave)
esempio di violazione:
CORSO(CODCOR, NOME, CODDOC, CODDIP)
FD:CODDOC→CODDIP
CODDOC→CODDIP che stabilisce che un attributo non superchiave (CODDOC) determina
funzionalmente un altro attributo (CODDIP).
problemi:
- ridondanza: in tutti i corsi di un docente si ripete lo stesso dipartimento
- anomalia di modifica: se un docente cambia dipartimento si devono modificare tutte le
tuple relative ai corsi di quel docente
- anomalia di inserimento: non si può inserire un dipartimento senza inserire almeno un
corso di un suo docente
- anomalia di cancellazione: se vengono cancellati tutti i corsi di un docente si perde
anche l’informazione sul dipartimento del docente.
Teorema 4: se uno schema è in 3NF allora lo è anche in 2NF
Definizione BCNF (tutti gli attributi(anche primi) dipendono funzionalmente solo dalle
superchiavi) Uno schema (R(T),F) è in BCNF se e solo se per ogni dipendenza funzionale non
banale X→A€F, X è una superchiave.
Sintassi di interrogazioni innestate
Un’interrogazione innestata esprime delle condizioni che si basano sul risultato di altre
interrogazioni (esterne) (subquery, o query innestate o query nidificate).
- Operatori Quantificati: ANY/ALL Confronta il risultato della subquery con un attributo
della query esterna. Teoricamente non è corretto poiché si confronta il singolo valore,
con l'insieme di valori restituiti dalla subquery. Tuttavia, il confronto è possibile quando
viene prodotto in runtime un valore atomico.
studenti con anno di corso più basso
SELECT*
FROM S
WHERE ACorso <= ALL (SELECT ACorso FROM S)
- Operatori Esistenziali: (NOT) EXISTS EXISTS ha valore True se solo se l'insieme di
valori restituiti dalla subquery è non vuoto. Al contrario NOT EXISTS ha valore True se e
solo se l'insieme dei valori istituiti dalla subquery è vuoto.
nome degli studenti che non hanno sostenuto l’esame del corso C1
SELECT SNome FROM S WHERE EXISTS (
SELECT * FROM E WHERE E.MATR = S.MATR AND E.CC = ‘C1’)
- Operatori di Set: (NOT) IN valori pres