Come calcoli le dipendenze funzionali per la decomposizione?
-
13-11-2019 - |
Domanda
Say r ha i seguenti attributi: {A, B, C, D, E} e ha le seguenti dipendenze funzionali:
A -> BC
CD -> E
B -> D
E -> A
.
E c'è una decomposizione costituita da R1 (A, B, C) e R2 (A, D, E).Come posso calcolare le dipendenze funzionali di R1 e R2?
La domanda attuale sui compiti mi chiede se R1 / R2 è in BCNF / 3NF / né nemmeno, ma io sappia già come fare quella parte (vedere se il lato sinistro delle FD è contenuto nelle chiavi del candidato). .
Soluzione
Il trucco è pensare a FD come definire le chiavi, non sul tuo schema dato, ma sulle proiezioni di esso.
Ad esempio, nel tuo schema di avviamento {ABCDE}, il FD A -> BC afferma che A ({A}, in realtà) costituisce una chiave su questa tabella, proiettata fino a {ABC}. Cioè, l'Unione di LHS e RHS dell'FD, definisce quale proiezione e il LHS definisce la chiave su quella proiezione.
Ora rivolgersi alla versione decomposta, in cui hai due tavole distinte (schemi) {ABC} e {ADE}.
I tuoi primi e gli ultimi fd sono ancora espressibili in quegli schemi. Il primo fd sul primo schema / tavolo e durare su quest'ultimo.
Ma i due rimanenti sono diventati inesprimibili (inesprimibili come fd , cioè) a causa della decomposizione. Ciò significa, per il design complessivo del database, è che dovrai dichiarare / definire / implementare un vincolo di database che dice e fa esattamente la stessa cosa del FD originale. (La ricetta generale per farlo è la seguente: ricostituire la tabella originale unendo di nuovo le decomposizioni insieme, il progetto che si unisce agli attributi menzionati e impongono la chiave su quella proiezione. Raggiungere questo non sarà esattamente banale per casi come Questi esercizi del corso.)
Decidere se R1 / R2 sono in XNF, ora devono essere eseguiti considerando solo quelli degli FD originali che sono ancora espressibili (A-> BC).
Suppongo che dovresti arrivare alla conclusione che R1 è in 3 / BC NF, e R2 non è ancora.
Esempi come questi (e la maggior parte degli esercizi del corso sono di questa natura) in realtà illustrano il modo in cui ridicolmente ha sovrastampato il concetto di normalizzazione è nel campo del design del database. Ciò che conta è l'immagine complessiva che includa tutti i vincoli che si applicano al database.