[Basi di dati] Calcolo copertura ridotta
Ciao a tutti,
ho un dubbio nel calcolo di una copertura ridotta in un esercizio.
Mi viene data la relazione $ R=(E,N,L,C,S,D,M,P,A) $ e l'insieme di dipendenze funzionali
$ F={E->NS,NL->EMD,EN->LCD,C->S,D->M,M->D,EPD->AE,NLCP->A} $
Il primo passo da fare ( trasformare ogni dipendenza $X->Y$ con $|Y|>1$ in dipendenze che hanno a destra un solo attributo) mi è chiaro, e dovrebbe venire il seguente insieme
$(i)$ $ F={E->N, E->S, NL->E, NL->M, NL->D, EN->L, EN->C, EN->D, C->S, D->M, M->D, EPD->A, EPD->E, NLCP->A} $
Ciò che mi è poco chiaro, sono i passi
$(ii)$ Indicato con $F$ l'insieme delle dipendenze correnti, per ogni dipendenza $X->A \in F$ con $|X|>1$ controlla se $X$ contiene attributi ridondanti
e
$(iii)$ Indicato con $F$ l'insieme delle dipendenze correnti per ogni dipendenza $X->A \in F$ controlla se è ridondante.
Il passo $(iii)$ credo di averlo abbastanza chiaro, ma il $(ii)$ no, mi potreste aiutare a fare chiarezza?
Grazie mille a tutti.
ho un dubbio nel calcolo di una copertura ridotta in un esercizio.
Mi viene data la relazione $ R=(E,N,L,C,S,D,M,P,A) $ e l'insieme di dipendenze funzionali
$ F={E->NS,NL->EMD,EN->LCD,C->S,D->M,M->D,EPD->AE,NLCP->A} $
Il primo passo da fare ( trasformare ogni dipendenza $X->Y$ con $|Y|>1$ in dipendenze che hanno a destra un solo attributo) mi è chiaro, e dovrebbe venire il seguente insieme
$(i)$ $ F={E->N, E->S, NL->E, NL->M, NL->D, EN->L, EN->C, EN->D, C->S, D->M, M->D, EPD->A, EPD->E, NLCP->A} $
Ciò che mi è poco chiaro, sono i passi
$(ii)$ Indicato con $F$ l'insieme delle dipendenze correnti, per ogni dipendenza $X->A \in F$ con $|X|>1$ controlla se $X$ contiene attributi ridondanti
e
$(iii)$ Indicato con $F$ l'insieme delle dipendenze correnti per ogni dipendenza $X->A \in F$ controlla se è ridondante.
Il passo $(iii)$ credo di averlo abbastanza chiaro, ma il $(ii)$ no, mi potreste aiutare a fare chiarezza?
Grazie mille a tutti.
Risposte
(nel caso non avessi ancora risolto
)
\(\displaystyle A \subseteq X \) è ridondante in \(\displaystyle X \rightarrow Y \in F \Leftrightarrow (X \setminus A)^+ \supseteq Y \).
Quindi, per il secondo passo, per ogni dipendenza funzionale devi calcolare la chiusura di ogni possibile sottoinsieme non vuoto di attributi della parte sinistra. Se l'insieme risultante contiene la parte destra, togli a sinistra gli attributi "in più".
Per esempio per \(\displaystyle EN \rightarrow L \) si ha \(\displaystyle E^+ \supseteq L \), quindi la dipendenza funzionale diventa \(\displaystyle E \rightarrow L \).
Per quanto riguarda il III, \(\displaystyle X \rightarrow Y \) è ridondante \( \Leftrightarrow \displaystyle X^+ \supseteq Y \) calcolando \(\displaystyle X^+ \) sull'insieme di dipendenze \(\displaystyle F \setminus \{ X \rightarrow Y \} \).
Ovvero per ogni dipendenza vedi se calcolando la chiusura della parte sinistra escludendo la dipendenza stessa arrivi alla parte destra. Se è così elimini la dipendenza in quanto ridondante.
Ciao!

\(\displaystyle A \subseteq X \) è ridondante in \(\displaystyle X \rightarrow Y \in F \Leftrightarrow (X \setminus A)^+ \supseteq Y \).
Quindi, per il secondo passo, per ogni dipendenza funzionale devi calcolare la chiusura di ogni possibile sottoinsieme non vuoto di attributi della parte sinistra. Se l'insieme risultante contiene la parte destra, togli a sinistra gli attributi "in più".
Per esempio per \(\displaystyle EN \rightarrow L \) si ha \(\displaystyle E^+ \supseteq L \), quindi la dipendenza funzionale diventa \(\displaystyle E \rightarrow L \).
Per quanto riguarda il III, \(\displaystyle X \rightarrow Y \) è ridondante \( \Leftrightarrow \displaystyle X^+ \supseteq Y \) calcolando \(\displaystyle X^+ \) sull'insieme di dipendenze \(\displaystyle F \setminus \{ X \rightarrow Y \} \).
Ovvero per ogni dipendenza vedi se calcolando la chiusura della parte sinistra escludendo la dipendenza stessa arrivi alla parte destra. Se è così elimini la dipendenza in quanto ridondante.
Ciao!
"probid":
(nel caso non avessi ancora risolto)
\(\displaystyle A \subseteq X \) è ridondante in \(\displaystyle X \rightarrow Y \in F \Leftrightarrow (X \setminus A)^+ \supseteq Y \).
Quindi, per il secondo passo, per ogni dipendenza funzionale devi calcolare la chiusura di ogni possibile sottoinsieme non vuoto di attributi della parte sinistra. Se l'insieme risultante contiene la parte destra, togli a sinistra gli attributi "in più".
Per esempio per \(\displaystyle EN \rightarrow L \) si ha \(\displaystyle E^+ \supseteq L \), quindi la dipendenza funzionale diventa \(\displaystyle E \rightarrow L \).
Per quanto riguarda il III, \(\displaystyle X \rightarrow Y \) è ridondante \( \Leftrightarrow \displaystyle X^+ \supseteq Y \) calcolando \(\displaystyle X^+ \) sull'insieme di dipendenze \(\displaystyle F \setminus \{ X \rightarrow Y \} \).
Ovvero per ogni dipendenza vedi se calcolando la chiusura della parte sinistra escludendo la dipendenza stessa arrivi alla parte destra. Se è così elimini la dipendenza in quanto ridondante.
Ciao!
Quello che non mi è chiaro e che non capisco, è come calcolare la chiusura...
Mi potresti, per favore, fare i passaggi accompagnati da dei commenti?
Grazie mille.
La chiusura di un insieme di attributi è praticamente l'insieme di tutti gli attributi a cui arrivi usando le dipendenze funzionali che hai.
Sopra ho detto che \( \displaystyle E^+ \supseteq L \).
Infatti, usando le dipendenze che hai normalizzato per il passo I:
0) \( \displaystyle E^+ = \{E\} \) (ovviamente E appartiene alla sua chiusura)
1) \( \displaystyle E^+ = \{E,N\} \) da \( \displaystyle E \rightarrow N \)
2) \( \displaystyle E^+ = \{E,N,L\} \) da \( \displaystyle EN \rightarrow L \)
questo ti basta nel caso discusso su per dire che la chiusura contiene L, se vuoi continuare comunque scoprirai che è formata da tutti gli attributi tranne P ed A, perché non ci sono dipendenze che hanno P nella parte destra, quindi tale attributo non è ottenibile a meno che non si parta da un insieme che lo contenga, e ad A si arriva solo passando per P stesso.
Dunque per calcolare la chiusura di un insieme di attributi controlli se i componenti sono la parte sinistra di qualche dipendenza funzionale, e in tal caso prendi gli attributi della parte destra della stessa e li aggiungi.
Alla luce di ciò, riguarda quanto su.
Ciao!
Sopra ho detto che \( \displaystyle E^+ \supseteq L \).
Infatti, usando le dipendenze che hai normalizzato per il passo I:
0) \( \displaystyle E^+ = \{E\} \) (ovviamente E appartiene alla sua chiusura)
1) \( \displaystyle E^+ = \{E,N\} \) da \( \displaystyle E \rightarrow N \)
2) \( \displaystyle E^+ = \{E,N,L\} \) da \( \displaystyle EN \rightarrow L \)
questo ti basta nel caso discusso su per dire che la chiusura contiene L, se vuoi continuare comunque scoprirai che è formata da tutti gli attributi tranne P ed A, perché non ci sono dipendenze che hanno P nella parte destra, quindi tale attributo non è ottenibile a meno che non si parta da un insieme che lo contenga, e ad A si arriva solo passando per P stesso.
Dunque per calcolare la chiusura di un insieme di attributi controlli se i componenti sono la parte sinistra di qualche dipendenza funzionale, e in tal caso prendi gli attributi della parte destra della stessa e li aggiungi.
Alla luce di ciò, riguarda quanto su.
Ciao!
"probid":
La chiusura di un insieme di attributi è praticamente l'insieme di tutti gli attributi a cui arrivi usando le dipendenze funzionali che hai.
Sopra ho detto che \( \displaystyle E^+ \supseteq L \).
Infatti, usando le dipendenze che hai normalizzato per il passo I:
0) \( \displaystyle E^+ = \{E\} \) (ovviamente E appartiene alla sua chiusura)
1) \( \displaystyle E^+ = \{E,N\} \) da \( \displaystyle E \rightarrow N \)
2) \( \displaystyle E^+ = \{E,N,L\} \) da \( \displaystyle EN \rightarrow L \)
questo ti basta nel caso discusso su per dire che la chiusura contiene L, se vuoi continuare comunque scoprirai che è formata da tutti gli attributi tranne P ed A, perché non ci sono dipendenze che hanno P nella parte destra, quindi tale attributo non è ottenibile a meno che non si parta da un insieme che lo contenga, e ad A si arriva solo passando per P stesso.
Dunque per calcolare la chiusura di un insieme di attributi controlli se i componenti sono la parte sinistra di qualche dipendenza funzionale, e in tal caso prendi gli attributi della parte destra della stessa e li aggiungi.
Alla luce di ciò, riguarda quanto su.
Ciao!
ciao, riapro tutto questo ambaradan per fare una domanda
Non capisco perche stiamo scegliendo \( \displaystyle E \rightarrow L \). Potremmo scegliere anche \( \displaystyle N \rightarrow L \) a questo punto, visto che \( \displaystyle N^+ \supseteq L \) oppure no? e perche? e perche se gli attributi a sinistra sono tre, delle volte ne vengono lasciati 2? Non devo ripetere il passo II anche su questa nuova dipendenza? Grazie in anticipo
EDIT: mi sono accorto che quello che in realtà non capivo era il calcolo della chiusura, adesso mi torna tutto