Introduzione
La terza forma normale è importante perché aiuta a ridurre la ridondanza dei dati e a migliorare la coerenza dei dati. Inoltre, essa facilita la gestione e la manutenzione dei dati, poiché riduce il numero di modifiche che devono essere apportate in caso di aggiornamenti o cancellazioni di dati.
Definizione
Dati uno schema di relazione e un insieme di dipendenze funzionali su ,
è in 3NF se:
Dove almeno una di queste due condizioni è verificata:
appartiene a una chiave (è primo)
contiene una chiave (è una super chiave)
oss: È sbagliato scrivere perché poi non sapremmo come valutare dipendenze del tipo ovvero con 2 o più attributi a destra, infatti in una dipendenza del tipo possiamo scomporla in e .
Esempio 1
Le chiavi sono e
Valutiamo le dipendenze in :
- va bene ( è una super-chiave)
Ora non possiamo valutare perché il determinante non è super-chiave e per valutare il dipendente (parte destra) deve essere un singleton. Quindi dobbiamo dividere in e dipendenze che non sono in ma sono in .
Valutiamo le dipendenze in :
- va bene ( fa parte di una chiave quindi è detto primo)
- non rispetta la 3NF perché non è super-chiave e non è primo.
Quindi lo schema non è in 3NF.
Esempio 2
Abbiamo tre chiavi , e .
Valutiamo le dipendenze in :
- va bene ( è super-chiave)
- va bene ( è super-chiave e inoltre è primo)
Ora non possiamo valutare perché il determinante non è super-chiave e per valutare il dipendente (parte destra) deve essere un singleton. Quindi dobbiamo dividere in e dipendenze che non sono in ma sono in .
Valutiamo le dipendenze in :
- va bene ( è primo)
- va bene ( è primo)
Quindi lo schema è in 3NF.
Nota importante
Non è sufficiente considerare solo le dipendenze funzionali in , poiché non possiamo gestire le dipendenze con più attributi al dipendente (parte a destra). Invece, dobbiamo considerare le dipendenze funzionali in , che includono anche le dipendenze derivate.
Definizione Alternativa
Siano R uno schema di relazione e F un insieme di dipendenze funzionali su R. Uno schema R è in 3NF se e solo se non esistono né dipendenze parziali né transitive in
R.Dimostrazione di equivalenza con definizione originale
![]()
![]()
Dipendenze Parziali e Transitive
Dipendenze Parziali
Siano uno schema di relazione e un insieme di dipendenze funzionali su .
è una dipendenza parziale se:
- è super chiave (contenuto in una chiave)
- non è primo (non è contenuto da una chiave)
Ovvero: un attributo di una relazione dipende solo da una parte della chiave primaria.
Esempio
Dove:
- Le chiavi sono
MatreC#.- Ad ogni numero di matricola (
Matr) corrisponde un solo cognome (Cogn)Quindi è possibile determinare la dipendenza
Matr C#Cogne questa dipendenza è detta parziale.Per capirlo meglio abbiamo che l’attributo cognome
Cogndipende parzialmente dalla chiaveMatr C#ovvero non serve la chiave intera per determinarlo ma soltanto una parte della chiave, infattiMatrè una parte dalla chiave e determinaCogn.
Dipendenze Transitive
Siano uno schema di relazione e un insieme di dipendenze funzionali su .
è una dipendenza transitiva su se:
- non è primo
- Per ogni chiave di abbiamo che non è contenuto propriamente in e
Ovvero: un attributo di una relazione dipende transitivamente da un’altra parte della relazione che a sua volta dipende dalla chiave primaria.
Esempio
Dove:
- La chiave è
MatreCF.- Ad un numero di matricola corrisponde un solo comune di nascita
MatrCom.- Un comune si trova in una sola provincia
ComProv.Quindi possiamo dire che
MatrProvovvero che ad una matricola corrisponde una sola provincia.In questo caso, la dipendenza transitiva è
ComProv, poiché fa sì che l’attributo provincia dipenda transitivamente dalla chiave attraverso la dipendenzaMatrComeComProv.La dipendenza
ComProvè detta dipendenza transitiva perché “causa” la transitività, ovvero fa sì che l’attributo provincia dipenda da un’altra parte della relazione che a sua volta dipende dalla chiave primaria.
