[Basi di dati] ricerca dipendenze funzionali

elisabetta891
Ciao a tutti!
Sto preparando l'esame di database e sto avendo molta difficoltà negli esercizi che richiedono, dato uno schema relazionale, di identificare tutte le possibili dipendenze funzionali e definire se lo schema così rappresentato sia in BCNF (e se non fosse così, normalizzarlo).
In particolare, vorrei chiedere aiuto su questo specifico esercizio:

Dato il seguente schema:
Prodotto (codice,produttore, nome_prod, marca, prezzo, indirizzo, dismesso)
Recensione (codice,produttore,autore,data, nome_prod, email, testo, voto, marca, prezzo)
e date le seguenti assunzioni:
"Il Prodotto é identificato dal codice e dall'id del produttore. Se ne salva il nome del produttore, la marca, il prezzo, l'indirizzo del produttore e un flag booleano se il prodotto non é più in vendita. La Recensione fa riferimento ad un singolo prodotto, contiene l'id dell'autore ed il suo indirizzo email, la data in cui é stata scritta, il nome del prodotto, il testo, il voto dato al prodotto, la marca e il prezzo del prodotto.
Due produttori possono usare lo stesso codice per due prodotti diversi. Un produttore possiede un'unica marca e indirizzo. Un prodotto ha un unico nome e prezzo. L'aurore di una recensione ha un'unica email."

1) stabilire le dipendenze funzionali dello schema
2) decomporre lo schema in BCNF

Allora, io ho trovato dalle assunzioni le.seguenti dipendenze funzionali, ma sono sicura che non siano le uniche:
codice, produttore -> nome_prod, marca, prezzo, indirizzo, dismesso
produttore -> marca, indirizzo
codice -> nome_prod, prezzo
autore -> email

Qualcuno mi può gentilmente aiutare a trovare tutte le FD ed eventualmente scomporre lo schema in BCNF?
In particolare non capisco il discorso delle chiavi: avendo qui due chiavi multivalore (la coppia codice,produttore per la relazione Prodotto e (codice, produttore,autore,data) per la relazione Recensione), esse saranno sempre FD che determineranno tutti gli attributi dello schema?

Risposte
apatriarca
Non faccio questo genere di esercizi da un po'.. Posso però iniziare ad osservare che nome_prod sembra essere il nome del produttore e non del prodotto e credo quindi dipenda da produttore. Inoltre il codice non identifica da solo un prodotto per cui marca, prezzo e dismesso dipendono sia da codice che da produttore. Il primo passaggio per normalizzare uno schema è quello di eliminare tutte le informazioni presente più volte nelle tabelle. Per esempio, nome_prod, marca e prezzo nella seconda tabella sono già presenti nella prima tabella e vanno quindi eliminati. Dopodiché devi iniziare a considerare le dipendenze funzionali e vedere ad esempio se alcuni attributi dipendono da un sottoinsieme della chiave e non da tutto ed estrarre tali attributi in una nuova tabella. I passaggi ulteriori dipendono poi dalle varie definizioni di normal form. Non ricordo sinceramente che cosa prevedeva esattamente BCNF.

Di fatto queste sono più che altro indicazioni e in pratica non è detto che normalizzare completamente i dati sia la cosa migliore da fare. E' in generale la soluzione che minimizza lo spazio occupato ma se alcuni dati sono sempre letti in gruppo spesso non vale la pena separarli.

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.