Normalizzazione: Basi Di Dati 1
Normalizzazione: Basi Di Dati 1
Normalizzazione
Daniele Riboni
Università degli Studi di Cagliari
Dipartimento di Matematica e Informatica
2
Una relazione con anomalie
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
5
Perché questi fenomeni indesiderabili?
6
Decomposizione delle relazioni
7
Forme normali
8
Normalizzazione
9
Per studiare in maniera sistematica questi
aspetti, è necessario introdurre un vincolo
di integrità:
la dipendenza funzionale
10
Esempi di dipendenze funzionali
11
Dipendenza funzionale
12
Notazione
Y→Z
(si legge: “Z dipende funzionalmente da Y”,
oppure “Y determina Z”)
• Esempi:
Impiegato → Stipendio
Progetto → Bilancio
Impiegato, Progetto → Funzione
13
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
Impiegato → Stipendio
Progetto → Bilancio
Impiegato, Progetto → Funzione
14
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
15
Dipendenza funzionale non banale
R ( A, B, C ) A→B
A B C
1 2 c1
1 2 c2
17
Dipendenza funzionale
R ( A, B, C, D )
Se: A → B e B → C
Allora possiamo derivare anche: A → C
A B C D
1 2 3 d1
1 2 3 d2
(proprietà transitiva)
18
Dipendenza funzionale
19
Regole per FD
Regola di splitting
Allora:
A → B1 ,
A → B2 ,
...
A → Bn
20
Regole per FD
Possiamo fare splitting sul lato sinistro?
Allora:
NO!
A1 → B ,
A2 → B ,
...
An → B
21
Regole per FD
Regola di combinazione
A → B1 ,
A → B2 ,
...
A → Bn
22
Regole per FD
A→B
Allora:
NO!
B→A
23
Chiusura di un insieme di attributi
26
Calcolo di X+F
Esempio: iscrizione a test di ammissione
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
27
Come specificare le FD per una relazione
• Vogliamo specificare:
28
Calcolo di X+F
Esempio: iscrizione a test di ammissione
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
29
Calcolo di X+F
Esempio: iscrizione a test di ammissione
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
30
Calcolo di X+F
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
31
Calcolo di X+F
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
32
Calcolo di X+F
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
VotoM → PuntPartenza
CodCorsoStudi → Univ, CS
33
Calcolo di X+F
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
VotoM → PuntPartenza
34
Calcolo di X+F in generale
35
Calcolo di X+F
• A → C, D
• C→I
• D→F
• E→H
• F → E, B
L’attributo A è chiave di R?
38
Esercizio
L’attributo A è chiave di R?
No, perchè A+FD = { A, B, C, D, E, F, H, I }
(manca G)
Risp.: Ad esempio, B → G
39
Esercizio
L’attributo A è chiave di R?
No, perchè A+DF = { A, B, C, D, E, F, H, I }
(manca G)
• https://www.youtube.com/watch?v=Mkm1h5AtsXI
41
Le anomalie sono legate ad alcune FD
42
Non tutte le FD causano anomalie
43
FD e anomalie
44
FD e anomalie
45
Forma normale di Boyce-Codd (BCNF)
46
Che facciamo se una relazione non
soddisfa la BCNF?
• La rimpiazziamo con altre relazioni che
soddisfano la BCNF
Come?
47
Cosa vuol dire decomporre una relazione?
Proprietà richieste:
• B C = A (conservo tutti gli attributi di R)
• R1 NAT_JOIN R2 = R (facendo il join ri-ottengo R)
48
Cosa vuol dire decomporre una relazione?
B C
49
Procedura intuitiva di normalizzazione
50
(1) Impiegato → Stipendio
(2) Progetto → Bilancio
52
(2) Progetto → Bilancio
53
Funzioni (non ha FD non banali, quindi non viola BCNF)
Impiegato Progetto Funzione
Rossi Marte tecnico
Verdi Giove progettista
Verdi Venere progettista
Neri Venere direttore
Neri Giove consulente
Neri Marte consulente
Mori Marte direttore
Mori Venere progettista
Bianchi Venere progettista
Bianchi Giove direttore
54
Ricomposizione
• Ricomponendo (tramite join) la relazione
originale, ottengo le stesse tuple di partenza
(Funzioni NAT_JOIN Impiegati NAT_JOIN Progetti)
Impiegato Progetto Funzione Impiegato Stipendio Progetto Bilancio
Rossi Marte tecnico Rossi 20 Marte 2
Verdi Giove progettista Verdi 35 Venere 15
Verdi Venere progettista Neri 55 Giove 15
Neri Venere direttore Mori 48
Neri Giove consulente Bianchi 48
Neri Marte consulente
Mori Marte direttore
Mori Venere progettista
Bianchi Venere progettista
Bianchi Giove direttore
55
Algoritmo di decomposizione BCNF
56
Esercizio
Esempio: iscrizione a test di ammissione
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
VotoM → PuntPartenza
CF → Nome, Indirizzo, VotoM
CodCorsoStudi → Univ, CS
57
Esercizio
Passo 0:
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)
VotoM → PuntPartenza
Passo 1:
Punteggio (VotoM, PuntPartenza)
Iscrizione (CF, Nome, Indirizzo, VotoM,
CodCorsoStudi, Univ, CS)
58
Esercizio
Passo 1:
Punteggio (VotoM, PuntPartenza)
Iscrizione (CF, Nome, Indirizzo, VotoM,
CodCorsoStudi, Univ, CS)
Passo 2:
Iscritto (CF, Nome, Indirizzo, VotoM)
Punteggio (VotoM, PuntPartenza)
Iscrizione (CF, CodCorsoStudi, Univ, CS)
59
Esercizio
Passo 2:
Iscritto (CF, Nome, Indirizzo, VotoM)
Punteggio (VotoM, PuntPartenza)
Iscrizione (CF, CodCorsoStudi, Univ, CS)
CodCorsoStudi → Univ, CS
Passo 3:
Corsi (CodCorsoStudi, Univ, CS)
Iscritto (CF, Nome, Indirizzo, VotoM)
Punteggio (VotoM, PuntPartenza)
Iscrizione (CF, CodCorsoStudi)
60
Ripasso online
• https://www.youtube.com/watch?v=mfVCesoMaGA
61
Normalizzazione
62
Forme normali
1a forma normale (1NF) = le relazioni sono “piatte”
(contengono solo attributi atomici)
65
Esercizio
• Individuare le FD presenti in CorsiStud, che contiene
informazioni sui corsi seguiti dagli studenti
Si supponga che:
• Ciascun corso sia tenuto da un solo docente
• Ciascun professore afferisca ad un solo dipartimento
• Ciascun professore possa tenere più corsi
66
Soluzione
Dipendenze funzionali:
• CodCorso → NomeCorso, NumeroOreCorso,
NumCreditiCorso, CodProf
• CodProf → NomeProf, Dip
• MatricolaStud → NomeStud
67
Esercizio
Decomporre CorsiStud in BCNF
68
Esercizio
• R(A, B, C, D, E, F, G)
• FD = {C → AB, BC → DE, D → B, F → C}
• Calcolare la chiusura di { A, B }
• { A, B }+ = { A, B }
• Calcolare la chiusura di { C }
• { C }+ = { A, B, C, D, E }
69
Esercizio
• R(A, B, C, D, E, F, G)
• FD = {C → AB, BC → DE, D → B, F → C}
70
Esercizio
• R(A, B, C, D, E, F, G, H)
• FD = {AB → C, CD → FG, F → E, E → AH, H → D}
• Calcolo la chiusura di { E }
• { E }+ = { A, D, E, H } comprende D, quindi E → D
71
Esercizio
• R(A, B, C, D, E, F, G, H)
• FD = {AB → C, CD → FG, F → E, E → AH, H → D}
• Calcolo la chiusura di { EF }
• { E, F }+ = { A, D, E, F, H } comprende A ma non G,
quindi EF non determina AG
72