Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Corsi A - F > Basi di dati ~ comunicazione digitale > Esempi di Normalizzazione e decomposizione lossless join
Pages (3): « 1 2 [3]   Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
elias86
.precettore.

User info:
Registered: Nov 2005
Posts: 86 (0.01 al dì)
Location: Lissone
Corso: Comunicazione Digitale
Anno: 4
Time Online: 1 Day, 0:08:55 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by karplus
Formula? :?
Sei fuori strada di abbastanza. :D

Al passo x0 (il primo passo) ci sono solo gli attributi di partenza che stai testando, ti devi chiedere se al passo x1 se ne aggiungono altri.
Dato che nè B nè C compaiono mai a sx delle dipendenze funzionali, ovvero non implicano mai niente, al passo x(1) hai ancora bc, ovvero le stesse di partenza.

Ergo bc non é chiave perchè come risultato finale non hai avuto ABCD.

Mi rendo conto che ti avrò confuso le idee, ma la spiegazione é questa, devi digerire ancora un po' la procedura.


!!!!!!!!! invece B e C compaiono a sinistra: abc->d, d->a !!!!!!!!!!!!!

volevi dire forse a dx?

Un'altra cosa! Tu dici:

Ergo bc non é chiave perchè come risultato finale non hai avuto ABCD.

Perchè devo avere ABCD come risultato???

Grazie, ciao!!!

__________________
Vendo libri di Matematica discreta (eserciziario) e Informatica applicata al suono
Cerco URGENTEMENTE appunti del corso di "Economia e gestione dell'impresa" della prof.ssa Ripamonti dell'A.A. 2010-2011 chi li avesse mi contatti per favore avrei bisogno di fotocopiarli. Grazie.

04-07-2009 15:10
Click Here to See the Profile for elias86 Click here to Send elias86 a Private Message Visit elias86's homepage! Find more posts by elias86 Add elias86 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
karplus
.grande:maestro.

User info:
Registered: Jun 2004
Posts: 1207 (0.17 al dì)
Location:
Corso: Informatica per la Comunicazione (magistrale)
Anno:
Time Online: 7 Days, 2:28:19 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

BC non compare mai a sinistra da solo o nei suoi singoli attributi! A sx compare si ABC ma non compare mai nè B, nè C, nè BC.

Una chiave per essere tale deve portare ad avere tutti gli attributi della relazione. Tutti gli attributi delle relazione sono ABCD e li ricavi dal testo dell'esercizio, ovvero:

Es 2
Si consideri R(A,B,C,D); per ciascuno dei seguenti gruppi di dipendenze
funzionali

04-07-2009 15:24
Click Here to See the Profile for karplus Click here to Send karplus a Private Message Find more posts by karplus Add karplus to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
ad676556
.consigliere.

User info:
Registered: Oct 2005
Posts: 135 (0.02 al dì)
Location:
Corso:
Anno:
Time Online: 1 Day, 7:25:31 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
Re: Esempio Normalizzazione

Originally posted by Voodoo
Posto un esercizio di normalizzazione,presente sul sito del prof nel pdf es_misti.pdf. Li ha risolti e commentati Svarions,io giro il tutto perchè possa essere utile a tutti e raccogliere il materiale necessario:
code:
Es 2 Si consideri R(A,B,C,D); per ciascuno dei seguenti gruppi di dipendenze funzionali 1. ABC -> D, D->A; 2. AB->C, AB->D, C->A, D->B; determinare: a) Tutte le chiavi di R. b) Se R è in 3NF. c) Se R è in BCNF; nel caso in cui non lo fosse, discutere l’esistenza (ed eventualmente proporre) di una decomposizione che preservi le dipendenze funzionali.


Prima di tutto cominciamo con la prima f {abc ->d e d -> a}

Dobbiamo trovare le chiavi allora si guarda quali attributi (lettere) non compaiono mai a destra delle dipendenze funzionali, nel nostro caso bc. Partiamo con bc perché non compaiono mai a destra nelle dipendenze funzionali.
A questo punto sappiamo che bc sono sicuramente attributi primi cioè o sono chiave o fanno parte di una chiave (avendoli calcolati in questo modo faranno minimo parte di tutte le chiavi). Per vedere se sono chiavi si calcola la chiusura. Ricordiamo che per la chiusura vale che quando x(n-1) = x(n) allora si ha finito di calcolare la chiusura per quel determinato attributo:
code:
bc* x(o) = bc x(1) = bc

quindi non sono chiave, se lo fossore stati allora sarebbero stati anche l'unica chiave per quello detto prima (cioè che ogni chiave li deve contenere) dato che non sono chiavi ci resta da provare abc e bcd:
code:
abc* x(0) = abc x(1) = abcd bcd* x(0) = bcd x(1) = abcd

quindi sono entrambi chiavi. Deriviamo che le chiavi sono abc e bcd. Non esistendo altre combinazioni che contengono bc e che non contengono ne a ne b (anche singolarmente) allora sono le uniche chiavi (tutte le altre combinazioni sarebbero SUPER CHIAVI).
Abbiamo provato queste 2 combinazioni perché so che bc deve essere compreso nella chiave e che da solo non è chiave quindi la più piccola combinazione di attributi che contiene bc è bc più un attributo e dato che gli attributi sono abcd ci resta solo da provare bc + a e bc + d per capirci se ipoteticamente lo schema fosse stato abcde avremmo testato anche bc + e (bce).

Trovate le chiavi passiamo alla domanda 2. per vedere se è in 3nf deve essere che per ogni dipendenza funzionale:

  • o a sinistra abbiamo una chiave o superchiave della f
  • o a destra abbiamo un attributo primo

siccome nel nostro caso abbiamo che gli attributi primi (quelli che
compaiono in una o più chiavi) sono abcd (cioè tutti) allora è sicuramente in 3nf (a destra avremo per forza solo attributi primi).

Ora passiamo alla domanda 3. per vedere se è in bcnf deve essere per ogni dipendenza funzionale deve essere verificato che

  • a sinistra abbiamo una chiave o superchiave della f


abc -> d essendo abc chiave va bene ma d -> a essendo che d non è ne chiave ne superchiave ma solo un attributo primo ci fa affermare che non è in bcnf.

Ora passiamo all'ultima domanda cioè fare una scomposizione che sia bcnf e che preservi tutte le dipendenze funzionali. Cominciamo con il dire che una scomposizione che preserva tutte le dipendenze funzionali è quando l'unione delle dipendeze funzionali delle scomposizione coincide alle dipendenze funzionali dello schema prima della scomposizione (la nostra f).
Dato che quello che non ci va bene è d -> a (non mi va bene d -> a perchè è la dipendenza che rende lo schema non in BCNF e d -> a essendo che d non è ne chiave ne superchiave ma solo un attributo
primo ci fa affermare che non è in bcnf) proviamo a scomporla in
s1(a,d) con f1(d -> a) e non ci vuole un genio a capire che in questa
scomposizione la chiave è d ed è quindi in bcnf, quello che ci rimane è s2(b,c,d) con f2().
Per calcolare la seconda scomposizione dobbiamo prendere tutti gli attributi nello schema di partenza meno gli attributi utilizzati nella prima scomposizione + una chiave della prima scomposizione (quindi s(a,b,c,d) togliamo (d,a) di S1 e aggiungiamo (d) che è la chiave della di f1 cioè appunto s2(b,c,d)). Cioè S – S1 +(unione) CHIAVE DI S1 [in teoria questo che abbiamo scritto è sbagliato formalmente, dovremmo mettere u di S e u di S1]. per vedere che dipendenze ci sono nelle scomposizioni basta vedere di quali dipendenze in F hai gli attributi in una scomposizione, quindi si la seconda non ha nessuna dipendenza funzionale in
quanto manca la a. Che io sappia non esiste un algoritmo per la
scomposizione, ma se proprio ne vuoi uno devi provare tutte le scomposizioni possibili. È banale capire che non esiste una scomposizione in bcnf vedendo la prima dipendenza funzionale (abc -> d) che non potrà mai essere preservata indipendentemente da come scompongo in quando ha tutti gli attributi dello schema. Devi cercare di capire bene come si scompone, poi si vede a occhio cosa vale la pena di tentare e se è scomponibile.

Facendo f1 U f2 viene fuori f3 (d -> a) che NON coincide con f perché manca abc -> d. si potrebbero provare altre scomposizioni ma questa è la più intelligente e le altre darebbero un risultato simile se non peggiore, quindi possiamo affermare che NON ESISTONO
SCOMPOSIZIONI IN BCNF CHE MANTENGONO TUTTE LE DIPENDENZE FUNZIONALI.

Un furbone potrebbe pensare che potremmo scomporre in s1(d,a) f1(d -> a) e s2(a,b,c,d) con f2(abc->d) ma questa chiaramente è una scomposizione sbagliata perché non usa il metodo di scomposizione di cui ho parlato prima e inoltre è inlogico avere un s1 che è un sottoinsieme di s2 e per concludere è illogico anche avere una scomposizione che coincide come schema con lo schema iniziale. Sarebbe come dire in uno schema reale di esempio
cliente(nome, cognome, telefono) scomposto in clienteScomposto1(nome,cognome, telefono) e clienteScomposto2(cognome, telefono) che chiaramente è un assurdo.

--------------------------------------------------------------------------

Passiamo al secondo gruppo di dipendenze.
Troviamo le chiavi di R.
PRIMO PASSAGGIO: se esistono elementi che non sono mai a dx nelle dipendenze funzionali allora questi elementi sono elementi primi E PARTECIPERANNO A TUTTE LE CHIAVI. Tutti gli elementi sono almeno una volta a dx quindi niente.
SECONDO PASSO: provo le chiavi. Tramite l'osservazione precedente si potrebbe dedurre quali sono le chiavi ma diciamo che noi non ci arriviamo allora passiamo con i tentativi:
- siccome il passo 1 non ha dato risultati dobbiamo provare le chiavi
composte da 1 solo attributo:
code:
A* x(0) = A X(1) = A A* = A B* X(0) = B X(1) = B B* = B C* X(0) = C X(1) = CA X(2) = CA C* = CA D* X(0) = D X(1) = DB X(2) = DB D* = DB

- non ci sono chiavi qua, allora proviamo con 2 attributi tutte le
combinazioni:
code:
AB* X(0) = AB X(1) = ABCD X(2) = ABCD AB* = ABCD AC* X(0) = AC X(1) = AC X(2) = AC AC* = AC AD* X(0) = AD X(1) = AD X(2) = ABD X(3) = ABCD AD* = ABCD BC* X(0) = BC X(1) = BC X(2) = ABC X(3) = ABCD BC* = ABCD BD* X(0) = BD X(1) = BD X(2) = BD BD* = BD DC* X(0) = DC X(1) = DC X(2) = ABCD DC* = ABCD

Riassumendo le chiavi sono AB, AD, BC, DC. Gli attributi primi sono A,B,C,D (cioè tutti gli attributi). Abbiamo trovato qualche chiave ora dobbiamo vedere se è utile (e nel caso provare) fare la chiusura di 3 attributi. Partiamo dagli attributi che non sono chiavi testati nel passaggio prima cioè AC e BD.
- Le combinazioni possibili per AC sono ABC ACD ma AB è chiave
quindi ABC è sicuramente una superchiave e CD è chiave quindi anche ACD è sicuramente superchiave quindi qua non dobbiamo provare niente.
Le combinazioni possibili per BD sono ABD (ma AB è chiave) e BCD
(ma BC è chiave). Quindi nemmeno qua non dobbiamo provare niente.
Dato che il passaggio precedente non ha dato SOLO SUPERCHIAVI è inutile provare con 4 attributi inquanto otterremmo solo super chiavi.
Nota bene:Questo è il sistema completo per trovare le chiavi adesso proverò a darvi qualche dritta per ridurre il numero di passi:
- osservando l'insieme delle dipendenze funzionali notiamo che a occhio si poteva evitare di fare i calcoli con un attributo solo
- notiamo anche subito a occhio che AB è chiave quindi per trovare le altre chiavi era sufficiente mettere A + qualcosa che punta a B (se c'è e se ce ne sono più di uno creiamo una chiave per ogni attributo) e nel nostro caso è D e B + qualcosa che punta a A (se c'è e se ce ne sono più di uno creiamo una chiave per ogni attributo) e nel nostro caso era C per finire qualcosa che punta ad A più qualcosa che punta a B cioè CD.
- in generale un'osservazione accurata semplifida di molto i calcoli,
cercate però se avete tempo di usare l'algoritmo proposto prima.

SECONDA DOMANDA:

è ovviamente in 3NF in quanto tutti gli attributi sono primi.

TERZA DOMANDA:

PRIMO PASSO: per essere in BCNF a sinistra di tutte le dipendenze funzionali deve esserci una chiave o una super chiave della relazione. Nel nostro caso abbiamo AB->C, AB->D, C->A, D->B di cui
code:
- AB->C va bene perché AB è chiave - AB->D va bene perché AB è chiave - C->A non va bene perché C non è ne chiave ne super chiave - D->B non va bene perché D non è ne chiave ne super chiave


Siccome non è in BCNF proviamo a vedere se esitono delle scomposizioni in grado di renderla tale.
SECONDO PASSO: proviamo qualche scomposizione.

PRIMO TENTATIVO: prendiamo la prima dipendenza che nn ci va bene e mettiamola da parte evito di riscrivere le regole per determinare il restante di una scomposizione (l'S2 per intenderci)
code:
S1 (C,A) F1 (C->A) S2 (BCD) F2 (D->B)

Unendo f1 con f2 non ottengo la f iniziali quindi il primo tentativo ha
fallito
SECONDO TENTATIVO: prendiamo la seconda dipendenza funzionale con non ci va bene
code:
S1 (D,B) F1 (D -> B) S2 (A,C,D) F2 (C -> A)

Unendo f1 con f2 non ottengo la f iniziali quindi il primo tentativo ha
fallito.

ALTRI TENTATIVI: Lascio a voi testare altri tentativi come per esempio S1(A,B,C) S2(D) tanto tutti daranno lo stesso risultato cioè negativo. Possiamo concludere che non esiste una decomposizione che preservi le dipendenze funzionali.
OSSERVAZIONI: si poteva capire che non esisteva una decomposizione che preservi le dipendenze funzionali dal fatto che AB va in tutti gli attributi. Inoltre da quello che ho potuto vedere dagli esami passati non è mai stata proposta un insieme di dipendenze funzionali decomponibile perciò se all'esame vi viene una decomposizione se fossi in voi ci darei un occhio :D.

Spero di essere stato utile, ho cercato di sviluppare tutti i passaggi anche quelli + stupidi in ogni caso resto a disposizione per maggiori chiarimenti.


ciao, mi potresti spiegare l'algoritmo di chiusura???perkè bc* x(o) = bc e x(1) = bc?... e da dv escono x(0), x(1)????
aspetto tue notizie,grazie mille

11-07-2009 11:36
Click Here to See the Profile for ad676556 Click here to Send ad676556 a Private Message Find more posts by ad676556 Add ad676556 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
karplus
.grande:maestro.

User info:
Registered: Jun 2004
Posts: 1207 (0.17 al dì)
Location:
Corso: Informatica per la Comunicazione (magistrale)
Anno:
Time Online: 7 Days, 2:28:19 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Ma hai letto quando é stato scritto quel post? Vodoo é laureato da un pezzo! E per sua stessa ammissione non ricorda niente in merito. :D

Cerca di non quotare tutto un posto così lungo che appesantisci la pagina. :)

X(0) e x(1) sono i "passi" da provare
x(0)=bc perchè sta provando se bc é chiave, e parte da bc perchè b e c sono attributi primi (uniche lettere che non compaiono mai a dx). x(1) é sempre bc perchè bc da solo non implica mai niente, cioè non esiste nessuna dipendenza funzionale nella traccia del tipo bc -> qualcosa.

Cmq vedo che sei proprio agli inizi, spiegare tutto tutto é un po' dura, dai una bella rilettura e vedi che prima o poi le cose le capisci.

11-07-2009 11:56
Click Here to See the Profile for karplus Click here to Send karplus a Private Message Find more posts by karplus Add karplus to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
ad676556
.consigliere.

User info:
Registered: Oct 2005
Posts: 135 (0.02 al dì)
Location:
Corso:
Anno:
Time Online: 1 Day, 7:25:31 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by karplus
Ho sbagliato a ricopiare io sul dsy una cosa ma il risultato é cmq quello che avevo riportato, ora lo ricopio esattamente come l'aveva trascritto il prof

ABD->E qui la B é ridondante perchè c'è già AD->B, quindi diventa AD -> E . Ergo le R vengono:

AD->E R1(A,D,E)
AE->F R2 (A,E,F)
AD->B R3(A,D,B)
C->D R4(C,D)
C->F R5(C,F)

LA decomposizione risultante quindi é R3,4(A,B,C,D) R1(..) R2(..) R5(..)

I puntini di sospesione sono per evitare di ricopiare ciò che é già noto presumo. Grazie al passaggio che avevo dimenticato, R3 non é più dentro R1.

Resta però il dilemma, perchè cavolo non ha accorpato R4 e R5 se a ricevimento una sett fa mi ha detto che é la prima cosa da fare??



ciao, scusa ma questo esercizio da dv l'hai preso???nn corrisponde all'ex3 dell'appello 23-07-08:le dipendenze sono diverse....
grazie

18-09-2009 23:43
Click Here to See the Profile for ad676556 Click here to Send ad676556 a Private Message Find more posts by ad676556 Add ad676556 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
karplus
.grande:maestro.

User info:
Registered: Jun 2004
Posts: 1207 (0.17 al dì)
Location:
Corso: Informatica per la Comunicazione (magistrale)
Anno:
Time Online: 7 Days, 2:28:19 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Vai nella sezione filez e scaricati tutti i temi d'esame che ho caricato io, viene da uno di quelli

19-09-2009 12:00
Click Here to See the Profile for karplus Click here to Send karplus a Private Message Find more posts by karplus Add karplus to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
ad676556
.consigliere.

User info:
Registered: Oct 2005
Posts: 135 (0.02 al dì)
Location:
Corso:
Anno:
Time Online: 1 Day, 7:25:31 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Originally posted by karplus
Ho sbagliato a ricopiare io sul dsy una cosa ma il risultato é cmq quello che avevo riportato, ora lo ricopio esattamente come l'aveva trascritto il prof

ABD->E qui la B é ridondante perchè c'è già AD->B, quindi diventa AD -> E . Ergo le R vengono:

AD->E R1(A,D,E)
AE->F R2 (A,E,F)
AD->B R3(A,D,B)
C->D R4(C,D)
C->F R5(C,F)

LA decomposizione risultante quindi é R3,4(A,B,C,D) R1(..) R2(..) R5(..)

I puntini di sospesione sono per evitare di ricopiare ciò che é già noto presumo. Grazie al passaggio che avevo dimenticato, R3 non é più dentro R1.

Resta però il dilemma, perchè cavolo non ha accorpato R4 e R5 se a ricevimento una sett fa mi ha detto che é la prima cosa da fare??


scusa, ma l'obiettivo della decomposizione in 3nf è trovare/dedurre quindi la kiave totale dell'esercizio in almeno una delle varie relazioni in cui l'hai decomposto???Ovviamente il tt senza perdita dati.....
ciao

20-09-2009 16:37
Click Here to See the Profile for ad676556 Click here to Send ad676556 a Private Message Find more posts by ad676556 Add ad676556 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
karplus
.grande:maestro.

User info:
Registered: Jun 2004
Posts: 1207 (0.17 al dì)
Location:
Corso: Informatica per la Comunicazione (magistrale)
Anno:
Time Online: 7 Days, 2:28:19 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Sorry ma é passato un anno e certe cose comincio a dimenticarle. :D
Cmq io ero andato dal prof a ricevimento a farmi spiegare la decomposizione 3nf e l'avevo capita.

20-09-2009 18:47
Click Here to See the Profile for karplus Click here to Send karplus a Private Message Find more posts by karplus Add karplus to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 03:50.    Post New Thread    Post A Reply
Pages (3): « 1 2 [3]   Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
 

Powered by: 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
Pagina generata in 0.041 seconds (74.20% PHP - 25.80% MySQL) con 28 query.