| |
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 |
Esempi di Normalizzazione e decomposizione lossless join Clicca QUI per vedere il messaggio nel forum |
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. |
Voodoo |
code:
Si consideri lo schema di relazione R = (A,B,C,D) e il seguente insieme di
dipendenze funzionali:
1. A -> B
2. BC -> D
3. A -> C
Rispondere ai seguenti quesiti motivando le risposte date:
a) Determinare la chiave o le chiavi dello schema di relazione R.
b) Determinare se R e’ in 3NF o BCNF.
c) Produrre eventuali decomposizioni e discutere
la preservazione dei dati e delle dipendenze
funzionali
a) come al solito osserviamo innanzitutto quali sono gli elementi che non compaiono a destra: solo A in questo caso quindi possiamo dire che A è sicuramente attributo primo.
Calcoliamo la chiusura di A:
code:
A* x(0) = A x(1) = ABC x(2) = ABCD
Quindi A è chiave,l'unica chiave in quanto le chiusure degli altri attributi non portano a riavere lo schema R.
b) Per essere in 3NF ciascuna dipendenza deve avere a sinistra una chiave o una superchiave oppure a destra un attributo primo (cioè facente parte della chiave).
Poichè BC -> D e BC non è chiave e D non è attributo primo,non è in 3NF. Poichè per esser in BCNF lo schema dev'esser in 3NF,concludiamo che non è nemmeno in BCNF.
c) la dipendenza che mi crea problemi perchè mi rende lo schema non in BCNF/3NF è BC -> D quindi scomponiamo:
code:
s1 (BCD) f1(BC -> D)
s2 (ABC) f2(A -> B,A -> C)
f1 U f2 = f
Quindi esiste una scomposizione in BCNF che mi preservi le dipendenze. |
Pupino |
In riferimento a quest' ultimo esercizio...
La domanda che poneva era Produrre eventuali decomposizioni e discutere la preservazione dei dati e delle dipendenze funzionali.
La preservazione dei dati come la discuti? :D |
Voodoo |
Originally posted by Pupino
In riferimento a quest' ultimo esercizio...
La domanda che poneva era Produrre eventuali decomposizioni e discutere la preservazione dei dati e delle dipendenze funzionali.
La preservazione dei dati come la discuti? :D
In riferimento a quell'esercizio,la presenrvazione dlle dipendenze si mantiene se f1 U f2 = f,quella dei dati se vi è un lossless join fra gli insiemi scomposti. |
dc671228 |
Ciao! C'è una cosa che non ho capito nella scomposizione:
Ho capito come scegli i 2 gruppi, ma le relative relazioni in f1 e f2 come le trovi? |
Voodoo |
Originally posted by dc671228
Ciao! C'è una cosa che non ho capito nella scomposizione:
Ho capito come scegli i 2 gruppi, ma le relative relazioni in f1 e f2 come le trovi?
Ho dato l'esame a luglio e l'ho verbalizzato di recente. La normalizzazione l'ho capita a stento e quel che ho capito è scritto qua. Confida nei tuoi compagni di corso per farti spiegare la cosa,io ho resettato il cervello per quanto concerne quest'argomento :) |
dc671228 |
ok, grazie cmq!
Ciao! |
altin |
per quanto ne so io le f1 e f2 gli scegli in base ai sottoinsiemi S che tu hai.
per scegliere le S si fa cosi::
si vede la d.f. che nn ti verifica uno delle forme della normalizazzione. metti dentro a S2 tutti gli attributi che si trovano nella tua d.f. che vuoi modificare. e vedi tutte le d.f. che puoi carvarne da questi attributi o dalla lora combinazione. la f2 sara fatta da queste.
La S1 sara fatta dagli attributti rimanenti + un attributo della S2 (xke alla fine ti servira per fare join). |
altin |
prendo quest esempio
Si consideri lo schema di relazione R = (A,B,C,D) e il seguente insieme di
dipendenze funzionali:
1. A -> B
2. BC -> D
3. A -> C
1)sappiamo che la chiave è la A
2)vediamo le d.f. in che forma saranno
in quest esempio nn sono ne in BCNF ne in 3NF xke la d.f. BC-->D
nn si verifica per nessuna delle due forme.
allora la tua S2 sara fatta da tutti gli attributi di questa d.f. cioè BCD...
S2(B,C,D).
per calcorale la f2 vedi le d.f. che puoi caverne da B,C,D.(per vedere devi guardare anche la freccia --> le tue dip devono avere la direzione della dip.
cioè tu da B nn trovi niente xke hai A->B;A->C; BC->D
La stessa cosa vale per C(cioè nn puoi trovare nessuna d.f.
mentre BC ti da la dip funz BC->D..
per questo la tua f2(BC->D).
la S1 avra come attributi quelli rimanenti piu uno della S2 che servira per fare join("questo penso che la scegli te a caso")
S1(A,B).
la f1 sara fatta dalle dip funz che posso ricavare da queste due.
A->B
A->C
quindi f1(A->B;A->C)
per preservare le dipendeze funzionali dobbiamo avere.
f1 U f2 = f |
karplus |
Ringrazio chi ha iniziato e/o proseguito questa discussione che mi ha permesso di capire la normalizzazione, qui di seguito elenco uno "schemino" dei passi da seguire per effettuare la normalizzazione:
1) Verificare che l'insieme delle dipendenze funzionali date sia minimale, ovvero cercare e rimuovere eventuali dip. funz. o attributi ridondanti.
2) Stabilire quali attributi sono primi, ovvero quali non compaiono mai a destra delle dip funz.
3) Trovare le chiavi, ovvero un insieme di attributi primi e non, che "passando" dalle varie dip funz portano ad avere un insieme di attributi uguale a quello dato dal testo dell'esercizio
4) Controllare se l'insieme R delle dip. funz. é 3NF o BCNF. É BCNF se a sinistra delle dip funz ci sono solo chiavi o superchiavi (attributi che contengono una chiave), 3NF se é BCNF tutto o in parte, o se a destra ci sono solo attributi primi.
5) Effettuare la decomposizione lossless join richiesta (3NF o BCNF). Nel caso che sia BCNF si parte dalla dip funz che la viola e si calcola S2 cioè S2=(S-S1)+CHIAVE S1. Poi si uniscono F1 e F2 e se non danno F non esiste una decomposizione lossless join che preservi le dip funz.
Anche se differisce dal metodo adottato dal prof questo metodo di decomposizione lossless join BNCF é cmq valido, me l'ha confermato lui stesso correggendo un mio esame.
Nei post precedenti al mio viene spiegato come fare la decomposizione lossless join, ma attenzione perchè viene spiegato solo il caso in cui la decomposizione richiesta sia in BCNF, lo svolgimento di una scomposizione 3NF é totalmente diverso.
[EDIT 01-02-09]
Venerdì sono stato a ricevimento dal prof e mi sono fatto spiegare la decomposizione 3nf.
I passaggi da fare sono 4:
1) scrivere le relazioni di ogni dipendenza funzionale
2) accorpare le relazioni che hanno la stessa chiave
3) cercare se é presente una relazione che ha come chiave la chiave "totale" dell'esercizio, ovvero quella trovata calcolando la chiusura all'inizio dell'esercizio.
4) se la chiave non é presente in nessuna relazione, si accorpano più relazioni in modo da avere la chiave in una relazione sola. Ci sono più relazioni da cui é possibile derivare la chiave, che io sappia non c'è un criterio che impone di prendere una piuttosto che l'altra relazione, l'importante é ritrovarsi con una nuova relazione che contiene la chiave "totale" dell'esercizio.
Nella fattispecie il prof mi ha corretto la scomposizione 3nf capitata all'esame del 20 Gennaio. La chiave TOTALE dell'esercizio, é quella trovata calcolandone la chiusura (prima parte di un esercizio della normalizzazione), cosa che ho dato per scontato e di cui non ho ricopiato lo svolgimento. La chiave in questione é AC.
Prima di iniziare l'esercizio bisogna controllare che siano verificate queste 3 condizioni: unicità attributi a destra, assenza di dipendenze funzionali ridondanti, assenza di attributi ridondanti a sinistra.
Le dipendenze funzionali erano (svolgiamo già il passaggio 1):
AD->E R1(A,D,E)
A->F R2(A,F)
AC->B R3(A,C,B)
C->D R4(C,D)
C->F R5(C,F)
la chiave é AC.
passaggio 2:
si combinano R4 e R5 in R6 perchè hanno la stessa chiave cioè C, si compie cioè il famigerato accorpamento.
passaggio 3:
R3 contiene AC, cioè la chiave totale dell'esercizio
passaggio 4:
visto che il passaggio 3 é verificato, non occorre creare una relazione R7 che abbia AC come chiave.
La decomposizione lossless join in 3nf quindi é:
R6(C,D,F)R3(A,C,B)R2(A,F)R1(A,D,E)
Faccio un piccolo addendum al passaggio 4:
supponiamo che R3 sia R3(A,E,D), R3 non contiene la chiave AC. Quindi dovremmo creare una relazione R7 partendo R2+R6, R7 alla fine sarebbe (A,C,D,F).
Nulla ci vieta però di comporre R7 a partire da R1+R6, otterremmo R7(A,D,E,C,F), tuttavia secondo me é meglio partire da R che hanno meno attributi possibili, ma é un parere personale.
|
Jaky |
Originally posted by karplus
A questo punto bisogna trovare due insiemi R che contengano gli attributi primi della chiave trovata precedentemente, la chiave in questo caso é AC, quindi si combinano R3 e R4:
R3,4(A,B,C,D)
Ciao, non è che potresti spiegare + dettagliatamente questo passaggio? :)
non capisco perchè scegli proprio R3 e R4
E la parte finale da scrivere per dimostrare che la combinazione di questi due insiemi porta a una decomposizione lossless join é così:
R3,4(A,B,C,D)R1(A,D,E)R2(A,E,F)R5(C,F)
Anche questo non mi è tanto chiaro.
Ciao e grazie :-D |
karplus |
guardate il mio post precedente, lì c'è la procedura spiegatami dal prof per la scomposizione in 3nf.
L'algoritmo viene spiegato bene dal prof qui alla pagina 79.
Viene spiegato anche qui alle pagine 418-420.
|
Jaky |
in aggiunta a quanto hai spiegato, è meglio chiarire una cosa.
se avessimo avuto
AD->E R1(A,D,E)
A->F R2(A,F)
AC->D R3(A,C,D)
C->D R4(C,D)
C->F R5(C,F)
in questo caso, non bisogna unine R4 con R5, ma inserire la dip.funz di R4 in R3.
Era per precisare che non sempre bisogna unire i gruppi con stessa chiave :) |
karplus |
grandissimo, questo era un dubbio che mi era rimasto, e in effetti anche ora non me lo spiego.
R4 va in R3 perchè ha sia la C che la D già presenti in R3, giusto?
E questo passaggio ha la "precedenza" sull'accorpare le dip funz con la stessa chiave perchè in R3 é presente la chiave generale di tutto l'esercizio, giusto? |
alfoguasta |
Originally posted by Jaky
Ciao, non è che potresti spiegare + dettagliatamente questo passaggio? :)
non capisco perchè scegli proprio R3 e R4
Anche questo non mi è tanto chiaro.
Ciao e grazie :-D
<<<<NN TROVO LA TRACCIA DI QUESTO QUOTE....DEVO TRALASCIARE QUESTE CONSIDERAZIONI O COSA?? GRAZIE>>>> |
karplus |
la traccia di quel quote l'ha ripostata jaky 2 post fa. La precisazione che fa lui é molto utile, anche se ancora mi sfugge il perchè. :D |
Jaky |
certo che ha la precedenza! anzi..in realtà la precedenza non esiste...R4 non andrebbe nemmeno creato, perchè vedi subito che C e D stanno dentro a R3!
io la vedo così...facendo tutte le prove d'esame la normalizzazione mi viene perfetta....
per qualsiasi dubbio ad esercizi, postali! |
frenklin |
mm, non è che sia tanto chiara.
Jaky o chi l ha capita potrebbe postare un altro esercizio con chiara spiegazione?
Cioè i passaggi sono essenzilamente questi:
-si crea una relazione per ogni gruppo di attributi coinvolti in una dipendenza funzionale
-si verifica che alla fine una relazione contenga una chiave della relazione originaria
se non si trova si inizia ad accorpare.Giusto?
....ma l accorpamento su che criteri si basa?
Grazie |
Jaky |
-si crea una relazione per ogni gruppo di attributi coinvolti in una dipendenza funzionale
OK
poi, se per esempio, tra le tante, hai due dip fuz che sono AB-->C e C-->B, è inutile creare due gruppi ABC E BC, perchè C-->B puoi farla stare dentro al gruppo ABC (in questo caso per esempio, il gruppo ABC sarà si in 3nf, perchè il B di C-->B fa parte della chiave, ovvero AB, però non sarà in bcnf perchè C non è chiave!
-si verifica che alla fine una relazione contenga una chiave della relazione originaria
OK, se tra i gruppi nessuno contiene la chiave, basta che scrivi una delle chiavi trovate precedentemente..una a caso, non importa quale.
Per l'accorpamento, lo fai solo se ti trovi es A-->B e A-->C, però nessuno di queste due deve poter essere ricavato da altri gruppi(ovvero se non esiste un gruppo ABC)
Ora, quello ottenuto sarà sempre in 3nf, ma nel caso del gruppo ABC di prima, che contiene le due dip.fun, non è in bcnf, allora scomponi in altri 2 gruppi, ottenendo CB e AC, AB-->C non è preservata.
Spero sia chiaro. nel caso postate un esercizio, io non ho tempo di cercarlo e scriverlo..ciaooo |
karplus |
ok a me un dubbio é rimasto, te lo sottopongo.
Prendiamo l'esercizio 3 dell'appello del 23-07-08, scaricabile qui:
http://homes.dico.unimi.it/dbandsec...llo23_07_08.pdf
La chiave é AC, il mio quesito é sempre riguardo alla decomposizione 3NF. Il prof dopo il compito aveva corretto questo esame e io avevo ricopiato tutto, stando a lui la decomposizione finale é:
R 3,4 (A,B,C,D) R1(A,B,D,E) R2(A,E,F) R5(C,F)
Eppure R4 (C,D) e R5 (C,F) secondo quanto mi ha detto il prof a ricevimento una settimana fa, sarebbero dovuti essere combinati, ma nella correzione di questo appello di Luglio non l'ha fatto!! E il caso é diverso dall'esempio da te postato qualche post indietro, perchè nè R4 nè R5 sono sussunti da un'altra relazione, cioè C,D o C,F non sono presenti in nessun'altra relazione.
Tu cosa dici?
ciao :D |
Jaky |
scusami, se hai seguito la correzioni, hai anche quali dip. funzionali ci sono i questi gruppi?
non credo che la prima sia composta da r3,r4, perchè r3 è dentro r1.
questo perchè r1, se non ci fosse r3, sarebbe ADE e ABDE, perchè nella prima dip.funzionale, abd-->e, b è ridondante in quanto c'è la dip ad-->e!!!
sicuruo sicuro di aver trastritto bene? :) |
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?? |
Jaky |
dunque, premetto che in sede d'esame forse non ci sarei arrivato, ma a vederla così in tranquillità, ti spiego perchè non ha accorpato
non ha accorpato perchè, tra i gruppi creati, nessuno contiene la chiave, ovvero AC. Avrebbe dovuto creare un altro r6 AC, invece gli è bastato inserire la C in ADB, facendolo diventare ABCD.
ora qui dentro ci posso inserire anche C--D ;)
Sarebbe stata la stessa cosa se avesse inserito la C in r1, creando ACDE e lasciando r3 ADB.
In entrambi i casi, ottiene una scomposizione in 3nf ma non bcnf, ed in entrambi i casi se scomponi per ottenere una bcnf, non coservi le dipendenze :)
Inoltre attenzione, nei testi d'esame dice sempre..mostrare UNA decomposizione blabla bla...non dice mostra LA decomposizione blablabla...quindi hai + di una possibilità per risolvere il tutto ;), basta ovviamente che sia giusta e sensata..bè..io torno a ripassare per doma ;)
ps: oggi ho svolto 14 esercizi sulla normalizzazione(14 prove d'esame) in nessuno di questi ho accorpato e le ho fatte tutte giuste. :cool: |
Brk |
Ciao,
grazie a tutti per i post, ma...
Sinceramente della scomposizione in 3NF non si capisce assolutamente nulla...
Chi ha idea di come si risolve, potrebbe postarne un esempio completo nello stesso stile di quelli di Voodoo?
Grazie
Brk |
karplus |
LOL!!
Scusa ma é stato più forte di me! :D
Non me ne volere, non pretendo di essere il signor basi di dati in persona, ma più terra-terra di come ho provato a spiegarla nel post del 14-12-2008 15:44 con [EDIT 01-02-09] di questo thread non so proprio come fare. :)
Lo "stile" di vodoo é appropriato per la scomposizione bcnf, per la 3nf l'esercizio cambia totalmente, ergo non si può replicare.
Tuttalpiù prova a chiedere nello specifico cosa non ti torna degli esercizi postati. :cool:
Meglio ancora, vai a ricevimento a fartela spiegare dal prof come ho fatto io, il prof é molto gentile e disponibile in questo senso. :) |
Brk |
Ciao,
non ho capito questo passaggio:
-----
passaggio 4:
visto che il passaggio 3 é verificato, non occorre creare una relazione R7 che abbia AC come chiave.
------
Cosa vuol dire?
Inoltre nel post di jaky non ho capito quest passaggio:
------
in aggiunta a quanto hai spiegato, è meglio chiarire una cosa.
se avessimo avuto
AD->E R1(A,D,E)
A->F R2(A,F)
AC->D R3(A,C,D)
C->D R4(C,D)
C->F R5(C,F)
in questo caso, non bisogna unine R4 con R5, ma inserire la dip.funz di R4 in R3.
Era per precisare che non sempre bisogna unire i gruppi con stessa chiave
-----
Diciamo che proprio non capisco i passaggi e perchè li compio ;)
Grazie
Brk |
karplus |
Ok, quel passaggio l'avevo spiegato in questa maniera:
4) se la chiave non é presente in nessuna relazione, si accorpano più relazioni in modo di avere la chiave in una relazione sola
La chiave di cui si sta parlando, é quella TOTALE dell'esercizio, ovvero quella trovata calcolandone la chiusura, cosa che ho dato per scontato e di cui non ho ricopiato lo svolgimento. La chiave in questione é AC.
Nella scomposizione finale in 3nf deve esserci una relazione che contenga la chiave TOTALE, ovvero AC. Nell'esercizio che ho postato, puoi vedere come R3 contenga AC. Quindi esiste già una relazione che contiene una chiave, ergo l'esercizio é finito.
Se la chiave non fosse stata contenuta in nessuna delle relazioni (può capitare), avremmo dovuto accorpare delle relazioni in modo da ottenere la chiave AC. Quali relazioni accorpare? Beh il prof non mi aveva dato delle regole specifiche in merito, e sulle slide non ne ho trovate. Ergo si accorpano delle relazioni in modo che la relazione risultante abbia AC alla fine.
Per dirla terra terra, se supponiamo che R3 fosse R3(A,E,D), come vedi R3 non conteneva la chiave AC. Quindi avremmo creato una relazione R7 partendo R2+R6, R7 quindi sarebbe risultata come (A,C,D,F).
Nulla ci vietava però di comporre R7 a partire da R1+R6, avremmo ottenuto R7(A,D,E,C,F), tuttavia secondo me é meglio partire da R che hanno meno attributi possibili, ma é un parere personale.
La precisazione che fa jaky é per sottolineare che se una R é già contenuta in un'altra R, é anche inutile scriverla. R3(C,D) esiste già dentro R4(A,C,D), pertanto é inutile scriverla.
Il perchè di questi passaggi lo devi chiedere a chi ha inventato la 3nf e il relativo algoritmo, cmq se vai nel pdf della normalizzazione del prof questi passaggi sono elencati, anche se in maniera un po' più "criptica". :D |
clacs |
Originally posted by karplus
guardate il mio post precedente, lì c'è la procedura spiegatami dal prof per la scomposizione in 3nf.
L'algoritmo viene spiegato bene dal prof qui alla pagina 79.
Viene spiegato anche qui alle pagine 418-420.
Guarda..ti offrirei una birra..eheh...
Grazie per aver postato il link a Google libri...ho finalmente capito la normalizzazione...
Qualcuno ha altri link da postare dove si possono trovare esercizi svolti? |
elias86 |
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
:?:?:?:?
Non ho capito perchè dici che x(0) è uguale a bc??? in che formula vai a sostituire il valore 0? e il valore 1???
:?:?:?:?
Grazie. Ciao, Elias |
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. |
elias86 |
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!!! |
karplus |
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
|
ad676556 |
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 |
karplus |
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. |
ad676556 |
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 |
karplus |
Vai nella sezione filez e scaricati tutti i temi d'esame che ho caricato io, viene da uno di quelli |
ad676556 |
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 |
karplus |
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. |
|
|
|
|