Il 0% ha trovato utile questo documento (0 voti)
15 visualizzazioni127 pagine

09 BD Normalizzazione 2024 25

Il documento tratta della normalizzazione nei modelli relazionali, evidenziando l'importanza di eliminare anomalie e garantire la qualità degli schemi. Vengono presentati concetti chiave come le dipendenze funzionali e le chiavi, che aiutano a definire l'equivalenza e la bontà degli schemi relazionali. Infine, si discute l'uso della teoria della normalizzazione per progettare basi di dati prive di anomalie.

Caricato da

pickphoto28
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
15 visualizzazioni127 pagine

09 BD Normalizzazione 2024 25

Il documento tratta della normalizzazione nei modelli relazionali, evidenziando l'importanza di eliminare anomalie e garantire la qualità degli schemi. Vengono presentati concetti chiave come le dipendenze funzionali e le chiavi, che aiutano a definire l'equivalenza e la bontà degli schemi relazionali. Infine, si discute l'uso della teoria della normalizzazione per progettare basi di dati prive di anomalie.

Caricato da

pickphoto28
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Sei sulla pagina 1/ 127

BASI DI DATI

Normalizzazione
Riccardo Guidotti

Slides adattate da Albano et al. e Atzeni-et al.


Problemi dei Modelli Relazionali
• Dato uno scenario diversi modelli relazionali e diverse rappresentazioni
sono possibili.
• Sorge il problema di verificare se:
a) queste diverse rappresentazioni sono tra di loro equivalenti,
b) queste rappresentazioni sono di buona qualità.
• La qualità di una rappresentazione viene valutata come l’assenza di
determinate anomalie (vedi in seguito).

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

Biblioteca(NomeUtente, Residenza, Telefono, NumeroLibro, Autore,


Titolo, DataPrestito)

• Decomposizione
Utenti(NomeUtente, Residenza, Telefono)
Prestiti(NumeroLibro, Autore, Titolo, DataPrestito, Telefono*)

8
Esempio Anomalie

9
Esempio Anomalie

10
Esempio Anomalie

• Paolicchi Laura non ha


preso in prestito un libro a
Gennaio 2020

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*)

• E’ la scelta “migliore”? Dipende dalla definizione di “migliore”


• Non è la migliore per costo delle operazioni 13
Obiettivi Teoria delle Normalizzazione
• Fornire strumenti formali per la progettazione di basi di dati che non
presentino anomalie del tipo precedente senza prendere in considerazione
il costo delle operazioni.
• Nella progettazione si parte da uno schema che modella la realtà e si cerca
di ottenerne uno che sia “migliore” di quello di partenza ma “equivalente”
ad esso.
• Quindi la teoria della normalizzazione si occupa dei seguenti problemi:
• Equivalenza di schemi: definire quando due schemi sono equivalenti,
• Qualità degli schemi: definire criteri di bontà per schemi (cosa vuol dire
che uno schema è migliore di un altro),
• Trasformazione degli schemi: trovare metodi algoritmici per ottenere
da uno schema uno schema migliore ed equivalente.
14
Schema di Relazione Universale
• Ipotesi dello Schema di Relazione Universale:
• Tutti i fatti sono descritti da attributi di un’unica relazione
(relazione universale), cioè gli attributi hanno un significato
globale.

• Definizione: Lo schema di relazione universale U di una base di dati


relazionale ha come attributi l’unione degli attributi di tutte le
relazioni della base di dati.

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

• Nozione fondamentale: dipendenza funzionale.


18
Dipendenza Funzionale: Definizione Informale
• Istanza valida r su R(T)
• Siano X e Y due sottoinsiemi non vuoti di T
• esiste in r una dipendenza funzionale da X a Y se, per ogni coppia di ennuple t1 e
t2 di r con gli stessi valori su X, risulta che t1 e t2 hanno gli stessi valori anche su Y
• La dipendenza funzionale da X a Y si denota con X→Y

Esempio:
Persone (CodiceFiscale, Cognome, Nome, DataNascita)

CodiceFiscale → Cognome, Nome

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, t2r. se t1[X] = t2[X] allora t1[Y] = t2[Y]

• In altre parole: un’istanza r di R(T) soddisfa la dipendenza X → Y, o X → Y


vale in r, se per ogni coppia di ennuple t1 e t2 di r è vero che
• se t1[X] = t2[X] allora t1[Y] = t2[Y]

20
Esempio: Dipendenze Funzionali
•  r istanza valida di R.
 t1, t2r. 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, t2r. se t1[X] = t2[X] allora t1[Y] = t2[Y]
CodCo Titolo CFU Anno Semestre CodDoc Dipartimento Indirizzo

1 Basi di Dati 6 2022 I A1 Informatica Via Roma


2 Basi di Dati 6 2023 II A4 Informatica Via Roma
3 Algebra 12 2022 I A1 Informatica Via Roma

4 Algebra 12 2023 I A4 Informatica Via Roma


5 Basi di Dati 6 2021 I A1 Informatica Via Roma
6 Basi di Dati 6 2020 I A1 Informatica Via Roma
7 Algebra 12 2023 II A4 Matematica Via Bianchi

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

• Formalmente: Un insieme K di attributi per uno schema di relazione r


• è superchiave se r non contiene due ennuple (distinte) t1 e t2 con t1[K] = t2[K]
• è chiave se è una superchiave minimale, cioè non contiene un’altra
superchiave (quindi una chiave è contenuta in una superchiave)

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, t2r. 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, t2r. 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

Abbiamo usato un'unica relazione per rappresentare informazioni eterogenee


• gli impiegati con i relativi stipendi (Impiegato → Stipendio) Anomale?
• i progetti con i relativi bilanci (Progetto → Bilancio)
• le partecipazioni degli impiegati ai progetti con le relative funzioni (Impiegato Progetto → Anomala?
Funzione).
30
Esempio
Impiegato Stipendio Progetto Bilancio Funzione

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 .

• Quindi nel caso della slide precedente vale:


• F = {X → Y, X → Z} |= X → YZ
• {} |= X → X

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.

• Sia F un insieme di DF, diremo che X → Y sia derivabile da F (F |– X →


Y), se X → Y può essere inferito da F usando gli assiomi di Armstrong.

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.

• 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 }
• Ovvero, la chiusura di X rispetto ad F è l’insieme di attributi
determinati da X tra quelli delle DF 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

Algoritmo della Chiusura Lenta


• Un semplice algoritmo per calcolare X + (ne esiste uno migliore di
complessità di tempo O(ap)) è
• Algoritmo Chiusura Lenta Restituisce in output XF+ = X +
input R(T, F) X  T
output X+
begin fino a quando non ci sono altri
X+ = X Inizializziamo X+ con l’insieme X attributi da aggiungere a X+
while (X+ cambia) do
for W → V in F with W  X+ and V V X+
do X+ = X+  V Se fra le dipendenze di F c’è una
end dipendenza W → V con W⊆ X+ allora
si inserisce V in X+ , ossia X+ =X+ {V}

48
Esempio Chiusura Lenta
• F = {DB → E, B → C, A → B}, trovare (AD)+:

• Vogliamo conoscere gli attributi che sono determinati funzionalmente


da un insieme di dipendenze A e D.

X+ = AD Se fra le dipendenze di F c’è una dipendenza Y → A


X+ = ADB con Y⊆ X + allora si inserisce A in X+, ossia X+ =X+ {A}

X+ = ADBE
X+ = ADBEC

49
Algoritmo della Chiusura Lenta

50
Terminazione dell’Algoritmo della Chiusura Lenta

• L’algoritmo termina perché ad ogni passo viene aggiunto un nuovo


attributo a X+.
• Essendo gli attributi in numero finito, a un certo punto l’algoritmo
deve fermarsi.
• Per dimostrare la correttezza, si dimostra (per induzione) che XF+ = X +

51
Definizioni di Chiavi tramite Dipendenze e Chiusura

• Definizione: Dato lo schema R(T, F), un insieme di attributi W  T è


una superchiave di R se W → T  F+

• Definizione: Dato lo schema R(T, F), un insieme di attributi W  T è


una chiave di R se W è una superchiave e non esiste un sottoinsieme
stretto di W che sia superchiave di R

• Definizione: Dato lo schema R(T, F), un attributo A  T si dice


attributo primo se e solo se appartiene ad almeno una chiave,
altrimenti si dice non primo.

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

F={Impiegato → Stipendio, Progetto → Bilancio,


Impiegato Progetto → Funzione}

{Impiegato}+ = {Impiegato, Stipendio}


{Progetto}+ = {Progetto, Bilancio}
{Impiegato, Progetto}+ = {Impiegato, Progetto, Stipendio, Bilancio, Funzione}

K=(Impiegato Progetto) è chiave. Infatti genera tutto l’insieme U e nessuno


dei suoi sottoinsiemi di attributi lo genera

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

• Definizione Sia F un insieme di DF:


1. Data una X → Y  F, si dice che X contiene un attributo estraneo Ai
sse (X – {Ai}) → Y  F+, cioè F |- (X – {Ai}) → Y
• Come facciamo a stabilire che in una DF del tipo AX → B l’attributo A è estraneo?
• Per verificare se A è estraneo calcoliamo X + e verifichiamo se include B, ovvero se basta X
a determinare B
• Esempio: Orari(CodAula, NomeAula, Piano, Posti, Materia, CDL, Docente, Giorno, Ora)
• se vale
• Docente, Giorno, Ora -> CodAula
• Docente, Giorno -> Ora
• allora
• Docente, Giorno -> CodAula
• (quindi) nella prima dipendenza Ora è attributo estraneo
66
Esempio - Attributo Estraneo
F = {AB → C, A → B}
• In AB → C, l’attributo B è estraneo?
• Calcoliamo A+ e verifichiamo se include C, ovvero se basta X a determinare C
A+ = A
A+ = AB poiché A → B e A ⊆ A+
A+ = ABC poiché AB → C e AB ⊆ A+
C dipende solo da A, ovvero in AB → C l’attributo B è estraneo (perché a sua volta
dipendente da A: A→B) +
A include
l’attributo C
L’insieme di DF può essere riscritto come: F’ = {A → C, A → B }
Nota che
(AB)+ = AB
(AB)+ = ABC poiché AB → C e AB ⊆ A+

67
Copertura di un Insieme di DF – Dipendenza Ridondante

• Definizione Sia F un insieme di DF:


2. X → Y è una dipendenza ridondante sse (F – {X → Y})+ = F+,
equivalentemente F – {X → Y} |- X → Y
• Come facciamo a stabilire che una DF del tipo X → A è ridondante?
• La elimino da F, calcolo X+ e verifico se include A, ovvero se con le DF che restano riusco
ancora a dimostrare che X determina A
• Esempio: Orari(CodAula, NomeAula, Piano, Posti, Materia, CDL, Docente, Giorno, Ora)
• se vale
• Docente, Giorno, Ora -> CodAula
• CodAula -> NomeAula
• è inutile avere anche
• Docente, Giorno, Ora -> NomeAula

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}

• In F1 vi è ridondanza? Presenta attributi estranei?


• In F2 vi è ridondanza? Presenta attributi estranei?
• In F3 vi è ridondanza? Presenta attributi estranei?

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

• Definizione Sia F un insieme di DF:


1. Data una X → Y  F, si dice che X contiene un attributo estraneo Ai
sse (X – {Ai}) → Y  F+, cioè F |- (X – {Ai}) → Y
2. X → Y è una dipendenza ridondante sse (F – {X → Y})+ = F+,
equivalentemente F – {X → Y} |- X → Y
3. F è detta una copertura canonica sse
• la parte destra di ogni DF in F è un attributo
• non esistono attributi estranei
• nessuna dipendenza in F è ridondante

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

Per ogni dipendenza si verifica se esistono


Per ogni dipendenza attributi eliminabili dal primo membro.
si verifica se può
essere eliminata.
73
Esempio Esistenza Copertura Canonica
Impiegato (Matricola, Cognome, Grado, Retribuzione, Dipartimento, Supervisore,
Progetto, Anzianità)

Consideriamo il seguente insieme di dipendenze funzionali


F = {M → RSDG, MS → CD, G → R, D →S, S → D, MPD → AM}

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}

1. Creazione dipendenze funzionali atomiche


• {M → R, M → S , M → D, M → G, MS → C, MS → D, G → R, D →S, S → D, MPD → A, MPD → M}

2. Eliminazione attributi estranei:


• S dal primo membro di MS → C e MS → D perché M → S (si ottiene da M → D e D → S)
• D dal primo membro di MPD → A e MPD → M poiché M → D
• {M → R, M → S , M → D, M → G, M → C, M → D, G → R, D →S, S → D, MP → A, MP → M}

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.

• L’intuizione è che si devono “estrarre” gli attributi che sono


determinati da attributi non chiave ovvero “creare uno schema per
ogni funzione”

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:

Impiegato Progetto Sede


Rossi Marte Roma
Verdi Giove Milano
Verdi Venere Milano
Neri Saturno Milano
Neri Venere Milano

Ammette le due dipendenze funzionali


Impiegato → Sede
Progetto → Sede
80
Decomponiamo sulla Base delle Dipendenze
Impiegato Progetto Sede Impiegato → Sede
Rossi Marte Roma Progetto → Sede
Verdi Giove Milano
Verdi Venere Milano
Neri Saturno Milano Ci sono
Neri Venere Milano anomalie?

Impiegato → Sede Progetto → Sede

Impiegato Sede Progetto Sede


Rossi Roma Marte Roma
Verdi Milano Giove Milano
Neri Milano Saturno Milano
Venere Milano 81
Proviamo a Ricostruire (Mediante Join)
Progetto Sede T2
T1 Impiegato Sede
Marte Roma
Rossi Roma
Giove Milano
Verdi Milano
Saturno Milano
Neri Milano Decomposizione con
Venere Milano perdite: si generaro
T1 join T2 delle tuple spurie
Impiegato Progetto Sede
dopo il join.
Rossi Marte Roma
Impiegato Progetto Sede
Verdi Giove Milano Rossi Marte Roma
Verdi Venere Milano Verdi
Verdi
Giove
Venere
Milano
Milano
Neri Saturno Milano Neri
Neri
Saturno
Venere
Milano
Milano
Queste due
Neri Venere Milano
tuple sono in Verdi Saturno Milano
più (spurie)
Neri Giove Milano
Diversa dalla relazione di partenza! 82
Decomposizione di Schemi
• Definizione Dato uno schema R(T),
ρ = {R1(T1), …, Rk(Tk)} è una decomposizione di R sse T1 ∪ ... ∪ Tk = T:

• StudentiEdEsami(Matricola, Nome, Provincia, AnnoNascita, Materia, Voto)

• {Studenti(Matricola, Nome, Provincia,AnnoNascita),


Esami(Matricola, Materia, Voto)}
• {Studenti(Matricola, Nome, Provincia,AnnoNascita),
Esami(Nome, Materia, Voto)}
• {Studenti(Matricola, Nome, Provincia,AnnoNascita),
Esami(Materia, Voto)}
83
Conservazione dei Dati e delle Dipendenze
• Proprietà desiderabili di una decomposizione:
• conservazione dei dati (nozione semantica)
• conservazione delle dipendenze

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

r  (πT1 r) ⋈ (πT2 r) ⋈ … ⋈ (πTk r)


informazione: proiettando una relazione sui sottoschemi
e poi facendo la giunzione si ottengono più ennuple di
quante ce ne fossero nella relazione originaria.
85
Esempio di Decomposizione Con Perdita Informazione
A B C
Sia r qui sotto un’istanza valida di R(ABC):
r= a1 b c1
a2 b c2
• Allora la decomposizione {R(AB), R(BC)}:
A B B C
πT1 r = a1 b πT2 r = b c1
a2 b b c2

non preserva i dati, infatti πT1 r ⋈ πT2 r  r


A B C
r= a1 b c1
a1 b c2
a2 b c1
a2 b c2 86
Esempio di Decomposizione Con Perdita Informazione
StudentiEdEsami(Matricola, Nome, Provincia, AnnoNascita, Materia, Voto)

{Studenti(Matricola, Nome, Provincia, AnnoNascita),


Esami(Nome, Materia, Voto)}

Cosa succede quando si fa la giunzione?


Nessuna tupla si perde, ma…?

Questa decomposizione crea tuple spurie: ci sono n-uple in più.


Si pensi al caso di due persone con lo stesso nome che hanno sostenuto esami diversi, cosa
succede dopo la giunzione?
Perdita di informazione!

87
Esempio di Decomposizione Con Perdita Informazione

StudentiEdEsami(Matricola, Nome, Provincia, AnnoNascita, Materia, Voto)

{Studenti(Matricola, Nome, Provincia, AnnoNascita),


Esami(Materia, Voto)}

Si perde l’informazione sullo studente.

Perdita di informazione!

88
Esempio di Decomposizione Con Perdita Informazione

StudentiEdEsami(Matricola, Nome, Provincia, AnnoNascita, Materia, Voto)

{Studenti(Matricola, Nome, Provincia, AnnoNascita),


Esami(Matricola, Materia, Voto)}

Perché non perdo informazione con questa decomposizione?

La chiave è l’unico modo per avere una decomposizione senza perdita di


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

Impiegato → Sede Progetto → Sede

Impiegato Sede Progetto Sede


Rossi Roma Marte Roma
Verdi Milano Giove Milano
Neri Milano Saturno Milano
Venere Milano 91
Decomposizioni Binarie
• Teorema (formale): Sia R<T, F> uno schema di relazione, la
decomposizione ρ = {R1(T1), R2(T2)} preserva i dati sse T1  T2 → T1 
F+ oppure T1  T2 → T2  F+.

• Esistono criteri anche per decomposizioni in più di due schemi.

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)

Impiegato Progetto Sede IMPIEGATO→ SEDE Impiegato Progetto


Rossi Marte Roma Rossi Marte
Impiegato Sede
Verdi Giove Milano Rossi Roma Verdi Giove

Verdi Venere Milano Verdi Milano Verdi Venere

Neri Venere Milano Neri Milano Neri Venere

Neri Saturno Milano Neri Saturno

• Con questa decomposizione, non ho tuple spurie …


PROGETTO → SEDE Ignorata nella decomposizione
93
Un Altro Problema – Inserimento Neri-Marte
IMPIEGATO→ SEDE Impiegato Progetto
Impiegato Progetto Sede
Impiegato Sede Rossi Marte
Rossi Marte Roma
Rossi Roma Verdi Giove
Verdi Giove Milano
Verdi Milano Verdi Venere = Verdi Venere Milano
Neri Milano Neri Venere
Neri Saturno Milano
Neri Saturno
Neri Venere Milano
Neri Marte
Neri Marte Milano
• Una decomposizione conserva le dipendenze se ciascuna delle
dipendenze funzionali dello schema originario coinvolge attributi che
compaiono tutti insieme in uno degli schemi decomposti
• Nell’esempio considerato PROGETTO → SEDE viene violata

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}

• Algoritmo banale per il calcolo di πT1 (F):


for each Y  T1 do (Z:= Y+; output Y → Z T1)
96
Preservazione Delle Dipendenze
• Definizione: Dato lo schema R(T, F), la decomposizione ρ = {R1, ..., Rn}
preserva le dipendenze sse l’unione delle dipendenze in πTi(F) è una
copertura di F.
• Proposizione: Dato lo schema R(T, F), il problema di stabilire se la
decomposizione ρ = {R1, ..., Rn} preserva le dipendenze ha complessità
di tempo polinomiale.
• Un teorema importante:
Teorema: Sia ρ = {Ri(Ti, Fi)} una decomposizione di R(T, F) che
preservi le dipendenze e tale che un Tj sia una superchiave per R.
Allora ρ preserva i dati.

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

• Quando una relazione non è normalizzata:


• presenta ridondanze,
• si presta a comportamenti poco desiderabili durante gli
aggiornamenti

102
Forme Normali

• 1FN (prima forma normale):


• Impone una restrizione sul tipo di una relazione: ogni attributo ha un tipo
elementare.

• 2FN, 3FN e FNBC (o BCNF):


• Impongono restrizioni sulle dipendenze.

• FNBC (Boyce-Codd) è la più naturale e la più restrittiva.

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)

• La relazione Impiegati Impiegato Stipendio Progetto Bilancio Funzione

• non è in BCNF perché esiste la dipendenza funzionale


• Impiegato → Stipendio (Impiegato non è (super)chiave per la relazione)
• Intuizione: se esiste in R una dipendenza X → Y non banale ed X non è chiave,
allora X modella l’identità di un’entità diversa da quelle modellate dall’intera R
104
BCNF - Forma Normale di Boyce e Codd
• Definizione: R(T, F) è in BCNF  per ogni X → A F+ non banale, i.e., A X, X
è una superchiave.
• Teorema: R(T, F) è in BCNF  per ogni X → A F non banale, X è una
superchiave.
• Esempi:
• Docenti(CodiceFiscale, Nome, Dipartimento, Indirizzo)
• F = {CF → N D, D → I}
• Impiegati(Codice, Qualifica, NomeFiglio)
• F = {C → Q}
• Telefoni(Prefisso, Numero, Località, Abbonato, Via)
• F = {P N → L A V, L → P}
105
a numero attributi in T
p numero dipendenze funzionali in F

BCNF - Forma Normale di Boyce e Codd


• Corollario: R(T, F) con F in copertura canonica è in BCNF  per ogni
DF elementare non banale X → A F, X è una superchiave (ovvero è
una chiave).

• Da questo risultato scaturisce che un algoritmo per controllare se uno


schema di relazione è in BCNF ha complessità O(ap2).

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

• Esempi di decomposizioni senza perdita di dipendenze:


• Docenti(CodiceFiscale, Nome, Dipartimento, Indirizzo), {CF → N D; D → I}
(CF)+= CF N D I è chiave
(D) += D I non è chiave

Decompongono
• R1(D,I); R2(CF,N, D)
• F1 = { D → I } F2={ CF → N D }

108
Proprietà Algoritmo di Analisi

• Preserva i dati, ma non necessariamente le dipendenze

• Esempi di decomposizioni senza perdita di dipendenze:


• Impiegati(Codice, Qualifica, NomeFiglio) {C → Q}
• R1(C, Q); R2(C, NF)

• 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

Preserva Dati e Dipendenze?

110
Proprietà Algoritmo di Analisi
• Decomposizione con perdita di dipendenze:

• Telefoni(Prefisso, Numero, Località, Abbonato, Via), F = {P N → L A V, L → P}


• R1(L, P); R2(L, N, A, V)
• Preserva dati ma non le dipendenze: PN → L non è deducibile da F1 e F2.

• 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 } )

• Consideriamo CE→A. CE+=CEAB (CE non è chiave), per cui decomponiamo:


• R1(CEAB) gli attributi di CE+,
• R2(CED) gli altri attribuiti (D) e la chiave esterna (CE)
• Proiettiamo le dipendenze (approssimate su F):
• R1 ( CEAB, { CE → A, CB → E, CE → B } ) proiezione in F
• R2 ( CED, { D→E } ) proiezione in F
• CE+=CEAB e CB+=CBEA per cui R1 è in BCNF
• Consideriamo D→E in R2. D+=DE (DE non è chiave) per cui R2 va ancora
decomposta in R3(DE) e R4(DC)
• La decomposizione è quindi: { R1(CBEA), R3(DE), R4(DC) }.
• La decomposizione preserva dati e dipendenze ed è in questo caso è la stessa
prodotta dall’algoritmo di sintesi (che vedremo dopo). 113
Esercizio II
• Si consideri il seguente schema relazionale
R( ABCDE, F= { AC→D, BD→A, BD→E, A→B } )
• Applicare l’algoritmo di analisi e dire se dati e dipendenze sono stati
preservati.

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.

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}

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.

G(1)={M → D, M → G, M → C} G(1)={M → DGC}


G(2)={G → R} G(2)={G → R}
G(3)={D → S} G(3)={D → S}
G(4)={S → D} G(4)={S → D}
G(5)={MP → A} G(5)={MP → A}

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.

G(1)={M → DGC}: R(1)(MDGC)


G(2)={G → R}: R(2)(GR)
G(3)={D → S}: R(3)(SD)
G(4)={S → D}: R(4)(SD)
G(5)={MP → A}: R(5)(MPA)

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.

Step 2 Step 3 Step 4


• G(1)={M → DGC}: R(1)(MDGC) R(1)(MDGC)
• G(2)={G → R}: R(2)(GR) R(2)(GR)
• G(3)={D → S}: R(3)(DS) G(3)={D → S} R(3)(DS)
• G(4)={S → D}: R(4)(SD) G(4)={S → D}
• G(5)={MP → A}: R(5)(MPA) R(5)(MPA)
G(3)={D → S, S → D}

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

Potrebbero piacerti anche