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). .

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top