Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
Scarica il documento per vederlo tutto.
vuoi
o PayPal
tutte le volte che vuoi
ESEMPIO:
CORSO DI LAUREA (id-cds, nome-cds, id-cordinatore) Se io scrivo nome-cds=x e id-
cordinatore=y
Tra i due c’è una dipendenza funzionale? Sulla base della conoscenza del dominio, sono certo
che se capita uno capita anche l’altro ossia sono sicuro che c’è una dipendenza funzionale.
Cioè se nome-cds: ingengeria gestionale magistrale e id-cordinatore=Gorgoglione, tutte le
volte che incontro ingegneria gestionale magistrale sono sicuro che troverò in quella tupla
andando su un’altra restrizione esattamente: Gorgoglione.
Questo in generale non si verifica tutte le volte quando prendo un sottoinsieme di attributi.
Cioè se io prendo:
STUDENTE ( matricola, nome, cognome..)
Se x= nome e y= cognome posso dire che x y? NO! Cioè se trovo scritto Arturo non sono
certo che in un’altra tupla trovo il cognome Di Domenico.
La dipendenza funzionale implica il fatto che avvenga sempre.
ATTENZIONE: non c’è una riflessività. In generale può essere che x y ma in generale y
non implica x. L’implicazione è monodimensionale.
ESEMPIO:
7001 è il CAP di bari e provincia.
Bari è 70125? No perché bari è solo 7001. Quindi è un’implicazione su una parte non su
tutto.
Cioè 70125 Bari ma Bari non è implicato da 70125 perché anche 70122 è Bari, anche 70100
è Bari.
(ha detto così ma non è stato chiarissimo)
In generale noi dovremmo trovare la chiusura transitiva del database cioè tutto l’insieme delle
possibili dipendenze funzionali (ma noi faremo una versione più ragionevole di questo.)
ASSIOMI DI AMSTRONG
Esistono degli assiomi di Amstrong che ci servono per trovare nuove dipendenze funzionali a
partire da quelle note.
RIFLESSIVITA’= Se x è incluso dentro y, x implica y.
AUMENTO= Se ho 3 sottoinsiemi di attributi sempre appartenenti alla stessa tabella x, y e z
e si verifica che c’è una dipendenza funzionale tra x e y, allora è vera anche la dipendenza
funzionale x unito a zero e y unito a zero.
TRANSITIVITA’= se ho tre sottoinsiemi di attributi x, y, z, se è vero sia che y dipende da x e
sia z dipende da y, ciò implica che sia vero anche che z dipende da x. Z è transitivamente
dipendente da x.
Noi per costruzione abbiamo sempre delle dipendenze funzionali in una tabella perché
comunque ogni attributo dipende funzionalmente dalla chiave e quindi da un superchiave. Se
così non fosse gli attributi sarebbero liberi e non varrebbe più il concetto di unicità.
Questo ci servirà tra poco.
Ora numeriamo le forme normali.
PRIMA FORMA NORMALE= coincide con il concetto di relazione. Cioè ogni relazione
deve avere degli attributi che siano atomici ossia non ci possono essere attributi composti o
multi valore nella costruzione della relazione. La tabella è fatta da attributi atomici e per il
resto risponde alla definizione di relazione del modello.
SECONDA FORMA NORMALE= una tabella è in seconda forma normale se ogni attributo
non primo della tabella ha una dipendenza funzionale piena dalla chiave primaria.
Attributo primo= attributo che faccia parte di una generica chiave candidata.
Dipendenza funzionale piena= significa che essa è minima. Cioè supposto che questa sia una
dipendenza funzionale y dipende da x, supponiamo che io elimini anche un solo attributo e la
dipendenza funzionale cade.
Quindi diciamo che la dipendenza funzionale è piena se la parte a sinistra è minima cioè non
contiene attributi ridondanti rispetto alla dipendenza funzionale.
ESEMPIO: Ci sono 22 attributi nella parte sinistra e 23 nella parte destra. Da x io posso
togliere un attributo senza che cada la dipendenza funzionale? Se si la dipendenza funzionale
non è piena.
Se no e cioè se la dipendenza funzionale è piena, tutta la parte di x serve tutta insieme per
identificare la parte di y.
ESEMPIO:
ESAME SOSTENUTO (nome-disc, id-disc, voto, data-e, matricola)
La chiave è giusta.
Questa tabella è in prima forma normale? Tecnicamente no a meno che non accettiamo il
concetto di controllo di una parte degli attributi cioè la data è un attributo che nasce composto
quindi è quella che abbiamo definito una violazione controllata. Cioè io lo so che data è un
attributo composto fatto da giorno, mese ed anno ma lo so e lo gestisco come tale.
Quindi a questo punto possiamo definirla come tabella in prima forma normale perché siamo
certi che sapremo controllare la data.
E’ in seconda forma normale? Applichiamo la definizione. Vediamo quali sono gli attributi
primi. Gli attributi primi sono quelli che fanno parte della chiave. Gli attributi non primi
sono: nome-disc e voto. Ora vedo se hanno una dipendenza funzionale piena dalla chiave.
significa: “implicano tutte insieme”)
1 (id-disc, data-e, matricola) VOTO (
Voto ha una dipendenza funzionale piena dalla chiave.
Il fatto che ha una dipendenza funzionale piena dalla chiave vuol dire che se io non so
l’esame non posso sapere il voto, se io non so la matricola non posso sapere il voto e la stessa
cosa per la data dell’esame. Cioè ho bisogno di tutti e tre pienamente affinché io possa sapere
quello che non è parte della chiave cioè il voto.
Nel caso dell’attributo: nome-disc siamo in una situazione diversa. Perché se tolgo id-disc
cade la dipendenza funzionale ma se tolgo matricola il nome della disciplina lo so comunque
perché finché ho id-disc so il nome della disciplina.
Questo vuol dire che questa tabella non è in seconda forma normale. Ora quindi come
decompongo?
Se una tabella non è in seconda forma normale essa può essere decomposta in tabelle in
seconda forma normale cioè in due o più tabelle, individuando la parte della chiave da cui
l’attributo non primo ha una dipendenza funzionale piena e costruendo una nuova tabella in
cui copiamo la parte della chiave che costituisce la parte in dipendenza piena ed estraendo
prima dalla tabella originale e ricopiando nella nuova tabella l’attributo non primo che
violava la seconda forma normale.
RIEPILOGO:
1° PASSO: Ho una tabella, vedo se è in seconda forma normale cioè vedo se gli attributi che
non fanno parte della chiave dipendono interamente dalla chiave o no. Se dipendono
interamente dalla chiave ok festa grande: la tabella è in seconda forma normale. Nel nostro
caso noi abbiamo due attributi non primi di cui uno ha una dipendenza funzionale piena,
l’altro invece ha una dipendenza funzionale non piena cioè basta un pezzo della chiave ad
identificarlo univocamente. Quindi a quel punto dico che la tabella non è in seconda forma
normale.
2° PASSO: La tabella la posso portare in seconda forma normale. Come? Creo una nuova
tabella in cui copio la parte della chiave da cui la dipendenza funzionale era piena. Poi
estraggo l’attributo non primo su cui c’è la dipendenza funzionale. Chiave della nuova tabella
è proprio la parte della chiave che è stata copiata.
Decomponendo ottengo a meno di altri attributi la tabella con i NOMI DISCIPLINE. L’altra
è di nuovo ESAME SOSTENUTO. Per la prima tabella però ho scritto A invece che NOME
DISCIPLINA perché non so logicamente che cos’è Non so darle un nome perché in realtà io
la tabella la sto ottenendo per progressiva decomposizione cioè semplicemente guardano il
fatto che c’è ridondanza, tolgo i pezzi (mantenendoli logicamente correlati.) Prima invece
l’ho costruita sulla logica di come era fatta secondo me la base di dati e quindi ho scritto
questo è il nome della disciplina .
ESAME SOSTENUTO (nome-disc, ID-disc, voto, data-e, matr) A ( ID-disc, nome-disc)
Ora la tabella A è in seconda forma normale perché se una tabella ha una chiave costituita da
un attributo è per forza in seconda forma normale. Non saprei cosa togliere a questa tabella
quindi è in seconda forma normale.
Quindi se la chiave è un attributo la tabella è sicuramente in seconda forma normale.
TERZA FORMA NORMALE= Una tabella è in terza forma normale se dato uno schema
relazionale R, due sottoinsiemi di attributi x ed y, per ogni dipendenza funzionale y dipende
da x: x è superchiave per la relazione R oppure y è attributo primo della relazione R.
ESEMPI:
DISCIPLINA (ID-disc, nome-disc, CFU, ID-prof)
E’ in seconda forma normale. Per scoprire se è in terza dobbiamo guardare le dipendenze
funzionali.
Una volta che ho la chiave è normale che tutti gli attributi dipendono dalla chiave il problema
è se sono le uniche dipendenze. Che dipendono dalla chiave è nella costruzione del concetto
di chiave altrimenti se non dipendessero non ci sarebbe nessun vincolo di unicità.
Per essere quindi in terza forma normale ci devono essere altre dipendenze funzionali oltre
quella banale dalla chiave. Questa è in terza forma normale.
STUDENTE ( matricola, nome, cognome, ID-cds, nome-cds)
E’ in seconda forma normale perché ha un unico attributo.
E’ in terza forma normale? No perché esiste una dipendenza funzionale tra ID-cds (x) e
nome-cds
(y) ma x non è una superchiave e y non è un attributo primo. Quindi non è verificato nessuno
dei due.
Rispetto alla chiave matricola, nome non viola la terza forma normale.
FORMA ALTERNATIVA DELLA TERZA FORMA NORMALE:
Potremo dire anche che una tabella è in terza forma normale se non ci sono dipendenze
transitive sulla chiave. Cioè non posso applicare una forma di transitività per arrivare in
termini di dipendenza funzionale, alla chiave.
Se io guardo:
matricola ID-cds ma è anche vero che ID-cds- nome-cds e quindi è vero
matricola nome-cds
Cioè io arrivo all’ultimo per transitività. Se avviene ciò la tabella non è in terza forma
normale. La dipendenza deve essere diretta e non transitiva affinché la tabella sia in terza
forma normale.
Se aggiungiamo CF, codice fiscale, alla tabella STUDENTE, matricola e CF insieme non
violano la terza forma normale. Se faccio la dipendenza funzionale tra CF e matricola, CF
comunque sarebbe una superchiave.
Abbiamo quindi verificato che la tabella non è in terza forma normale. Come la portiamo in
terza forma normale?
PORTARE LA TABELLA IN TERZA FORMA NORMALE
Individuiamo gli attributi che violano la terza forma normale e creiamo una nuova tabella
nella quale riportiamo l’attributo da cui dipende l’altro attributo ossia quello che viola la terza
forma normale o quello per cui avviene la transitività. Quindi ottengo la tabella