I dag læste jeg om 3NF-dekomponeringsalgoritmen. Det sagde:
- Find et minimalt grundlag for F, sig G
- For hver FD X → A i G, brug {X, A} som skema for et af forholdene i nedbrydningen
- Hvis ingen af sætene af relationer fra trin 2 er en supernøgle til R, skal du tilføje en anden relation, hvis skema er en nøgle til R
Jeg vil nedbryde denne relation til 3NF.
R(A,B,C) S={A→B, A→C, B→A, B→C, C→A, C→ B, AB→ C, BC→A, AC→B, A→BC, B→AC, C→AB}
Som vi kan se, er nøglen til R: {A},{B},{C}
S har flere minimale grundlag, såsom:
-
{A→B, B→A, B→C, C→B}
; og -
{A→B, B→C, C→A}
Problemet er, at hvis vi bruger det første minimale grundlag, så nedbryder vi R til 2 relationer : (A, B), (B, C).
Hvis vi bruger det 2. minimale grundlag, bliver R til: (A, B), (B, C), (C, A).
Mit spørgsmål er: hvilken er korrekt?
Svar
Bemærk først og fremmest at original relation er allerede i tredje normale form, da hver attribut er primær (hver attribut er faktisk en nøgle), så definitionen af 3NF respekteres.
Bemærk derefter, at algoritmen er ufuldstændig. Trinene er:
- Find et minimalt grundlag for F, sig G
- For hver gruppe af FD med den samme venstre del, X → A 1 , X → A 2 , …, X → A n i G, brug {X, A 1 , A 2 , …, A n } som skema for et af forholdene i nedbrydningen
- Slet alle de forhold, hvis attributter er indeholdt i en anden relation.
- Hvis intet af sæt af relationer fra trin 2 er en supernøgle til R, skal du tilføje en anden relation, hvis skema er en nøgle til R.
Så i det første tilfælde opnår du tre grupper af afhængigheder:
A → B B → A B → C C → B
der producerer tre relationer, R 1 (A, B), R 2 (A, B, C), R 3 (B, C), og efter algoritmen opnår du som resultat kun R 2 , da de to andre har attributter indeholdt i dem.
Så du har to forskellige output fra algoritmen afhængigt af den anvendte minimale base (hvilket igen afhænger af den rækkefølge, som du overvejer afhængighederne ved beregning af den minimale dækning).
Så svaret på dit spørgsmål:
som en er korrekt?
er: begge er korrekte , da begge opfylder definitionen af 3NF. Du har simpelthen opdaget, at syntesealgoritmen til nedbrydning af en relation i 3NF kan producere forskellige løsninger.
Et andet spørgsmål er: hvad er “bedre”, og selvfølgelig er løsningen med en enkelt relation “bedre” , da du ikke behøver at deltage i tabeller, når du foretager forespørgsler.
Selvfølgelig, hvis man i starten kunne kontrollere, om forholdet allerede er i 3NF, kan han undgå at anvende algoritmen. Men dette kan generelt ikke gøres, da kontrollen kræver eksponentiel beregning af alle nøgler for at finde de primære attributter for forholdet.
A First Course in Database System - 3rd edition
. Hvilken skal jeg følge nu?