Related
Introduzione
Come abbiamo visto una decomposizione deve rispettare queste 3 condizioni:
- Ogni sotto-schema deve essere 3NF
- La decomposizione deve preservare le dipendenze funzionali
- Deve essere possibile ricostruire ogni istanza legale dello schema originale tramite join naturale di istanze della decomposizione
Abbiamo anche visto come verificare che una decomposizione rispetti queste regole, ma non abbiamo ancora visto come calcolare una decomposizione valida.
Sempre possibile ?
Si, è sempre possibile trovare una decomposizione valida.
Algoritmo
La decomposizione che si ottiene dall’algoritmo che studieremo non è l’unica possibile che soddisfi le condizioni richieste. Lo stesso algoritmo, a seconda dell’input di partenza può fornire risultati diversi e tuttavia corretti.
Prima di continuare è importante conoscere il concetto di copertura minimale di un insieme di dipendenze funzionali.
Input/Output
Input:
- uno schema relazionale
- un insieme di dipendenze funzionali che è una copertura minimale (se abbiamo più coperture è consigliato utilizzare quella con il minor numero di dipendeze)
Output una decomposizione di tale che:
- ogni schema relazionale in è in 3NF
- preserva
- ha un join senza perdita
Spiegazione
Primo FOR: inserisce dentro tutti gli attributi che non compaiono in nessuna delle dipendenze funzionali di .
Primo IF: Se non è vuoto allora
- Rimuoviamo da tutti gli attributi che non compaiono mai nelle dipendenze di (ovvero facciamo )
- Inseriamo in l’insieme di attributi (quindi avremo che )
Secondo IF: se
else:
oss: l’algoritmo richiede tempo polinomiale
Dimostrazione
Abbiamo dette che questo algoritmo ci permette di ottenere un decomposizione che rispetta queste due proprietà:
- Ogni sotto-schema deve essere 3NF
- La decomposizione deve preservare le dipendenze funzionali
Dimostriamolooo!! 😖
Dimostrazione: ogni sotto-schema deve essere 3NF
Ci sono 3 modi per aggiungere degli insiemi di attributi:
1° if:
2° if:
if else:
1° IF
Eseguiamo ovvero aggiungiamo a l’insieme degli attributi non coinvolti in alcuna dipendenza dipendenze di .
Banalmente è in 3NF perché sicuramente ogni attributo in appartiene alla chiave visto che non esistono dipendenze in per raggiungerli.
2° IF
Eseguiamo ovvero aggiungiamo ad l’insieme degli attributi coinvolti nelle dipendenze di .
oss: al passaggio precedente abbiamo effettuato quindi non contiene gli attributi che non sono coinvolti nelle dipendenze di .
Teorema
Sia uno schema di relazione ed un insieme di dipendenze funzionali su , che è una copertura minimale. L’algoritmo di decomposizione permette di calcolare in tempo polinomiale una decomposizione di tale che:
- ogni schema di relazione è in 3NF
- preserva
Dimostrazione
Dimostriamo separatamente le due proprietà della decomposizione
preserva
Sia . Poiché per ogni dipendenza funzionale si ha che (è proprio uno dei sottoschemi), si ah che questa dipendenza di sarà sicuramente in , quindi e, quindi . L’inclusione è banalmente verificata in quanto per definizione,