normalizzazione Clicca QUI per vedere il messaggio nel forum |
mikypiccolamiky |
ciao a tutti ho dubbi sulla normalizzazione o meglio.. c'è qualcuno che gentilmente puo scrivere i passaggi su come si fa esattamente a trovare chiavi e vedere se è in 3 forma noramle o bcnf???
grazie e scusate se questo post esisteva già ma volevo metterlo in rilievo... |
unid |
ESEMPIO
(ABCD)
AB->D
A->B
A->C
B->C
C->B
Per trovare la chiave bisogna calcolare la chiusura di un elemento.
Se un elemento non appare mai a destra delle dipendenze funzionali è sicuramente una chiave.
Dunque:
A(0)=A
A(1)=ABC
A(2)=ABCD
A è chiave
B(0)=B
B(1)= BC
Al passo successivo non ottengo altro quindi B non è chiave.
C(0)=C
C(1)=BC
Al passo successivo non ottengo altro quindi C non è chiave.
AB è superchiave.
Per vedere se è in BCNF devi controllare che a sinistra delle dipendenze funzionali ci siano sole chiavi.
Per vedere se è in 3NF devi vedere se a a sinistra delle dipendenze funzionali hai chiave o superchiave oppuse, in caso contrario, che quell'elemento che a sx non è chiave, abbia a dx un attributo primo.
(Un attributo è primo se fa parte di una chiave)
In questo caso non è in BCNF perchè ad esempio B->C viola la regola (B non è chiave)
Ma non è nemmeno in 3NF poichè B->C viola la regola (B non è chiave e C non fa parte della chiave) |
mikypiccolamiky |
ciao scusa ma io così non ho capito comunque -.- non è che oggi sei in uni... così m spieghi??? |
mikypiccolamiky |
mi è chiaro la 3fn e il bcnf ma non il come si trovano le chiavi -.- davvero nessuno lo sa fare ??? dai raga l'esame è tra 2 giorni.. vi prego... |
para |
a me oltre a trovare le chiavi non mi è chiara la scomposizione: nel senso avendo le dipendenze funzionali come faccio a sapere come scomporle in due relazioni per poter preservare le dipendenze e avere una lossless join?
ho capito solo che non possono essere disgiunte |
unid |
dunque miky
è semplice.. come ho scritto sopra devi vedere se la chiusura di un elemento ti da tutto l'insieme:
Per farlo devi:
ESEMPIO
(ABCD)
AB->D
A->B
A->C
B->C
C->B
Sai per certo che se un elemento (una lettera) non appare a destra della freccia, questo sarà chiave.
Per esempio A non appare a destra, verifichiamo che è chiave:
Al primo passo da A trovi: ABC, cioè tutto quello che è "puntato" da A
Al secondo passo, devi usare una dipendenza che abbia come premessa (come lettera a sx) una tra ABC (o anche una combinazione di esse), quindi ad esempio AB->D
così troviamo la chiusura: ABCD ed è fatta, A è chiave
Poi ripeti lo stesso per le altre come indicato sopra e trovi (se ci sono) le altre chiavi |
para |
il procedimento per trovare le chiavi si può fare in vari modi anche eliminando di volta in volta ciò che sta a destra della dipendenza funzionale se abbiamo ciò che sta a sinistra...
unid invece avrei due piccole domande posso??
la prima è come faccio a sapere quale scomposizione effettuare per avere la lossless join e la preservazione delle dipendenze??
e poi un'altra domanda sull'identificatore esterno che non capisco...
grazie |
mikypiccolamiky |
come funziona l'algoritmo di scmposizione??? finalmente ho capito l chiavi :D grazie a tutti per aver scritto del vostro meglio :) |
para |
E quale algoritmo usi per le chiavi??io mi trovo molto bene con quello che: se per esempio ho R(A,B,C,D) e le dipendenza funzionali
ABC-->D qui la chiave è ABC poi applico anche l'altra dipnedenza e ho AB
A-->C qui la chiave è ABD
quindi la chiave totale è AB in quanto è compresa in ABD
almeno così ragiono io... e anche gli esercizi del prof
per la scomposizione io ho capito che se devo trovare una scomposizione in 3nf devo applicare la minimalità
invece per la bcnf devo fare tante sottorelazioni a seconda delle chiavi....
te come hai capito?? |
mikypiccolamiky |
io nn ho capito per questo sto cercando qualcuno che mi dai un metodo esatto da fare ogni volta, comunue per le chiavi non faccio così anche x' nel tu esempio è sbagliato le chiavi sono abc e bcd perchè sai per certo che le chaivi non possono essere ne a ne d visto ke sono a destra per questo motivo sai ke nella chiave sono presenti b e c allora guardando se prendi bc in (abc->d) senza guardare a, sai che ti restituisce d e d in questo caso d->a quindi per trovare il tutto sai ke la kiave è bcd, mentre l'altra ke si vede proprio ad occhio è abc la quale t permette d trovare d |
mikypiccolamiky |
scusami avevo visto male la seconda relazione credevo fsse d-> a comunque cosa intendi quando dici : poi applico anche l'altra dipnedenza e ho AB??? |
para |
mi sa che hai ancora le idee confuse almeno secondo me innanzitutto io ho detto che la chiave è AB e a destra ho D e C
quindi D e C non apparterranno sicuramente alla chiave...
scusa mi sono espresso male prima ABC e ABD sono i passaggi intermedi non sono le chiavi
cmq ti ho mndato un mex anche in pm |
mikypiccolamiky |
no riesco a farli mi esce come te avevo solo sbagliato a leggere -.- :( |
para |
intendo che se applichi ricorsivamente le dipendenze fino a che le puoi applicare riesci ad arrivare alla chiave infatti se tu noti con la prima dipendenza puoi eliminare d perchè avendo abc hai anche d e poi ad abc "applico la dipendenza a-->c che mi permette di eliminare c in quanto se ho a ho anche c e quindi con ab riesco ad individuare tutta la tupla |
mikypiccolamiky |
ah ok... bho si ho capito cosa fai.. io lo faccio direttamente... va bhe ma la scomposizione quindi?esattamente cosa devo fare? |
para |
Eh esattamente io non so come fare infatti ho chiesto più giorni fa...ma non ho ancora ricevuto risposta
:-) |
para |
ma te hai capito bene la progettazione concettuale??nel senso vedendo un'analisi riesci a cavartela senza problemi???
miky ti ho mandato il mex in pm |
Svarions |
volevo inanzi tutto fare una precisazione, per levare qualche dubbio: se un elemento non compare mai a dx delle dipendenze funzionali questo NON è per forza una CHIAVE ma bensì è sicuramente un elemento primo (cioè appartiene ad una chiave o da solo o con altri in questo particolare caso apparterrà a tutte le chiavi della F).
per quello che riguarda la scomposizione è abbastanza semplice. guardi la F quando trovi una dipendenza funzionale che non ti piace (o meglio che non è in bcnf o in 3nf dipendente da quello che si vuole ottenere) metti gli attributi che la compongono in una scomposizione (la s1 delle slide) e come dipendenze funzionali tutte e sole le dipendenza funzionali appartenenti alla F iniziale del tipo X -> Y con X, Y sottoinsiemi di U di S1. poi prendi tutti e soli gli elementi di U della R iniziale che non sono in S1 e li metti in S2 aggiungendo una chiave di S1 (arbitraria, per permettere poi di joinare S1 con S2) e scrivi come dipendenze funzionali di S2 tutte e solo le dipendenze della F iniziale del tipo X->Y con X e Y sottoinsiemi di U di S2.
Questi passi ti fanno calcolare scomposizioni in bcnf (e quindi anche in 3nf) ma non è detto che preservino tutte le dipendenze funzionali di F. di solito all'esame è richiesto che preservi tutto per vedere se preserva basta fare F1 U F2 e vedere se è uguale a F (dove con F1 e F2 intendo rispettivamente le dipendenze funzionali su S1 e S2).
|
|
|
|