Hvordan nedbrydes dette forhold i 3NF-forhold?

I dag læste jeg om 3NF-dekomponeringsalgoritmen. Det sagde:

  1. Find et minimalt grundlag for F, sig G
  2. For hver FD X → A i G, brug {X, A} som skema for et af forholdene i nedbrydningen
  3. 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:

  1. {A→B, B→A, B→C, C→B}; og
  2. {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:

  1. Find et minimalt grundlag for F, sig G
  2. 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
  3. Slet alle de forhold, hvis attributter er indeholdt i en anden relation.
  4. 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.

Kommentarer

  • Tak for dit svar! Men hvordan producerede du 3 relationer: R1 (A, B), R2 (A, B, C), R3 (B, C)? Jeg troede, det kun har R1 og R3. R2 er den oprindelige relation.
  • For det andet trin i den korrekte algoritme er der to afhængigheder med den samme venstre del, B → A og B → C, så du skal samle alle attributterne og få forholdet (A, B, C). Det dikteres bare af algoritmen.
  • Wow, jeg vidste ikke ' om det 2. trin. Jeg tog algoritmen fra en bog med navnet A First Course in Database System - 3rd edition. Hvilken skal jeg følge nu?
  • Denne algoritme er ikke komplet. Alle de store bøger om databaser har den algoritme, som jeg har beskrevet i svaret.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *