Il 0% ha trovato utile questo documento (0 voti)
29 visualizzazioni72 pagine

Normalizzazione: Basi Di Dati 1

Caricato da

Knight Artoriass
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)
29 visualizzazioni72 pagine

Normalizzazione: Basi Di Dati 1

Caricato da

Knight Artoriass
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/ 72

Basi di Dati 1

Normalizzazione

Daniele Riboni
Università degli Studi di Cagliari
Dipartimento di Matematica e Informatica

Slide tratte in parte dal materiale didattico del libro:


Atzeni, Ceri, Fraternali, Paraboschi, Torlone. Basi di dati. Quarta edizione. McGraw-Hill, 2014 1
Relazioni con anomalie

• Alcune “grandi” relazioni presentano anomalie


• Devono essere decomposte in base alle proprietà
dei dati (“dipendenze funzionali”)
• Le relazioni decomposte soddisfano le forme
normali

Dipendenze funzionali → Boyce-Codd Normal Form


→ Terza forma normale
Dipendenze multivalore → Quarta Forma Normale

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

Immaginiamo che questa sia l’unica


relazione della base di dati
3
Anomalie

Non ci sono inconsistenze, però:

• Lo stipendio di ciascun impiegato è ripetuto in


tutte le tuple relative (e anche il bilancio)
• Ridondanza

• Se lo stipendio di un impiegato varia, è


necessario andarne a modificare il valore in
diverse ennuple
• Anomalia di aggiornamento
4
Anomalie

• Se un impiegato interrompe la partecipazione a


tutti i progetti, viene cancellato
• Anomalia di cancellazione

• Un nuovo impiegato senza progetto non può


essere inserito (non possiamo usare valori nulli,
perchè Progetto è un attributo della chiave)
• Anomalia di inserimento

5
Perché questi fenomeni indesiderabili?

Abbiamo usato un'unica relazione per


rappresentare informazioni eterogenee

• Gli impiegati con i relativi stipendi

• I progetti con i relativi bilanci

• Le partecipazioni degli impiegati ai progetti


con le relative funzioni

6
Decomposizione delle relazioni

• La normalizzazione è una procedura che viene


svolta dopo la progettazione logica

• Serve ad identificare possibili anomalie e


correggerle
• decomponendo le relazioni “scorrette” in più
relazioni

7
Forme normali

Una forma normale è una proprietà di una base di dati


relazionale che ne garantisce la “qualità”

• Quando una relazione non è normalizzata:


• Presenta ridondanze
• Si presta a comportamenti poco desiderabili
durante gli aggiornamenti

• Le forme normali sono utili anche per:


• Memorizzazione efficiente su DBMS
• Ottimizzazione della risposta alle query

8
Normalizzazione

• Procedura che permette di trasformare


schemi non normalizzati in schemi che
soddisfano una forma normale

• La normalizzazione va utilizzata come tecnica


di verifica dei risultati della progettazione di
una base di dati

• Non costituisce una metodologia di


progettazione

9
Per studiare in maniera sistematica questi
aspetti, è necessario introdurre un vincolo
di integrità:
la dipendenza funzionale

10
Esempi di dipendenze funzionali

• Ogni impiegato ha un solo stipendio (anche se


partecipa a più progetti)

• Ogni progetto ha un solo bilancio

• Ogni impiegato in ciascun progetto ha una sola


funzione (anche se può avere funzioni diverse in
progetti diversi)

11
Dipendenza funzionale

• Relazione R con attributi X


• Due sottoinsiemi non vuoti Y e Z di X

• Esiste in R una dipendenza funzionale (FD)


da Y a Z se, per ogni coppia di tuple t1 e t2 di
R con gli stessi valori su Y, risulta che t1 e t2
hanno gli stessi valori anche su Z

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

•Le FD sono basate sulla conoscenza del dominio dei dati


che si stanno modellando (“sul mondo reale”)

• FD “casuali” (trovate nei dati) che non hanno


corrispondenza col mondo reale non vanno considerate

15
Dipendenza funzionale non banale

• Impiegato, Progetto → Progetto


• Impiegato, Progetto → Funzione

• Si tratta però di FD “banali” (sempre soddisfatte


per definizione)

• Y → Z è non banale se nessun attributo in Z


appartiene a Y e se Y non è superchiave
• Se Y è (super)chiave (come nella seconda FD)
allora Y → Z vale per qualunque Z
16
Dipendenza funzionale

R ( A, B, C ) A→B

A, B e C sono insiemi di attributi


La loro unione restituisce tutti gli attributi di R

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

Supponiamo che A determini tutti gli altri attributi di R:


R ( A, B, C ) A → B,C
A B C
1 2 3
1 2 3

Se è così, non posso avere 2 tuple diverse con valori


di A uguali (altrimenti anche il resto delle 2 tuple
sarebbe uguale) – quindi A è superchiave

19
Regole per FD
Regola di splitting

A → B1, B2, ... , Bn

Allora:

A → B1 ,
A → B2 ,
...
A → Bn
20
Regole per FD
Possiamo fare splitting sul lato sinistro?

A1, A2, ... , An → B

Allora:
NO!
A1 → B ,
A2 → B ,
...
An → B
21
Regole per FD

Regola di combinazione

A → B1 ,
A → B2 ,
...
A → Bn

Allora: A → B1, B2, ... , Bn

22
Regole per FD

Vale la proprietà simmetrica?

A→B

Allora:
NO!
B→A

23
Chiusura di un insieme di attributi

• Dati uno schema di relazione R(U), un


insieme F di FD definite su U e un insieme di
attributi X contenuti in U (cioè X ⊆ U): la
chiusura di X rispetto ad F, indicata con X+F ,
è l’insieme degli attributi che dipendono
funzionalmente da X:
X+F = { A | A ∈ U e F implica X → A }

• In altri termini: Se A appartiene a X+F


allora X → A è implicata da F
24
Calcolo di X+F
Esempio: iscrizione a test di ammissione
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)

Lo studente con codice fiscale CF


(di cui si conosce Nome, Indirizzo, voto di
maturità VotoM)
si iscrive al test di ammissione del corso di studi
CS dell’università Univ (identificato dal
codice CodCorsoStudi)
e il suo punteggio di partenza è PuntPartenza
(calcolato in base al voto di maturità VotoM)
25
Calcolo di X+F
Esempio: iscrizione a test di ammissione
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)

Lo stesso studente si può iscrivere al test di più


corsi di studio, quindi la chiave di Iscrizione è
< CF, CodCorsoStudi >

26
Calcolo di X+F
Esempio: iscrizione a test di ammissione
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)

Quali sono le dipendenze funzionali?

27
Come specificare le FD per una relazione

• Vogliamo specificare:

• L’insieme minimale F di dipendenze funzionali


non banali tale che tutte le FD valide sulla
relazione derivino da F

28
Calcolo di X+F
Esempio: iscrizione a test di ammissione
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)

Quali sono le dipendenze funzionali?

CF → Nome, Indirizzo, VotoM


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)

CF → Nome, Indirizzo, VotoM


VotoM → PuntPartenza
CodCorsoStudi → Univ, CS

Qual è la chiusura di X = { CF, CodCorsoStudi }?

30
Calcolo di X+F
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)

CF → Nome, Indirizzo, VotoM


VotoM → PuntPartenza
CodCorsoStudi → Univ, CS

Passo 0: X+F = X = { CF, CodCorsoStudi }

31
Calcolo di X+F
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)

CF → Nome, Indirizzo, VotoM


VotoM → PuntPartenza
CodCorsoStudi → Univ, CS

Passo 1: aggiungo le dipendenze da CF:


X+F = { CF, CodCorsoStudi, Nome, Indirizzo, VotoM }

32
Calcolo di X+F
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)

VotoM → PuntPartenza
CodCorsoStudi → Univ, CS

Passo 2: aggiungo le dipendenze da


CodCorsoStudi:
X+F = { CF, CodCorsoStudi, Nome, Indirizzo,
VotoM, Univ, CS }

33
Calcolo di X+F
Iscrizione (CF, Nome, Indirizzo, VotoM,
PuntPartenza, CodCorsoStudi, Univ, CS)

VotoM → PuntPartenza

Passo 3: posso usare la dipendenza rimasta? Sì,


perchè VotoM appartiene a X+F

X+F = { CF, CodCorsoStudi, Nome, Indirizzo,


VotoM, Univ, CS, PuntPartenza }

34
Calcolo di X+F in generale

Input: un insieme X di attributi e un insieme F di


dipendenze funzionali
Output: un insieme XP di attributi.
1.Inizializziamo XP con l’insieme di input X.
2.Se esiste una FD Y → A in F con Y ⊆ XP e AXP,
allora aggiungiamo A a XP .
3.Ripetiamo il passo (2) fino a quando non ci sono
ulteriori attributi che possono essere aggiunti a XP.

35
Calcolo di X+F

Iscrizione (CF, Nome, Indirizzo, VotoM,


PuntPartenza, CodCorsoStudi, Univ, Dip)
• X+F = { CF, CodCorsoStudi, Nome, Indirizzo,
VotoM, Univ, Dip, PuntPartenza }

X+F contiene tutti gli attributi di Iscrizione


Questo cosa ci dice?
X → (tutti gli attributi di Iscrizione)
Quindi X = { CF, CodCorsoStudi } è (super)chiave
di Iscrizione
36
Chiusura e chiave

• Un insieme di attributi K è (super)chiave per


uno schema di relazione R(U) su cui è definito
un insieme di dipendenze funzionali F se F
implica K → U
• Scritto diversamente: se K+F = U

• Quindi, per trovare le chiavi posso procedere


per tentativi:
• partendo dai singoli attributi, passando poi
alle coppie, ecc., finchè non trovo una
chiusura che comprende tutti gli attributi
37
Esercizio
Data la relazione R(A, B, C, D, E, F, G, H, I) e le
dipendenze funzionali FD:

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

Che altra dipendenza funzionale potrei avere


perchè A sia chiave di R?

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)

Qual è una (super)chiave di R?


Risp.: < A, G >

< A, G > è minimale?


Risp.: Sì, perchè G+FD = { G } , quindi G non è
chiave (e sappiamo già che A non è chiave)
40
Ripasso online

• https://www.youtube.com/watch?v=Mkm1h5AtsXI

41
Le anomalie sono legate ad alcune FD

• (1) Gli impiegati hanno un unico stipendio


Impiegato → Stipendio

• (2) I progetti hanno un unico bilancio


Progetto → Bilancio

42
Non tutte le FD causano anomalie

• (3) In ciascun progetto, un impiegato svolge una


sola funzione

Impiegato, Progetto → Funzione

• Il soddisfacimento è più “semplice”, perché


Impiegato, Progetto è chiave

43
FD e anomalie

• La terza FD corrisponde ad una chiave e non


causa anomalie

• Le prime due FD non corrispondono a chiavi e


causano anomalie

44
FD e anomalie

• La relazione contiene alcune dipendenze legate


alla chiave e altre ad attributi che non formano
una chiave

• Le anomalie sono causate dalla presenza di


concetti eterogenei:
• Proprietà degli impiegati (lo stipendio)
• Proprietà di progetti (il bilancio)
• Proprietà della chiave Impiegato, Progetto

45
Forma normale di Boyce-Codd (BCNF)

• Una relazione R è in forma normale di Boyce-


Codd se, per ogni dipendenza funzionale X → Y
definita su di essa, X è (super)chiave di R

• La forma normale richiede che i concetti in una


relazione siano omogenei (solo proprietà
direttamente associate alla chiave)

46
Che facciamo se una relazione non
soddisfa la BCNF?
• La rimpiazziamo con altre relazioni che
soddisfano la BCNF

Come?

• Decomponendo sulla base delle dipendenze


funzionali, al fine di separare i concetti

47
Cosa vuol dire decomporre una relazione?

R(A) dove A = A1, ... , An

Decompongo R in 2 relazioni R1 e R2:

R1(B) dove B = B1, ... , Bm

R2(C) dove C = C1, ... , Ck

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

• Non valida in generale, ma solo nei


"casi semplici"
• Per ogni dipendenza X → Y che violi la
BCNF, definisco una relazione su XY ed
elimino Y dalla relazione originaria

50
(1) Impiegato → Stipendio
(2) Progetto → Bilancio

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

(1) e (2) violano la BCNF


51
(1) Impiegato → Stipendio

Impiegati (non viola la BCNF perchè Impiegato è chiave)


Impiegato Stipendio
Rossi 20
Verdi 35
Verdi 35
Neri 55
Neri 55
Neri 55
Mori 48
Mori 48
Bianchi 48
Bianchi 48

52
(2) Progetto → Bilancio

Progetti (non viola la BCNF perchè Progetto è chiave)


Progetto Bilancio
Marte 2
Giove 15
Venere 15
Venere 15
Giove 15
Marte 2
Marte 2
Venere 15
Venere 15
Giove 15

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

• Input: relazione R e sue dip. funzionali


• Output: decomposizione di R in BCNF

• Ripetere fin quando tutte le relaz. sono in BCNF:


• Scegliere R’ che violi BCNF
• Decomporla in R1(A,B) e R2(A,C) in modo
che gli attributi comuni (A) siano chiave di R1
o di R2 (o di entrambe)
• Ricalcolare FD

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

Decomponiamo Iscrizione in modo che non venga


violata la BCNF

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)

CF → Nome, Indirizzo, VotoM

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

• Alcune “grandi” relazioni presentano anomalie


• Devono essere decomposte in base alle proprietà
dei dati (“dipendenze funzionali”)
• Le relazioni decomposte soddisfano le forme
normali

Dipendenze funzionali → Boyce-Codd Normal Form


→ Terza forma normale
Dipendenze multivalore → Quarta Forma Normale

62
Forme normali
1a forma normale (1NF) = le relazioni sono “piatte”
(contengono solo attributi atomici)

2a forma normale (2NF) = (non usata)

3a forma normale (3NF)

Boyce-Codd Normal Form (BCNF)

4a forma normale (4NF)

5a forma normale (5NF) = (raramente utilizzata)


63
Esercizio

Esami (CodEsame, Nome, CodProf, NomeProf,


NumStudenti, Dip)

Valgono le dipendenze funzionali:


• CodEsame → Nome, NumStudenti
• CodProf → Dip, NomeProf

Portare Esami in BCNF, eseguendo una


suddivisione senza perdite e che mantenga le
dipendenze funzionali
64
Soluzione

Creiamo una relazione per ciascuna FD:


• Corso (CodEsame, Nome, NumStudenti)
• Prof (CodProf, Dip, NomeProf)
• Esami (CodEsame, CodProf)

Lo schema è in 3NF e in BCNF perchè la parte


sinistra di ogni FD è chiave.

65
Esercizio
• Individuare le FD presenti in CorsiStud, che contiene
informazioni sui corsi seguiti dagli studenti

CorsiStud(CodCorso, NomeCorso, NomeProf, CodProf,


Dip, MatricolaStud, NomeStud, NumeroOreCorso,
NumeroCreditiCorso)

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

CorsiStud(CodCorso, NomeCorso, NomeProf,


CodProf, Dip, MatricolaStud, NomeStud,
NumeroOreCorso, NumeroCreditiCorso)

Dipendenze funzionali:
• CodCorso → NomeCorso, NumeroOreCorso,
NumCreditiCorso, CodProf
• CodProf → NomeProf, Dip
• MatricolaStud → NomeStud

67
Esercizio
Decomporre CorsiStud in BCNF

• Corsi (CodCorso, NomeCorso, NumeroOreCorso,


NumCreditiCorso, CodProf)

• Prof (CodProf, NomeProf, Dip)

• Stud (MatricolaStud, NomeStud)

• Frequenze (CodCorso, MatricolaStud)

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}

• Dimostrare che <F, G> è superchiave di R


• Calcolo la chiusura di { F, G }
• { F, G }+ = { A, B, C, D, E, F, G } = tutti gli attributi di
R, quindi <F, G> è superchiave di R.

70
Esercizio

• R(A, B, C, D, E, F, G, H)
• FD = {AB → C, CD → FG, F → E, E → AH, H → D}

• Esiste una dipendenza funzionale tra E e D?


Dimostrarlo

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

• Esiste una dipendenza funzionale tra EF e AG?


Dimostrarlo

• Calcolo la chiusura di { EF }
• { E, F }+ = { A, D, E, F, H } comprende A ma non G,
quindi EF non determina AG

72

Potrebbero piacerti anche