09 BD Normalizzazione 2024 25
09 BD Normalizzazione 2024 25
Normalizzazione
Riccardo Guidotti
2
Teoria Normalizzazione
• La teoria della normalizzazione si occupa di definire criteri formali per giudicare
l’equivalenza di schemi e la qualità di tali schemi, e di definire algoritmi per
trasformare uno schema in un altro equivalente ma privo di anomalie.
• Teoria della normalizzazione (in breve) studia cosa sono le anomalie e come
eliminarle.
• Due metodi per produrre un schema relazionale:
a) Partire da un buon schema a oggetti e tradurlo
b) Partire da uno schema relazionale fatto da altri e modificarlo o completarlo
• Teoria della normalizzazione particolarmente utile se si usa il metodo (b),
moderatamente utile anche quando si usa il metodo (a).
3
Le Anomalie
4
Esempio Biblioteca
• Per mostrare i problemi che si possono presentare nella definizione di schemi
relazionali supponiamo di avere un’unica relazione con i dati relativi ai prestiti
di una biblioteca
Biblioteca(NomeUtente, Residenza, Telefono, NumeroLibro, Autore, Titolo, DataPrestito)
5
Schemi con Anomalie
• Anomalie
• Ridondanze
• Potenziali Inconsistenze
• Anomalie nelle Inserzioni
• Anomalie nelle Eliminazioni
6
Esempio Anomalie
• Ripetizione informazione: ogni volta che un utente prende in prestito
un libro, vengono ripetuti la sua residenza e il suo numero telefonico.
• Impossibilità di rappresentare certi fatti: Informazioni relative agli
utenti della biblioteca possono essere memorizzate solo quando
questi hanno un libro in prestito.
7
Esempio Anomalie
• Anche utilizzare più relazioni potrebbe portare a degli inconvenienti
• Decomposizione
Utenti(NomeUtente, Residenza, Telefono)
Prestiti(NumeroLibro, Autore, Titolo, DataPrestito, Telefono*)
8
Esempio Anomalie
9
Esempio Anomalie
10
Esempio Anomalie
11
Esempio Anomalie
• La giunzione fra Utenti e
Prestiti contiene più
ennuple della relazione
originale Biblioteca
• Il motivo di questa perdita
è la scelta di rappresentare
l’associazione fra Utenti e
Prestiti usando come
chiave esterna il numero di
telefono che non identifica
univocamente gli utenti.
12
Esempio Anomalie
• Decomposizione senza perdita di informazione
Biblioteca(NomeUtente, Residenza, Telefono, NumeroLibro, Autore,
Titolo, DataPrestito)
• Decomposizione
Utenti(NomeUtente, Residenza, Telefono)
Prestiti(NumeroLibro, Autore, Titolo, Data, NomeUtente*)
15
Notazione
• A, B,C, A1, A2 ecc. indicano singoli attributi
• T, X, Y, X1 ecc. indicano insiemi di attributi
• XY è un’abbreviazione per X ∪ Y, AB è un’abbreviazione per {A, B},
A1A2 …An è un’abbreviazione per {A1,A2, …, An}, e XA è
un’abbreviazione per X ∪ {A}.
• R(T) è uno schema di relazione, r una sua generica istanza e t è
un’ennupla di r.
• Se X ⊆ T, allora t[X] indica l’ennupla ottenuta da t considerando solo
gli attributi in X.
16
Dipendenze Funzionali
17
Dipendenze Funzionali
• Per formalizzare la nozione di schema senza anomalie, occorre una
descrizione formale della semantica dei fatti rappresentati in uno
schema relazionale, ovvero della dipendenza tra dati.
• Istanza valida di R: è una nozione semantica, che dipende da ciò che
sappiamo del dominio del discorso (non estensionale, ovvero non
deducibile da alcune istanze dello schema).
• Differenza tra estensionale e intensionale
• l’aspetto estensionale si riferisce al contenuto dei dati
• l’aspetto intensionale si riferisce al significato dei dati
Esempio:
Persone (CodiceFiscale, Cognome, Nome, DataNascita)
19
Dipendenza Funzionale: Definizione Formale
• Dato uno schema R(T) e X, Y T, una dipendenza funzionale (DF) è un
vincolo su R del tipo X → Y, i.e., X determina (funzionalmente) Y o Y è
determinato da X, se per ogni istanza valida di R un valore di X determina in
modo univoco un valore di Y:
• r istanza valida di R.
• t1, t2r. se t1[X] = t2[X] allora t1[Y] = t2[Y]
20
Esempio: Dipendenze Funzionali
• r istanza valida di R.
t1, t2r. se t1[X] = t2[X] allora t1[Y] = t2[Y]
• Questa tabella soddisfa la dipendenza funzionale
Matricola → Cognome
Matricola Cognome
1 Rossi
2 Verdi
3 Rossi
4 Viola
21
Esiste la DF
Dipartimento→Indirizzo?
Esempio: Dipendenze Funzionali
r istanza valida di R.
t1, t2r. se t1[X] = t2[X] allora t1[Y] = t2[Y]
CodCo Titolo CFU Anno Semestre CodDoc Dipartimento Indirizzo
Esiste la DF
Esiste la DF
Titolo,Anno →Semestre?
Titolo →Semestre? 22
Aspetti Significativi Dipendenze Funzionali
• Sono definite solo all’interno di uno schema di relazione, e non
possono esistere, quindi, fra attributi appartenenti a relazioni diverse
• Sono proprietà intensionali, legate al significato dei fatti che si
rappresentano; non è quindi possibile inferirle dall’osservazione di
alcune istanze della relazione.
23
Vincoli di Chiave
• Informalmente: Una chiave è un insieme di attributi che identificano le ennuple
di una relazione
24
Superchiave, Chiave, Chiave Primaria
• Una superchiave di uno schema di relazione è un insieme X di attributi
tale che, in ogni istanza valida dello schema di relazione, i valori degli
attributi in X individuano univocamente un’ennupla, ovvero tale che in
nessuna istanza valida dello schema di relazione possono esistere due
ennuple diverse che coincidono su tutti gli attributi in X.
• Una chiave di uno schema di relazione è una superchiave minimale, nel
senso che se si elimina un attributo, i rimanenti non formano più una
superchiave. Un attributo che appartiene ad una chiave è chiamato
attributo primo.
• La chiave primaria di uno schema di relazione è una delle chiavi, e di
solito viene preferita quella con il minor numero di attributi.
25
Dipendenze Funzionali vs Chiave – Esempio
• r istanza valida di R.
t1, t2r. se t1[X] = t2[X] allora t1[Y] = t2[Y]
Esempio:
StudentiEdEsami(Matricola, Nome, Provincia, AnnoNascita, Materia, Voto)
• Matricola è una chiave?
• Materia è una chiave?
• Matricola → Nome, Provincia, AnnoNascita
• Esempio:
Studenti ( Matricola, Nome, Provincia, AnnoNascita)
26
Dipendenza Funzionale: Definizione
• Dato uno schema R(T) e X, Y T, una dipendenza funzionale (DF) è un vincolo su
R del tipo X → Y:
• r istanza valida di R
• t1, t2r. se t1[X] = t2[X] allora t1[Y] = t2[Y]
• Si dice che
• un’istanza r0 di R soddisfa la DF X → Y (r0 |= X → Y)
• se la proprietà vale per r0: t1, t2 r0. se t1[X] = t2[X] allora t1[Y] = t2[Y]
• un’istanza r0 di R soddisfa un insieme F di DF
• se per ogni X → Y F, vale r0 |= X → Y :
• r0 |= X → Y sse t1, t2 r0. se t1[X] = t2[X] allora t1[Y] = t2[Y]
27
Esempio
Impiegato Stipendio Progetto Bilancio Funzione
Rossi 20 Marte 2 tecnico
Verdi 35 Giove 15 progettista
Verdi 35 Venere 15 progettista
Neri 55 Venere 15 direttore
Neri 55 Giove 15 consulente
Neri 55 Marte 2 consulente
Mori 48 Marte 2 direttore
Mori 48 Venere 15 progettista
Bianchi 48 Venere 15 progettista
Bianchi 48 Giove 15 direttore
Proprietà:
• Ogni impiegato ha un solo stipendio (anche se partecipa a più progetti)
• Ogni progetto ha un bilancio
• Ogni impiegato in ciascun progetto ha una sola funzione (anche se può
avere funzioni diverse in progetti diversi)
DF rispettate nell’esempio
• Impiegato → Stipendio
• Progetto → Bilancio
• Impiegato Progetto → Funzione
31
Dipendenze Funzionali Utilizzo
• Per specificare il significato dei fatti rappresentati si usano le
dipendenze funzionali, che vengono utilizzate per verificare
l’eventuale presenza di anomalie nel progetto e, se questo è il caso,
per normalizzare lo schema.
• Data la loro importanza per la progettazione di uno schema
relazionale, le dipendenze funzionali si considerano facenti parte
dello schema di una relazione, che d’ora in poi si indicherà, in
generale, con R(T, F), con F insieme di dipendenze funzionali su T.
32
Dipendenze Derivate
• Dato lo schema R(T, F) possiamo vedere come le sue istanze non
soddisfano solo le DF espresse in F ma anche altre derivabili da esse.
• Esempio dato R(T, F={X →Y, X →Z}) con X, Y, Z ⊆ T e W ⊆ X
• Allora valgono anche le DF X →W, X →YZ.
• La prima è una dipendenza banale poiché se due ennuple coincidono
su X allora coincideranno a maggior ragione su W che è un suo
sottoinsieme.
• Per la seconda, se t1[X]=t2[X], poiché t1 e t2 soddisfano le DF in F,
allora si avrà t1[Y]=t2[Y] e t1[Z]=t2[Z], e quindi t1[YZ]=t2[YZ]
33
Dipendenze Derivate
• L’implicazione di un insieme di dipendenze da altre viene definito come
• Dato R(T) e dato F, diciamo che F |= X → Y (F implica logicamente X →
Y), se ogni istanza r di R(T) che soddisfa F soddisfa anche X → Y .
34
Assiomatizzazione delle Dipendenze Funzionali
• Sia RI un insieme di Regole di Inferenze per F
• Indichiamo con F |- X → Y il fatto che X → Y sia derivabile da F
usando RI
• L’insieme RI è corretto se F |- X → Y implica F |= X → Y
• ovvero, se X → Y è derivabile da F allora questo implica che ogni istanza che
soddisfa F soddisfa anche X → Y
• L’insieme RI è completo se F |= X → Y implica F |- X → Y
• ovvero, se ogni istanza che soddisfa F soddisfa anche X → Y allora questo
implica che X → Y è derivabile da F
35
Dipendenze Funzionali e Chiavi
• Le DF sono una proprietà semantica, cioè dipendono dai fatti
rappresentati e non da come gli attributi sono combinati in schemi di
relazione.
• Si parla di DF complete quando X → Y e per ogni W X, non vale W→ Y
• Dato R(T), con X T, se X è una superchiave per R, allora X determina ogni
altro attributo della relazione: X → T
• Dato R(T), con X T, se X è una chiave, allora X → T è una DF completa
36
Regole di Inferenza
• Gli assiomi di Armstrong (1974) sono il più noto insieme corretto e
completo di regole di inferenza per le DF
• Ovvero come derivare DF implicate logicamente da F, usando un
insieme di regole di inferenza.
• Riflessività: se Y X, allora X → Y
• Arricchimento : se X → Y, Z T, allora XZ → YZ
• Transitività : se X → Y, Y → Z, allora X → Z
37
Derivazione
• Una derivazione di f da F è una sequenza finita f1, …, fm di dipendenze
dove fm = f e ogni fi è un elemento di F oppure è ottenuta dalle
precedenti dipendenze delle derivazione f1, …, fi-1 usando regole di
inferenza.
• Una sottosequenza f1, …, fk per una derivazione f1, …, fm è anch’essa
una derivazione, quindi F |- fk per ogni k = 1, …, m.
38
Altre Regole Derivazione
• Unione: {X → Y, X → Z} |- X → YZ
• Decomposizione: {X → YZ} |- X → Y
• Indebolimento: {X → Y} |- XZ → Y
• Identità: {} |- X → X
39
Dimostrazione Unione
• Riflessività: se Y X, allora X → Y
• Arricchimento: se X → Y, Z T, allora XZ → YZ
• Transitività: se X → Y, Y → Z, allora X → Z
• {X → Y, X → Z} |– X → YZ
1. X → Y (per ipotesi)
2. X → XY (per arricchimento da 1)
3. X → Z (per ipotesi)
4. XY → YZ (per arricchimento da 3)
5. X → YZ (per transitività da 2, 4)
40
Dimostrazione Decomposizione
• Riflessività: se Y X, allora X → Y
• Arricchimento: se X → Y, Z T, allora XZ → YZ
• Transitività: se X → Y, Y → Z, allora X → Z
• {X → YZ} |- X → Y
1. X → YZ (per ipotesi)
2. YZ → Y (per riflessività da Y YZ)
3. X → Y (per transitività da 1, 2)
41
Dimostrazione Indebolimento
• Riflessività: se Y X, allora X → Y
• Arricchimento: se X → Y, Z T, allora XZ → YZ
• Transitività: se X → Y, Y → Z, allora X → Z
• {X → Y} |- XZ → Y
1. X → Y (per ipotesi)
2. XZ → X (per riflessività da X XZ)
3. X → Y (per transitività da 2, 1)
42
Correttezza a Completezza Assiomi di Armstrong
• Teorema: Gli assiomi di Armstrong sono corretti e completi.
• Attraverso gli assiomi di Armstrong, si può mostrare l’equivalenza della
nozione di implicazione logica (|=) e di quella di derivazione (|-):
• Se una dipendenza è derivabile con gli assiomi di Armstrong allora è anche
implicata logicamente (correttezza degli assiomi), e viceversa se una
dipendenza è implicata logicamente allora è anche derivabile dagli assiomi
(completezza degli assiomi).
• Correttezza degli assiomi:
f, F |– f F |= f
• Completezza degli assiomi:
f, F |= f F |– f
43
Chiusura di un Insieme
• Definizione: Dato un insieme F di DF, la chiusura di F, denotata con F+
è F+ = { X → Y | F |- X → Y}
• Ovvero, la chiusura F+ di F è l’insieme di DF X → Y derivabili da F.
44
Chiusura di un Insieme
• Definizione: Dato un insieme F di DF, la chiusura di F, denotata con F+
è F+ = { X → Y | F |- X → Y}
• Ovvero, la chiusura F+ di F è l’insieme di DF X → Y derivabili da F.
45
Chiusura di un Insieme
• Definizione: Dato un insieme F di DF, la chiusura di F, denotata con F+ è F+ = {
X → Y | F |- X → Y}
• Definizione: Dato R(T, F), e X T, la chiusura di X rispetto ad F, denotata con
XF+, (o X+, se F è chiaro dal contesto) è
XF+ = {Ai T | F |- X → Ai }
• Problema dell’implicazione: decidere se una DF appartiene a F+, V → W F+?
• La sua risoluzione con l’algoritmo banale (di generare F+ applicando ad F
ripetutamente gli assiomi di Armstrong) ha una complessità esponenziale
rispetto al numero di attributi dello schema.
46
Chiusura di un Insieme
• Un algoritmo più efficiente per risolvere il problema dell’implicazione
senza calcolare la chiusura di F scaturisce dal seguente teorema.
• Teorema: F |- X → Y Y XF+.
• Ovvero, la DF X → Y è derivabile da F se e solo se Y è sottoinsieme
della chiusura di X rispetto a F
47
a numero attributi in T
p numero dipendenze funzionali in F
48
Esempio Chiusura Lenta
• F = {DB → E, B → C, A → B}, trovare (AD)+:
X+ = ADBE
X+ = ADBEC
49
Algoritmo della Chiusura Lenta
50
Terminazione dell’Algoritmo della Chiusura Lenta
51
Definizioni di Chiavi tramite Dipendenze e Chiusura
52
Esempio: Superchiave?
• F = {DB → E, B → C, A → B}, trovare (AD)+: E per verificare
se è una
X+ = AD chiave?
X+ = ADB
X+ = ADBE
X+ = ADBEC
• AD è superchiave?
• Si poiché contiene tutti gli attributi
• A è superchiave?
• A→B, A→BC, si ferma quindi non è superchiave
• ABD è superchiave?
• (ABD)+ è analoga a (AD)+, perché ABD è più grande di AD, quindi è superchiave
• ABC è superchiave?
• ABC stesso, quindi non è superchiave
54
Esempio: Chiave?
Impiegato Stipendio Progetto Bilancio Funzione
55
Problemi Chiavi e Attributi Primi
• Il problema di trovare tutte le chiavi di una relazione richiede un
algoritmo di complessità esponenziale nel caso peggiore.
• Il problema di controllare se un attributo è primo è NP-completo.
56
Come Trovare Tutte le Chiavi
L’algoritmo per trovare tutte le chiavi si basa su due proprietà:
1. Se un attributo A di T non appare a destra di alcuna dipendenza in F, allora A
appartiene ad ogni chiave di R
2. Se un attributo A di T appare a destra di qualche dipendenza in F, ma non
appare a sinistra di alcuna dipendenza non banale, allora A non appartiene ad
alcuna chiave.
• Sia X l’insieme degli attributi che non appaiono a destra di alcuna dipendenza in F.
Da 1. segue che se X+ = T, allora X è una chiave di R ed è anche l’unica possibile.
• Altrimenti, occorre aggiungere a X altri attributi. Per 2. basta aggiungere gli
attributi W di T che appaiono a destra di qualche dipendenza e a sinistra di
qualche altra, uno alla volta evitando di aggiungere quelli che sono già in X + o
quelli che producono un X’ che contiene una chiave già trovata.
58
Esempio Trova Chiavi 1
• Sia R(T, F) con T = {A, B, C, D, E, G} ed F = {BC → AD, D → E, CG → B}.
• Proprietà 1: C e G non appaiono a destra delle dipendenze, quindi
devono far parte di ogni chiave.
• Poiché CG+ = T, allora CG è l’unica chiave di R.
59
Esempio Trova Chiavi 1
• Sia R(T, F) con T = {A, B, C, D, E, G} ed F = {BC → AD, D → E, CG → B}.
• Proprietà 1: C e G non appaiono a destra delle dipendenze, quindi
devono far parte di ogni chiave.
• Poiché CG+ = T, allora CG è l’unica chiave di R.
60
Esempio Trova Chiavi 2
• Sia R(T, F) con T = {A, B, C, D, E, G} ed F = {AB → C, BC → AD, D → E, CG →B}.
• Proprietà 1: G non appare a destra delle dipendenze, quindi deve far parte di ogni
chiave.
• G+ = G
• Aggiungendo un attributo di W = {A, B, C, D} (non considero E perché appare solo
a destra) a G si trova
• GA+ = GA ≠ T
• GB+ = GB ≠ T
• GC+ = GCB+ = GCBADE+ = T, GC è una chiave di T
• GD+ = GB ≠ T
61
Esempio Trova Chiavi 2
• Sia R(T, F) con T = {A, B, C, D, E, G} ed F = {AB → C, BC → AD, D → E, CG →B}.
• Si aggiunge a GA, GB e GD un altro attributo di W = {A, B, C, D} escluso GC.
• GAB+ = T, GAB è chiave
• GAD+ = GADE ≠ T
• GBD+ = GBDE ≠ T
• Si prova ad aggiunge a GAD e GBD un altro attributo di W = {A, B, C, D} esclusi GC
e GAB ma non esiste.
• Quindi si conclude che non esistono altre chiavi.
62
Algoritmo Trova Tutte le Chiavi
63
Copertura di un Insieme di Dipendenze
• Definizione: Due insiemi di DF, F e G, sullo schema R sono
equivalenti, i.e., F G, sse F+ = G+. Se F G, allora F è una copertura
di G (e G una copertura di F).
Esempio:
Studenti(matricola, CF, Cognome, Nome, Anno)
65
Copertura di un Insieme di DF – Attributo Estraneo
67
Copertura di un Insieme di DF – Dipendenza Ridondante
68
Esempio - Dipendenze Ridondanti
• F = {B → C, B → A, C → A}
• B → A è ridondante
• Poiché possiamo dedurla da B → C e C → A
69
Esercizio
F1={A → B, AB → C, A → C}
F2={A → B, AB → C}
F3={A → B, A → C}
70
Esercizio - Soluzione
F3={A → B, A → C}
• F3 non presenta attributi estranei
F2={A → B, AB → C}
• F2 non è ridondante ma presenta un attributo estraneo, perché B può essere
eliminato dal primo membro della seconda dipendenza (A+=A ; A+=AB ; A+=ABC)
(quindi equivale a F3)
F1={A → B, AB → C, A → C}
• F1 è ridondante, perché {A → B, AB → C} implica A → C (quindi equivale a F2)
71
Copertura di un Insieme di DF – Copertura Canonica
72
Esistenza Della Copertura Canonica
• Teorema: Per ogni insieme di dipendenze F esiste una copertura
canonica.
Si sostituisce l’insieme dato
con quello equivalente che ha
• Algoritmo per calcolare una copertura canonica: tutti i secondi membri
costituiti da singoli attributi
• Trasformare le dipendenze nella forma X → A (dipendenze atomiche)
• Eliminare gli attributi estranei
• Eliminare le dipendenze ridondanti
74
Esempio Esistenza Copertura Canonica
Impiegato (Matricola, Cognome, Grado, Retribuzione, Dipartimento, Supervisore, Progetto, Anzianità)
• {M → RSDG, MS → CD, G → R, D →S, S → D, MPD → AM}
75
Esempio Esistenza Copertura Canonica
Impiegato (Matricola, Cognome, Grado, Retribuzione, Dipartimento, Supervisore, Progetto, Anzianità)
• {M → R, M → S , M → D, M → G, M → C, M → D, G → R, D →S, S → D, MP → A, MP → M}
3. Eliminazione DF ridondanti:
• M → R (deriva da M → G e G → R)
• M → S (deriva da M → D e D →S)
• M → D (perché già M → D)
• MP → M (perché M compare a primo membro)
Risultato:
• {M → G, M → C, M → D, G → R, D →S, S → D, MP → A}
76
Decomposizione di Schemi
77
Decomposizione di Schemi
• L’approccio da seguire per eliminare anomalie da uno schema mal
definito, è quello di decomporlo in schemi più piccoli che godono di
particolari proprietà (forme normali), ma sono in qualche senso
equivalenti allo schema originale.
78
Esempio di Decomposizione
Impiegato Stipendio Progetto Bilancio Funzione
Rossi 20 Marte 2 tecnico
Verdi 35 Giove 15 progettista
Verdi 35 Venere 15 progettista
Neri 55 Venere 15 direttore
Neri 55 Giove 15 consulente Impiegato Progetto → Funzione
Neri 55 Marte 2 consulente
Mori 48 Marte 2 direttore Impiegato Progetto Funzione
Mori 48 Venere 15 progettista
Bianchi 48 Venere 15 progettista
Rossi Marte tecnico
Bianchi 48 Giove 15 direttore Verdi Giove progettista
Verdi Venere progettista
Impiegato → Stipendio Neri Venere direttore
Impiegato Stipendio Neri Giove consulente
Progetto → Bilancio
Rossi 20 Neri Marte consulente
Progetto Bilancio Mori Marte direttore
Verdi 35
Neri 55 Marte 2 Mori Venere progettista
Mori 48 Giove 15 Bianchi Venere progettista
Bianchi 48 Venere 15 Bianchi Giove direttore
79
Esempio di Decomposizione 2
La soluzione non è tuttavia sempre così semplice, bisogna fare anche altre
considerazioni; ad esempio, operando come prima:
84
Conservazione dei Dati
• Definizione: ρ = {R1(T1), …, Rk(Tk)} è una decomposizione di uno schema R(T) che
preserva i dati sse per ogni istanza valida r di R:
r = (πT1 r) ⋈ (πT2 r) ⋈ … ⋈ (πTk r)
• Ovvero, per una decomposizione che preserva i dati, ogni istanza valida r della
relazione di partenza deve essere uguale alla giunzione naturale della sua
proiezione sui Ti
• Dalla definizione di giunzione naturale scaturisce il seguente risultato:
• Teorema: Se ρ = {R1(T1), …, Rk(Tk)} è una decomposizione di R(T), allora per ogni
istanza r di R: Questo teorema chiarisce che cosa sia una perdita di
87
Esempio di Decomposizione Con Perdita Informazione
Perdita di informazione!
88
Esempio di Decomposizione Con Perdita Informazione
89
Decomposizione Senza Perdite
• Uno schema R(X) si decompone senza perdite dei dati negli schemi
R1(X1) ed R2(X2) se, per ogni possibile istanza r di R(X), il join naturale
delle proiezioni di r su X1 ed X2 produce la tabella di partenza, cioè
non contiene ennuple spurie.
p X1 (r) p X 2 (r) = r
• Teorema (non formale): se l’insieme degli attributi comuni alle due
relazioni (X1 ∩ X2) è chiave per almeno una delle due relazioni
decomposte allora la decomposizione è senza perdita.
90
Decomposizione Con Perdite (Sede Non è chiave)
Impiegato Progetto Sede Impiegato → Sede
Rossi Marte Roma Progetto → Sede
Verdi Giove Milano
Verdi Venere Milano
Neri Saturno Milano
Neri Venere Milano
92
Decomposizione Senza Perdite
• Anche se una decomposizione è senza perdite, può comunque
presentare dei problemi di conservazione delle dipendenze …
• Ad esempio, Impiegato=(Impiegato, Sede)∩(Impiegato, Progetto)
94
Preservazione delle Dipendenze
• Una decomposizione preserva le dipendenze se ciascuna delle
dipendenze funzionali dello schema originario coinvolge attributi che
compaiono tutti insieme in uno degli schemi decomposti.
95
Proiezione delle Dipendenze
• Definizione Dato lo schema R(T, F), e T1 T, la proiezione di F su T1 è
πT1 (F) = {X → Y F+ | X Y T1}
• Esempio
Sia R(A, B, C) e F={A→ B, B→ C, C→ A}.
πAB (F) {A → B, B → A}
πAC (F) {A → C, C → A}
97
Esempio
• Telefoni(Prefisso, Numero, Località, Abbonato, Via)
F={P N → L A V, L → P}
• Si consideri la decomposizione:
ρ = {Tel<{N, L, A, V}, F1>, Pref<{L, P}, F2>} con
• F1 = {L N → A V}
• F2 = {L → P}
• Preserva dati ma non le dipendenze: P N → L non è deducibile da F1 e F2.
Localita Numero Abbonato Via Localita Prefisso
Pisa 506070 Rossi Via Roma Pisa 050
Calci 506070 Verdi Lungarno Calci 050
98
Qualità delle Decomposizioni
• Una decomposizione dovrebbe sempre soddisfare le seguenti
proprietà:
• decomposizione senza perdita, che garantisce la ricostruzione delle
informazioni originarie senza generazione di tuple spurie
• conservazione delle dipendenze, che garantisce il mantenimento dei
vincoli di integrità (di dipendenza funzionale) originari
99
Forme Normali
100
Forme Normali
• Con l’aiuto dei concetti introdotti siamo in grado di affrontare
l’obiettivo principale della normalizzazione: passaggio da schemi
“anomali” a schemi “ben fatti”.
• Questa teoria, nata dai lavori di Codd, insieme al modello relazionale,
si è via via affinata, sia negli strumenti che negli obiettivi perseguiti.
• Durante il suo sviluppo, sono state individuate diverse categorie di
“anomalie” dovute a cattiva progettazione, e questo ha portato alla
definizione di diverse forme normali, intese come proprietà che
devono essere soddisfatte dalle dipendenze fra attributi di schemi
“ben fatti”.
101
Forme Normali
• Una forma normale è una proprietà di una base di dati relazionale
che ne garantisce la “qualità”, cioè l'assenza di determinati difetti
102
Forme Normali
103
BCNF - Forma Normale di Boyce e Codd
• Una relazione r è in BCNF se, per ogni dipendenza funzionale (non banale) X → Y
definita su di essa, X contiene una chiave K di r (ovvero X è una superchiave)
• La forma normale richiede che i concetti in una relazione siano omogenei (solo
proprietà direttamente associate alla chiave)
106
L’Algoritmo di Analisi
• R(T, F) è decomposta in: R1(X, Y) e R2(X, Z) e su di esse si ripete il procedimento; esponenziale.
• Input: R(T, F) con F copertura canonica
• Output: ρ= {R1, R2, Rm} decomposizione in BCNF che preserva i dati
ρ = {R1(T1, F1)}
while esiste in ρ una Ri(Ti, Fi) non in BCNF per la DF X → A
do
n=n+1 # incrementa contatore relazioni
Ta = X+ # chiusura di X
Fa = πTa (Fi) # proiezione DF rispetto a Ta
Tb = Ti – X+ + X # rimozione da attributi non in X ma nella sua chiusura attenzione: errore nel libro
Fb = πTb (Fi) # proiezione DF rispetto a Tb
ρ = ρ – Ri + { Ri<Ta, Fa>, Rn< Tb, Fb > } # rimuove R non BCNF per X → A e e inserisce quelle corrette
end
107
Proprietà Algoritmo di Analisi
• Preserva i dati, ma non necessariamente le dipendenze
Decompongono
• R1(D,I); R2(CF,N, D)
• F1 = { D → I } F2={ CF → N D }
108
Proprietà Algoritmo di Analisi
• F1 = { C → Q } F2={ }
Dato che non perdo DF,
posso fare la proiezione
approssimata su F
109
Proprietà Algoritmo di Analisi
• Telefoni (Prefisso, Numero, Località, Abbonato, Via)
F = { P N → L A V, L → P }
• Ad esempio:
• Pisa → 050
• Milano → 02
110
Proprietà Algoritmo di Analisi
• Decomposizione con perdita di dipendenze:
• Cosa vuole dire “non preserva le dipendenze”? Posso inserire due numeri
• R1 = {(Pisa, 050); (Calci, 050)} telefonici (senza prefisso)
con comuni differenti che
• R2 = {(Pisa, 506070, Rossi, Piave), hanno lo stesso prefisso?
(Calci, 506070, Bianchi, Isonzo)}
111
Esercizio I
• Si consideri il seguente schema relazionale
R( ABCDE, F= { CE → A, D → E, CB → E, CE → B } )
• Applicare l’algoritmo di analisi e dire se dati e dipendenze sono stati
preservati.
112
Esercizio I
R ( ABCDE, F= { CE → A, D → E, CB → E, CE → B } )
114
Esercizio II
R( ABCDE, F= { AC→D, BD→A, BD→E, A→B } )
• Consideriamo AC→D. AC+=ACDBE (AC è chiave)
• Consideriamo BD→A. BD+=BDAE (BD non è chiave), per cui decomponiamo:
R1(BDAE) (gli attributi di BD +),
R2(BDC) (tutti gli altri attribuiti (C) e la chiave esterna BD)
• Proiettiamo le dipendenze (approssimate su F):
R1 ( BDAE, { BD → A, BD → E, A → B } ) (proiezione approx. in F)
R2 ( BDC, { } ) (proiezione approx in F) AC→D si perde!
• In R1: BD+=BDAE (BD è chiave), ma A → B viola la BCNF (A +=AB), per cui decomponiamo
:
R3 (AB, {A→B}),
R4(ADE, { } ) BD → A e BD → E si perdono!
• La decomposizione è quindi { R2(BDC, { }), R3(AB, { A→B }), R4(ADE, { }) } che preserva i 115
Algoritmi per la Normalizzazione
• Quando ci sono DF che coinvolgono tutti gli attributi ma non in BCNF, nessuna
decomposizione può preservare le dipendenze.
• Occorre quindi ricorrere ad una forma normale indebolita.
• Quando si hanno diverse DF è difficile ragionare sullo schema, ed è quindi
altrettanto difficile operare manualmente buone decomposizioni
• La terza forma normale (3NF) è un target di normalizzazione che consente di
ottenere automaticamente:
• decomposizioni senza perdita
• decomposizioni che preservano tutte le dipendenze
116
3NF - Terza Forma Normale
• Definizione: R(T, F) è in 3FN se per ogni X→ A F+, con A X, X è una
superchiave o A è primo.
• La 3NF ammette una dipendenza non banale e non-da-chiave se gli
attributi a destra sono primi.
• La BCNF non ammette mai nessuna dipendenza non banale e non-da-
chiave.
• Teorema: R(T, F) è in 3FN se per ogni X → A F non banale, allora X
è una superchiave, oppure A è primo (ovvero è contenuto in almeno
una chiave).
117
3NF - Terza Forma Normale
• Ogni schema R(T, F) ammette sempre una decomposizione che
preserva i dati, preserva le dipendenze, ed è in 3NF.
• Tale decomposizione può essere ottenuta in tempo polinomiale.
• Lo svantaggio della 3NF sta nel fatto che, essendo meno restrittiva
della BCNF, accetta anche schemi che presentano delle anomalie e
quindi certifica meno lo qualità dello schema ottenuto.
• In particolare, la 3NF tollera ridondanze sui dati.
• Es. per ogni occorrenza di un dirigente viene ripetuta la sua sede
118
Esempi
• Non sono in 3FN (e quindi, neppure in BCNF)
• Docenti(CodiceFiscale, Nome, Dipartimento, Indirizzo)
• Impiegati(Codice, Qualifica, NomeFiglio)
• Sono in 3FN, ma non in BCNF:
• Telefoni(Prefisso, Numero, Località, Abbonato, Via)
• F = {P N → L A V, L → P}
• K = {PN, LN}
• Esami(Matricola, Telefono, Materia, Voto)
• Matricola Materia → Voto
• Matricola → Telefono
• Telefono → Matricola
• Chiavi: Matricola Materia, Telefono Materia
119
Normalizzazione di Schemi in 3NF
• L’interesse per la 3NF deriva dal fatto che esiste un algoritmo
semplice ed efficiente che permette di decomporre qualunque
schema in un insieme di schemi di relazione in 3NF preservando dati
e dipendenze.
• Idea: dato un insieme di attributi T ed una copertura canonica G, si
partiziona G in gruppi Gi tali che tutte le dipendenze in ogni Gi hanno
la stessa parte sinistra.
• Quindi, da ogni Gi, si definisce uno schema di relazione composto da
tutti gli attributi che vi appaiono, la cui chiave, detta chiave
sintetizzata, è la parte sinistra comune.
120
Algoritmo di Sintesi: Versione Base
• Input: Un insieme R di attributi e un insieme F di dipendenze su R.
• Output: Una decomposizione ρ = {Si}i=1..n di R tale che preservi dati e dipendenze
e ogni Si sia in 3NF, rispetto alle proiezioni di F su Si.
begin
Passo 1. Trova una copertura canonica G di F e poni ρ = { }.
Passo 2. Sostituisci in G ogni insieme X → A1, … , X → Ah di dipendenze con lo
stesso determinante, con la dipendenza X → A1 … Ah.
Passo 3. Per ogni dipendenza X → Y in G, metti uno schema con attributi XY in ρ.
Passo 4. Elimina ogni schema di ρ contenuto in un altro schema di ρ.
Passo 5. Se la decomposizione non contiene alcuno schema i cui attributi
costituiscano una superchiave per R, aggiungi ad essa lo schema con attributi W,
con W una chiave di R.
end
121
Algoritmo di Sintesi – Esempio Passo 1
• Dato R di attributi ed un insieme di dipendenze F, l’algoritmo di sintesi di schemi
in terza forma normale procede come segue:
Impiegato (Matricola, Cognome, Grado, Retribuzione, Dipartimento, Supervisore,
Progetto, Anzianità)
{M → RSDG, MS → CD, G → R, D →S, S → D, MPD → AM}
Passo 1. Costruire una copertura canonica G di F.
122
Algoritmo di Sintesi – Esempio Passo 2
G={M → D, M → G, M → C, G → R, D → S, S → D, MP → A}
• Passo 2. Decomporre G nei sottoinsiemi G(1), G(2), …, G(n), tali che ad ogni
sottoinsieme appartengano dipendenze con gli stessi lati sinistri (facoltativo)
• G(1)={M → D, M → G, M → C}
• G(2)={G → R}
• G(3)={D → S}
• G(4)={S → D}
• G(5)={MP → A}
123
Algoritmo di Sintesi – Esempio Passo 2
G={M → D, M → G, M → C, G → R, D → S, S → D, MP → A}
• Passo 2. Sostituisci in G ogni insieme X → A1, …, X → Ah di dipendenze con lo
stesso determinante, con la dipendenza X → A1… Ah.
124
Algoritmo di Sintesi – Esempio Passo 3
• Passo 3. Trasformare ciascun G(i) in una relazione R(i) con gli attributi contenuti in
ciascuna dipendenza. Il lato sinistro diventa la chiave della relazione.
125
Algoritmo di Sintesi - Esempio Passo 4
• Passo 4. Si eliminano schemi contenuti in altri. Se allo step precedente due o più
lati sinistri delle dipendenze si implicano a vicenda, si fondono i relativi insiemi.
126
Algoritmo di Sintesi - Esempio Passo 5
• Passo 5. Se nessuna relazione R(i) così ottenuta contiene una (super)chiave K di
R(U), inserire una nuova relazione R(n+1) contenente gli attributi della chiave.
• Impiegato (Matricola, Cognome, Grado, Retribuzione, Dipartimento, Supervisore,
Progetto, Anzianità)
F={M → RSDG, MS → CD, G → R, D → S, S → D, MPD → AM}
º
G={M → D, M → G, M → C, G → R, D → S, S → D, MP → A}
• La chiave è costituita da: (MP).
• Dallo Step 4: R(1)(MDGC) R(2)(GR) R(3)(SD) R(5)(MPA)
• R(5)(MPA) contiene la chiave quindi non c’è necessità di aggiungere altre relazioni!
• R(1)(MDGC) R(2)(GR) R(3)(SD) R(5)(MPA) è la 3NF
127
Dipendenze Multivalore
128
Dipendenze Multivalore
• La BCNF risolve le anomalie connesse alle
dipendenze funzionali.
• In una base di dati relazionali, d’altra parte,
possono essere presenti altre anomalie non
imputabili alle dipendenze funzionali.
• La relazione dell’esempio è in BCNF, infatti non
vi sono dipendenze funzionali non banali, ma è
presente una notevole ridondanza.
• Una ridondanza di questo tipo si verifica tutte
le volte che in una relazione si rappresentano
proprietà multivalore indipendenti come filgli a
carico (Figlio) e storico stipendi (Stipendio)
129
Dipendenze Multivalore
• Le anomalie non dipendono esclusivamente dal fatto che esista una
proprietà multivalore, ma dal fatto che una tale proprietà coesiste nello
schema con altre proprietà semplici o multivalore indipendenti.
• Decomponendo lo schema in modo da modellare separatamente le
proprietà multivalori indipendenti (come nell’algoritmo di trasformazione
di uno schema ad oggetti in relazionale), si avrebbe una base di dati priva
di anomalie.
130
Dipendenze Multivalore
• Per evitare le anomalie dovute alla coesistenza di proprietà
multivalore indipendenti la teoria della normalizzazione vista finora
non è sufficiente.
• Per tale motivo è stata definita la quarta forma normale (4NF) che
generalizza la BCNF ed è stato dato un algoritmo di normalizzazione di
schemi non in quarta forma normale che generalizza quello visto per
BCNF, ed ha le stesse proprietà di conservare i dati ma non le
dipendenze.
131
Riferimenti
• Fondamenti di Basi di Dati.
Capitolo 5
132