Index
Related
TLDR
Introduzione
Una decomposizione di uno schema relazionale è un processo che consiste nel suddividere uno schema relazionale in più schemi più piccoli e indipendenti, mantenendo le relazioni tra di loro.
Si può scomporre una relazione per diversi motivi solitamente si gli obbiettivi ridurre la complessità dello schema originale, migliorando la gestione dei dati e riducendo la ridondanza.
3NF
Abbiamo visto che uno schema in 3NF ha delle buone proprietà che lo rendono preferibile ad uno che non è in 3NF.
Quando si progetta una base di dati è importante di produrre uno schema in cui ogni relazione sia in 3NF. Se tuttavia ci trovassimo a produrre uno schema che non è in 3NF dovremmo procedere ad una fase di decomposizione, dove suddividiamo lo schema non 3NF in un insiemi di schemi 3NF.
Definizione di Decomposizione
Sia uno schema di relazione. Una decomposizione di è una famiglia di sottoinsiemi di che ricopre
In altre parole:
- Decomporre lo schema significa definire dei sottoschemi che contengono ognuno un sottoinsieme degli attributi di . I sottoschemi possono avere attributi in comune, e la loro unione deve necessariamente contenere tutti gli attributi di .
- Quindi è un insieme di attributi, una decomposizione di è una famiglia di insiemi di attributi.
Decomposizione di uno schema 3NF
Uno schema non in 3NF può essere decomposto in più modi in un insieme di schemi 3NF, ma non detto che tutti questi schemi siano egualmente validi.
Regole
Quando si decompone uno schema per ottenere una 3NF dobbiamo ricordare che:
- Occorre preservare le dipendenze funzionali che valgono sullo schema originario.
- Occorre permettere di ricostruire tramite join lo schema originario, senza aggiunta di informazioni estranee.
Esempio 1
Schema relazionale: Dipendenze Funzionali:
Questo schema non è in 3NF per via della dipendenza transitiva
B -> C
dato che la chiave èA
.È possibile decomporre questo schema in due modi tali che rispettano entrambi le condizione per essere 3NF:
Decomposizione 1:
- con
- con
Decomposizione 2:
- con
- con
Entrambi gli schemi sono in 3NF, tuttavia la 2° soluzione non va bene, perché?
Consideriamo le istanze legali ottenute e li loro join naturale:
Come possiamo notare il join naturale non è un istanza legale di perché non rispetta la dipendenza , infatti dobbiamo preservare tutte le dipendenze presenti in .
Esempio 2
Schema relazionale: Dipendenze Funzionali:
Questo schema non è in 3NF dato che entrambe le dipendenze sono parziali, la chiave è
AC
.È possibile decomporre questo schema in:
- con
- con
Entrambe le istanze sono in 3NF, e rispettano tutte le dipendenze di ma non va comunque bene, infatti:
Pendiamo un’istanza legale di R:
Decomponiamola in base ai due schemi visti prima:
In teoria facendo un join dovremmo ricostruire l’istanza originale ma non è così:
Le ultime due tuple sono estranee all’istanza originale, c’è stata quindi perdita di informazione.