Homepage  Il progetto dsy.it è l'unofficial support site dei corsi di laurea del Dipartimento di Scienze dell'Informazione e del Dipartimento di Informatica e Comunicazione della Statale di Milano. E' un servizio degli studenti per gli studenti, curato in modo no-profit da un gruppo di essi. I nostri servizi comprendono aree di discussione per ogni Corso di Laurea, un'area download per lo scambio file, una raccolta di link e un motore di ricerca, il supporto agli studenti lavoratori, il forum hosting per Professori e studenti, i blog, e molto altro...
In questa sezione è indicizzato in textonly il contenuto del nostro forum


.dsy:it. .dsy:it. Archive > Didattica > Corsi A - F > Basi di dati ~ comunicazione digitale
 
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).


Powered by: vbHome (lite) v4.1 and vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento |Licenze | Thanks | Syndacate