Dato uno schema di relazione e un insieme di dipendenze funzionali su , esiste sempre una decomposizione tale che:
- è in 3NF
- preserva
- ha un join senza perdita
e tale decomposizione può essere calcolata in tempo polinomiale.
- ci interessa una qualunque copertura minimale di dipendenze funzionali definite su (se ce ne fossero varie, potremmo voler scegliere quella con meno dipendenze, ma non è tra i nostri scopi)
- quindi, come input dell’algoritmo, ci basta averne una qualunque
algoritmo
- input: uno schema di relazione e un insieme di dipendenze su che sia una copertura minimale
- output: una decomposizone di che preserva , di cui ogni schema è in 3NF
latex algo da flavio
spiegazione
- prendo gli attributi che non compaiono nelle dipendenze di e li metto in
- se ho aggiunto qualcosa a :
- tolgo quello che ho aggiunto in da
- lo metto in
- se esiste una dipendenza in che coinvolge tutti gli attributi in (in cui non ci sono più quelli che ho eventualmente tolto):
- metto in direttamente tutta
- else:
- metto in tutti gli attributi presenti nelle dipendenze di
teorema
Sia uno schema di relazione e 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 è in 3NF
- preserva
dimostrazione
preserva (ovvero )
Sia .
Poiché per ogni dipendenza funzionale si ha , si ha che tutte le dipendenze di saranno sicuramente in . Quindi, e quindi .
- (l’inclusione è banale, in quanto, per definizione, )
ogni schema di è in 3NF
abbiamo tre diversi casi che si possono presentare:
- ⇒ ogni attributo in fa parte della chiave (gli attributi in sono quelli non coinvolti nelle dipendenze, quindi dovranno necessariamente essere nella chiave) e è in 3NF
- (ovvero esiste una dipendenza funzionale in che coinvolge tutti gli attributi in ) ⇒ visto che è una copertura minimale, la dipendenza avrà forma . Abbiamo quindi che è superchiave per (determina e per riflessività) - a noi interessano le chiavi e non le superchiavi, ma:
- non ci può essere un sottoinsieme di che determini tutto lo schema, perché partiamo da una copertura minimale (per definizione non ci può essere tale che , altrimenti avremmo ridotto a )
- quindi, a qualunque manca determinare , il che implica che è chiave
- infatti, prendiamo una qualsiasi dipendenza in - abbiamo due casi:
- ⇒ (è impossibile che ci siano due dipendenze con lo stesso dipendente visto che è una copertura minimale)
- ⇒ quindi, visto che è chiave, è primo
- ⇒ non c’è un , ci sono diversi - quindi, è superchiave per , ed è anche chiave per il ragionamento di sopra (copertura minimale non esiste un che determina ).
- prendiamo un qualunque tale che :
- ⇒ (per lo stesso ragionamento di prima - copertura minimale)
- ⇒ (è primo)
(teorema) avere anche un join senza perdita
Per avere anche un join senza perdita, se nessun sottoschema contiene una chiave, basta aggiungere un sottoschema che ne contenga una (una qualsiasi).
- ha un join senza perdita
è sempre possibile avere una decomposizione con schemi in 3NF, che preservi F e abbia un join senza perdita?
sì! abbiamo visto un algoritmo che, in tempo polinomiale, fornisce questa decomposizione
domande orale
possibili domande orale
- dimostrazione preserva e ogni schema di è in 3NF