Capitolo 9
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.1
Considerare lo relazione in figura 9.20 e individuare le proprietà della corrispondente applicazione.
Individuare inoltre eventuali ridondanze e anomalie nella relazione.
Docente Dipartimento Facoltà Preside Corso
Verdi Matematica Ingegneria Neri Analisi
Verdi Matematica Ingegneria Neri Geometria
Rossi Fisica Ingegneria Neri Analisi
Rossi Fisica Scienze Bruni Analisi
Bruni Fisica Scienze Bruni Fisica
Figura 9.20 Relazione per l’esercizio 9.1
Soluzione:
Una chiave per questa relazione è Dipartimento, Facoltà, Corso; una dipendenza funzionale che
non riguarda la chiave Facoltà Preside: questa dipendenza funzionale introduce una ridondanza
nella relazione, perché per ogni corso nella stessa Facoltà, il Preside deve essere ripetuto.
La relazione ha un’anomalia di aggiornamento, perché se cambiamo il preside di una facoltà
dobbiamo aggiornare tutte le tuple che contengono questa informazione, e non solamente una tupla.
La relazione contiene anche un’anomalia di cancellazione, perché se cancelliamo il preside di una
facoltà, perdiamo anche tutte le informazioni sui docenti di quel dipartimento.
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.2
Individuare la chiave e le dipendenze funzionali della relazione considerata nell’Esercizio 9.1 e
individuare poi una decomposizione in forma normale di Boyce e Codd.
Soluzione:
Una chiave per questa relazione è Dipartimento, Facoltà, Corso.
Anche gli attributi Docente, Facoltà, Corso sembrano formare una chiave in questa relazione, ma
generalmente parlando questo non è corretto perché lo stesso docente può insegnare lo stesso corso
in differenti dipartimenti di una Facoltà.
Decomposizione:
Docente Dipartimento Facoltà Corso
Verdi Matematica Ingegneria Analisi
Verdi Matematica Ingegneria Geometria
Rossi Fisica Ingegneria Analisi
Rossi Fisica Scienze Analisi
Bruni Fisica Scienze Fisica
Facoltà Preside
Ingegneria Neri
Scienze Bruni
Questa decomposizione è corretta perché, con un join tra le due relazioni, otteniamo tutte le tuple
della relazione originaria.
Inoltre, la decomposizione risolve il problema delle anomalie, perché è in forma normale di Boyce-
Codd.
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.3
Si consideri la relazione riportata in figura 9.20 che rappresenta alcune informazioni sui prodotti di
una falegnameria e i relativi componenti. Vengono indicati: il tipo del componente di un prodotto
(attributo Tipo), la quantità del componente necessaria per un certo prodotto (attributo Q), il prezzo
unitario del componente di un certo prodotto (attributo PC), il fornitore del componente (attributo
Fornitore) e il prezzo totale del singolo prodotto (attributo PT). Individuare le dipendenze
funzionali e la chiave di questa relazione.
Prodotto Componente Tipo Q PC Fornitore PT
Libreria Legno Noce 50 10.000 Forrest 400.000
Libreria Bulloni B212 200 100 Bolt 400.000
Libreria Vetro Cristal 3 5.000 Clean 400.000
Scaffale Legno Mogano 5 15.000 Forrest 300.000
Scaffale Bulloni B212 250 100 Bolt 300.000
Scaffale Bulloni B412 150 300 Bolt 300.000
Scrivania Legno Noce 10 8.000 Wood 250.000
Scrivania Maniglie H621 10 20.000 Bolt 250.000
Tavolo Legno Noce 4 10.000 Forrest 200.000
Figura 9.21 Una relazione contenente dati di una falegnameria
Soluzione:
Supponendo che un Tipo si riferisca solamente ad un componente, una chiave per la relazione è
Prodotto, Tipo; così tutti gli attributi che contengono Prodotto, Tipo sono superchiavi per la
relazione.
Gli attributi Q e PC sembrano un’altra chiave, ma potrebbe non essere vero in tutte le istanze di
questo database.
Un’altra chiave apparente è Tipo, PT
Le dipendenze funzionali sono:
Prodotto PT
Prodotto, Tipo PC, Q, Fornitore
Tipo Componente
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.4
Con riferimento alla relazione in Figura 9.21 si considerino le seguenti operazioni di
aggiornamento:
Inserimento di un nuovo prodotto;
Cancellazione di un prodotto;
Aggiunta di una componente a un prodotto;
Modifica del prezzo di un prodotto.
Discutere i tipi di anomalia che possono essere causati da tali operazioni.
Soluzione:
1) L’inserimento di un nuovo prodotto richiede l’aggiunta di una tupla per ogni tipo di
componente. Il prezzo del componente, che è in funzione del prodotto, deve essere ripetuto in
ogni tupla.. Anche il prezzo di un componente può essere ridondante perché lo stesso tipo di
componente, con lo stesso fornitore è usato per altri prodotti, il prezzo del componente è già
presente nella relazione. Questa è un’anomalia di inserimento.
2) La cancellazione di un prodotto implica che tutte le tuple che si riferiscono al prodotto devono
essere cancellate; così se un prodotto ha più di un componente, la cancellazione di un prodotto
implica la cancellazione di molte tuple; inoltre questa operazione cancella informazioni sui
fornitori di componenti: se non ci sono altre tuple che si riferiscono a quei fornitori, le
informazioni su di loro andranno perse. Questa è un’anomalia di cancellazione.
3) L’aggiunta di un nuovo componente implica l’aggiunta di una nuova tupla nella relazione.
Questa è un’altra anomalia di aggiornamento perché, come per il punto 1, il prezzo totale e
(eventualmente) il prezzo del componente devono essere ripetuti.
4) La modifica del prezzo di un prodotto produce un’anomalia di aggiornamento, perché
l’aggiornamento di un attributo implica l’aggiornamento di più tuple nella relazione (una tupla
per ogni tipo di componente dello stesso prodotto).
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.5
Si consideri sempre la relazione in figura 9.21. Descrivere le ridondanze presenti e individuare una
decomposizione della relazione che non presenti tali ridondanze. Fornire infine l’istanza dello
schema così ottenuto, corrispondente all’istanza originale. Verificare poi che sia possibile
ricostruire l’istanza originale a partire da tale istanza.
Soluzione:
Le ridondanze presenti nella relazione sono riferite alle dipendenze funzionali. Gli attributi
ridondanti sono:
PT: che è ripetuto in ogni tupla che si riferisce allo stesso prodotto.
PC: che è ripetuto in ogni tupla che ha lo stesso valore in Tipo e Fornitore.
Componente: che è ripetuto in ogni tupla che ha lo stesso Tipo.
Una possibile decomposizione è:
R1
Prodotto Tipo Q Fornitore
Libreria Noce 50 Forrest
Libreria B212 200 Bolt
Libreria Cristal 3 Clean
Scaffale Mogano 5 Forrest
Scaffale B212 250 Bolt
Scaffale B412 150 Bolt
Scrivania Noce 10 Wood
Scrivania H621 10 Bolt
Tavolo Noce 4 Forrest
R2 R3
Prodotto PT Tipo Componente
Libreria 400.000 Noce Legno
Scaffale 300.000 B212 Bulloni
Scrivania 250.000 B412 Bulloni
Tavolo 200.000 Cristal Vetro
Mogano Legno
H621 Maniglie
R4
Fornitore Tipo PC
Forrest Noce 10.000
Bolt B212 100
Clean Cristal 5.000
Forrest Mogano 15.000
Bolt B412 300
Wood Noce 8.000
Bolt H621 20.000
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
La relazione R1 ha la chiave originaria della relazione, ma non contiene ridondanze. Le relazioni
R2, R3 e R4 hanno le chiavi sul lato sinistro delle dipendenze funzionali (vedi Esercizio 9.3).
Facendo il join su queste chiavi si possono ricostruire esattamente le informazioni dello schema
originario.
Tutte le dipendenze sono preservate nella decomposizione, perché ognuna di loro è rappresentata
con una relazione differente.
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.6
Decomporre la relazione in Figura 9.21 con l’algoritmo di sintesi di schemi in terza
forma nomale illustrato nel Paragrafo 9.6.3
Soluzione
L’insieme di dipendenze mostrato nella risposta all’esercizio 9.3 è una copertura ridotta:
Prodotto PT
Prodotto, Tipo PC, Q, Fornitore
Tipo Componente
L’algoritmo di sintesi genera quindi tre relazioni
R1(Prodotto,PT)
R2(Prodotto, Tipo, PC, Q, Fornitore)
R3(Tipo, Componente)
Poiché R2 contiene la chiave della relazione originaria (Prodotto, Tipo), no serve aggiungere
ulteriori relazioni.
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.7 Considerare uno schema di relazione R (E, N, L, C, S, D, M, P,
A, con le dipendenze E → N S, N L → EM D, EN → LCD, C → S, D → M ,
M → D EP D → AE ed infine N LCP → A. Calcolare una copertura ridotta
per tale insieme e decomporre la relazione in terza forma normale.
Soluzione
I passi per calcolare la copertura ridotta di una relazione sono i seguenti:
1. sostituzione l’insieme di dipendenze funzionali con un insieme equivalente che
ha i secondi membri costituiti da un singolo attributo;
2. per ogni dipendenza verifica dell’esistenza di attributi eliminabili dal primo
membro.
3. eliminazione delle dipendenze ridondanti
Per questo esericizio il primo passo porta all’individuazione delle seguenti
dipendenze funzionali:
1. E→N
2. E→S
3. NL → E
4. NL → M
5. NL → D
6. EN → L
7. EN → C
8. EN → D
9. C→S
10. D→M
11. M →D
12. EP D → A
13. N LCP → A
Il secondo passo porta alle seguenti dipendenze funzionali:
1. E→N
2. E→S
3. NL → E
4. NL → M
5. NL → D
6. E→L
7. E→C
8. E→D
9. C→S
10. D→M
11. M →D
12. EP → A
13. N LCP → A
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Per il terzo passo esaminamo in dettaglio i passaggi con riferimento a due delle
dipendenze funzionali.
Vediamo se la dipendenza E → N implicata dalle altre calcolando la chiusura
iniziando dall’attributo E.
N ̸∈ XF′ = {E, S, L, C, D, M }
quindi la dipendenza non è implicata dalle altre e non può essere eliminata.
Esaminiamo la dipendenza E → S:
S ∈ X + F = {E, S, N, L, C, D, M }
quindi la dipendenza è implicata dalle altre e può essere eliminata.
Al termine delle iterazioni si ottiene il seguente risultato:
1. E→N
2. NL → E
3. NL → D
4. E→L
5. E→C
6. C→S
7. D→M
8. M →D
9. N LCP → A
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.8
Si consideri lo schema della relazione in figura 9.22: La chiave di questa relazione è costituita dagli
attributi Titolo e Copia, e su di essa è definita la dipendenza Titolo Autore Genere. Verificare
se lo schema è o meno in terza forma normale e, in caso negativo, decomporlo opportunamente.
Titolo Autore Genere Copia Scaffale
Decamerone Boccaccio Novelle 1 A75
Divina Commedia Dante Poema 1 A90
Divina Commedia Dante Poema 2 A90
I Malavoglia Verga Romanzo 1 A90
I Malavoglia Verga Romanzo 2 A75
I Promessi Sposi Manzoni Romanzo 1 B10
Adelchi Manzoni Tragedia 1 B20
Figura 9.22 Relazione per l’Esercizio 9.8
Soluzione:
La relazione non è in terza forma normale perché il lato destro della dipendenza funzionale
Titolo Autore Genere non è parte della chiave.
Una possibile decomposizione è:
R1
Titolo Copia Scaffale
Decamerone 1 A75
Divina Commedia 1 A90
Divina Commedia 2 A90
I Malavoglia 1 A90
I Malavoglia 2 A75
I Promessi Sposi 1 B10
Adelchi 1 B20
R2
Titolo Autore Genere
Decamerone Boccaccio Novelle
Divina Commedia Dante Poema
I Malavoglia Verga Romanzo
I Promessi Sposi Manzoni Romanzo
Adelchi Manzoni Tragedia
La relazione è in forma normale di Boyce-Codd, perché la chiave per R2 è Titolo, che è anche il
lato sinistro della dipendenza funzionale.
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.9 Si consideri la relazione in figura 9.23 in cui CM e CD sono, ri-
spettivamente, abbreviazioni di CodiceMateria e CodiceDocente e l’attributo
CS assume valori di tipo stringa che indicano in qualche modo il corso di studio
o i corsi di studio cui un corso è destinato. Individuare la chiave (o le chiavi) e
CM Materia CS Sem. CD NomeDoc Dipartimento
I01 Analisi I Inf I NR1 Neri Matematica
I01 Analisi I El I NR2 Neri Matematica
I02 Analisi II El-Inf I NR1 Neri Matematica
I04 Fisica I El II BN1 Bianchi Fisica
I04 Fisica I Mec I BR1 Bruni Meccanica
I04 Fisica I Inf I BR1 Bruni Meccanica
I05 Fisica II El II BR1 Bruni Meccanica
I06 Chimica Tutti I RS1 Rossi Fisica
Figura 9.23 Relazione per l’esercizio 9.9
le dipendenze funzionali definite su di essa (ignorando quelle che si ritiene sia-
no eventualmente “occasionali”) e spiegare perché essa non soddisfa la BCNF.
Decomporla in BCNF nel modo che si ritiene più opportuno.
Soluzione
Dipendenze:
• CM →Materia
• Materia →CM
• CM CS →Sem. CD
• CD → NomeDoc Dipartimento
Chiavi:
• CM, CS
• Materia, CS
Decomposizione:
• M ATERIE (CM, Materia)
• C ORSI (CM, CS, Sem, Docente)
• D OCENTI (CD, NomeDoc, Dipartimento)
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.10 Considerare la relazione in figura 9.24, che contiene informazio-
ni relative ai ristoranti di una città, da riportare in una guida turistica.
Cod Nome Indirizzo CT Tipo CC Carta CZ Zona
342 Da Piero V. Larga 32 R Region. V VISA C Centro
342 Da Piero V. Larga 32 R Region. A AmEx C Centro
421 Buono Vic. Corto 1 R Region. A AmEx C Centro
425 Paris V. Lunga 4 I Internaz. D Diners N Nord
425 Paris V. Lunga 4 I Internaz. A AmEx N Nord
655 Canton V. Breve 2 C Cinese V VISA O Ovest
Figura 9.24 Relazione per l’esercizio 9.10
Si noti che CT, CC e CZ sono, rispettivamente, abbreviazioni di CodiceTipo,
CodiceCarta e CodiceZona.
Individuare la chiave (o le chiavi) della relazione e le dipendenze funzionali defi-
nite su di essa (ignorando quelle che si ritiene siano eventualmente “occasionali”)
e spiegare perché essa non soddisfa la BCNF.
Decomporla in BCNF nel modo che si ritiene più opportuno.
Soluzione
Dipendenze:
• Cod → Nome, Indirizzo, Tipo, Zona
• Nome → Cod
• CT → Tipo
• Tipo → CT
• CC → Carta
• Carta →CC
• Zona → CZ
• CZ → Zona
Chiavi:
• Cod, CC
• Cod, Carta
• Nome, CC
• Nome, Carta
Decomposizione:
• R ISTORANTI (Cod, Nome, Indirizzo, CT, Zona)
• T IPI C UCINA (CT, Tipo)
• C ARTE D I C REDITO (CC, Carta)
• Z ONE (CZ, Zona)
• C ONVENZIONE (Cod, CC)
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.11
Si consideri lo schema Entità-Relazione in figura 9.25. Sui dati descritti da questo schema valgono
le seguenti proprietà:
Un giocatore può giocare per una sola squadra (o per nessuna);
Un allenatore può allenare una sola squadra (o nessuna);
Una squadra ha un solo allenatore, diversi giocatori e appartiene a un’unica città.
Verificare se lo schema soddisfa la forma normale di Boyce-Codd e, in caso negativo, ristrutturarlo
in un nuovo schema in maniera che soddisfi tale forma normale.
SQUADRA
ALLENATORE
COMPOSIZIONE GIOCATORE
CITTÀ
Figura 9.25 Uno schema da sottoporre alla verifica di normalizzazione
Soluzione:
Le dipendenze funzionali presenti nello schema sono:
Giocatore Squadra.
Allenatore Squadra
Squadra Città
La chiave per la relazione Composizione è Giocatore e così lo schema non è in forma normale di
Boyce-Codd.
Una possibile ristrutturazione è:
ALLENATORE ALLENA SQUADRA CONTRATTO GIOCATORE
APPARTIENE
CITTÀ
In questo nuovo schema ci sono solamente relazioni binarie, e quindi rispetta la forma normale di
Boyce-Codd.
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.12
Consideriamo la relazione in figura 9.26 e le sue seguenti possibile decomposizioni:
Reparto, Cognome in una relazione e Cognome, Nome, Indirizzo nell’altra;
Reparto, Cognome, Nome in una relazione e Nome, Indirizzo nell’altra;
Reparto, Cognome, Nome in una relazione e Cognome, Nome, Indirizzo nell’altra;
Individuare, con riferimento sia all’istanza specifica sia all’insieme delle istanze sullo stesso
schema (con le proprietà naturalmente associate), quali di tali decomposizioni sono senza perdita.
Reparto Cognome Nome Indirizzo
Vendite Rossi Mario Via Po 20
Acquisti Rossi Mario Via Po 20
Bilancio Neri Luca Via Taro 12
Personale Rossi Luigi Via Taro 12
Figura 9.26 Relazione per l’Esercizio 9.12
Soluzione:
La chiave di questa relazione è Reparto. Assumiamo che le persone siano identificate dal Cognome
e dal Nome.
La relazione ha una dipendenza funzionale: Cognome, Nome Indirizzo
1) Questa soluzione non è corretta in generale; il join tra le due relazioni produce informazioni
spurie. Infatti l’attributo Cognome non identifica una persona, e il join associerà a un Reparto
tutte le persone con lo stesso cognome. Con questa istanza otterremo:
Reparto Cognome Cognome Nome Indirizzo
Vendite Rossi Rossi Mario Via Po 20
Acquisti Rossi Neri Luca Via Taro 12
Bilancio Neri Rossi Luigi Via Taro 12
Personale Rossi
Reparto Cognome Nome Indirizzo
Vendite Rossi Mario Via Po 20
Vendite Rossi Luigi Via Taro 12
Acquisti Rossi Mario Via Po 20
Acquisti Rossi Luigi Via Taro 12
Bilancio Neri Luca Via Taro 12
Personale Rossi Luigi Via Taro 12
Personale Rossi Mario Via Po 20
2) Questa decomposizione è corretta in questa particolare istanza del database, perché non ci sono
due persone con lo stesso nome e così il join tra le due relazioni da ancora la relazione
originaria, ma generalmente parlando il Nome non identifica una persona e il loro join può dare
una relazione con delle informazioni spurie.
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
3) Questa decomposizione è sempre corretta perché entrambi gli attributi Cognome e Nome sono
presenti nelle relazioni, e la seconda relazione ha Cognome e Nome come chiave.
Questa decomposizione produce un database in forma normale di Boyce-Codd.
Reparto Cognome Nome
Vendite Rossi Mario
Acquisti Rossi Mario
Bilancio Neri Luca
Personale Rossi Luigi
Cognome Nome Indirizzo
Rossi Mario Via Po 20
Neri Luca Via taro 12
Rossi Luigi Via taro 12
Reparto Cognome Nome Indirizzo
Vendite Rossi Mario Via Po 20
Acquisti Rossi Mario Via Po 20
Bilancio Neri Luca Via taro 12
Personale Rossi Luigi Via taro 12
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.
Esercizio 9.13
Consideriamo nuovamente la relazione in figura 9.26. Individuare quali delle seguenti
decomposizioni conservano le sue dipendenze:
Una relazione sugli attributi Reparto, Cognome e Nome e l’altra sugli attributi Cognome e
Indirizzo.
Una relazione su Reparto, Cognome e Nome e l’altra su Cognome, Nome e Indirizzo.
Una relazione su Reparto e Indirizzo e l’altra su Reparto, Cognome e Nome.
Soluzione:
1) Questa decomposizione non conserva la dipendenza Cognome, Nome Indirizzo, perché gli
attributi coinvolti sono suddivisi tra le due relazioni. Così, se abbiamo bisogno, per esempio, di
cambiare l’indirizzo riferito al reparto “Vendite”, possiamo fare questa operazione soltanto
cambiando tutte le tuple della seconda relazione che hanno come Cognome “Rossi”; ma questo
non è corretto perché ci sono due persone con lo stesso cognome e solo una è riferita al reparto
“Vendite”. Anche questa decomposizione non è corretta.
2) Questa decomposizione è corretta, perché la seconda relazione contiene tutti gli attributi della
dipendenza funzionale.
3) Questa decomposizione è sbagliata, perché come nel punto 1, gli attributi della dipendenza
funzionale sono divisi in due relazioni; in questo caso è possibile aggiungere tuple nella prima
relazione, associando ai reparti un indirizzo che non si riferisce alla persona corretta (mentre è
impossibile nella relazione originaria).
Paolo Atzeni, Stefano Ceri, Piero Fraternali, Stefano Paraboschi e Riccardo Torlone
Basi di dati 4/ed, © 2014 McGraw-Hill Education (Italy) S.r.l.