[Basi di dati] determinazione chiavi
Ciao a tutti!!!
Ho dei dubbi su come determinare tutte le chiavi data una relazione, ad esempio se ho:
$R(A, B, C, D)$ ed $F$ insieme delle dipendenze funzionali $F = {AB->C, AB->D, C->A, D->B}$ come determino tutte le chiavi?
Io avrei detto che $AB$ è una superchiave minimale quindi chiave perché la chiusura di $AB$ ci ridà lo schema di R mentre C no e D no, ecco io ora mi sarei fermato, in pratica controllo se la chiusura di ogni parte sinistra di ogni dipendenza (in questo caso quindi calcolo la chiusura di $AB, C, D$) mi ridà lo schema iniziale, come detto prima qui ottengo che $AB$ è chiave.
Tuttavia controllando le soluzioni mi accorgo che danno come chiavi anche $BC$, $CD$ e $AD$ oltre ad $AB$, ora controllando in effetti mi accorgo che facendo la chiusura anche in quei casi ottengo lo schema iniziale, quindi la domanda ora mi sorge spontanea, mi devo calcolare la chiusura per ogni combinazione? ovvero mi devo calcolare la chiusura per $A, B, C, D, AB, AC, AD, BC, BD, CD, ABC, ABD, BCD$ ? per trovare tutte le chiavi?
Ringrazio tutti anticipatamente.
Ho dei dubbi su come determinare tutte le chiavi data una relazione, ad esempio se ho:
$R(A, B, C, D)$ ed $F$ insieme delle dipendenze funzionali $F = {AB->C, AB->D, C->A, D->B}$ come determino tutte le chiavi?
Io avrei detto che $AB$ è una superchiave minimale quindi chiave perché la chiusura di $AB$ ci ridà lo schema di R mentre C no e D no, ecco io ora mi sarei fermato, in pratica controllo se la chiusura di ogni parte sinistra di ogni dipendenza (in questo caso quindi calcolo la chiusura di $AB, C, D$) mi ridà lo schema iniziale, come detto prima qui ottengo che $AB$ è chiave.
Tuttavia controllando le soluzioni mi accorgo che danno come chiavi anche $BC$, $CD$ e $AD$ oltre ad $AB$, ora controllando in effetti mi accorgo che facendo la chiusura anche in quei casi ottengo lo schema iniziale, quindi la domanda ora mi sorge spontanea, mi devo calcolare la chiusura per ogni combinazione? ovvero mi devo calcolare la chiusura per $A, B, C, D, AB, AC, AD, BC, BD, CD, ABC, ABD, BCD$ ? per trovare tutte le chiavi?
Ringrazio tutti anticipatamente.
Risposte
Ciao,
son d'accordo che AB è superchiave, ma ad una prima occhiata mi sembra che AB non è chiave, perchè sicuramente con qualche proprietà degli assiomi di Amstrong puoi ricondurti ad essa tramite una DF es. C->A
mi daresti la definizioni di superchiave minimale, non la ricordo o non mi sembra esista...
Se vedi le tue dipendenze sono parecchio ridondanti, ti consiglio prima di cercare di semplificarle e renderle minime. Tipo passando per gli assioni di Amstrong (o i suoi derivati) puoi unire AB->C e AB->D in AB->CD. Se no usa la canonical cover e di sicuro elimini le ridondanze e puoi trovare le chiavi sicuramente
"_overflow_":
Ho dei dubbi su come determinare tutte le chiavi data una relazione, ad esempio se ho:
$R(A, B, C, D)$ ed $F$ insieme delle dipendenze funzionali $F = {AB->C, AB->D, C->A, D->B}$ come determino tutte le chiavi?
son d'accordo che AB è superchiave, ma ad una prima occhiata mi sembra che AB non è chiave, perchè sicuramente con qualche proprietà degli assiomi di Amstrong puoi ricondurti ad essa tramite una DF es. C->A
mi daresti la definizioni di superchiave minimale, non la ricordo o non mi sembra esista...
Se vedi le tue dipendenze sono parecchio ridondanti, ti consiglio prima di cercare di semplificarle e renderle minime. Tipo passando per gli assioni di Amstrong (o i suoi derivati) puoi unire AB->C e AB->D in AB->CD. Se no usa la canonical cover e di sicuro elimini le ridondanze e puoi trovare le chiavi sicuramente

Prima di tutto grazie per avermi risposto.
In pratica una superchiave minimale è una superchiave che non contiene altre superchiavi al suo interno, ovvero una chiave.
Faccio un esempio per mostrare come procedo:
$F={AB→C,AB→D,C→A,D→B}$
Per verificare se $AB$ è una superchiave faccio la chiusura di $AB$, quindi $AB+ = ABCD$ come si vede la chiusura di $AB$ ci ridà lo schema iniziale quindi si può dire che $AB$ è superchiave ora per vedere se è anche chiave eseguo la chiusura di $A$ e $B$ $A+ = A$, $B+ = B$ che non sono superchiavi in quanto la loro chiusura non ci ridà lo schema iniziale, si può concludere quindi che $AB$ è una chiave.
Ritornando al problema tu mi consigli quindi prima di passare ad una copertura minimale?
quindi nel mio esempio una copertura minimale per $F$ può essere:
$AB -> C D, C -> A, D -> B$
Tuttavia non cambia molto, o forse non ho capito bene ciò che intendevi...
In pratica una superchiave minimale è una superchiave che non contiene altre superchiavi al suo interno, ovvero una chiave.
Faccio un esempio per mostrare come procedo:
$F={AB→C,AB→D,C→A,D→B}$
Per verificare se $AB$ è una superchiave faccio la chiusura di $AB$, quindi $AB+ = ABCD$ come si vede la chiusura di $AB$ ci ridà lo schema iniziale quindi si può dire che $AB$ è superchiave ora per vedere se è anche chiave eseguo la chiusura di $A$ e $B$ $A+ = A$, $B+ = B$ che non sono superchiavi in quanto la loro chiusura non ci ridà lo schema iniziale, si può concludere quindi che $AB$ è una chiave.
Ritornando al problema tu mi consigli quindi prima di passare ad una copertura minimale?
quindi nel mio esempio una copertura minimale per $F$ può essere:
$AB -> C D, C -> A, D -> B$
Tuttavia non cambia molto, o forse non ho capito bene ciò che intendevi...