Hvordan spaltes dette forholdet i 3NF-forhold?

I dag leste jeg om 3NF-dekomponeringsalgoritmen. Det sa:

  1. Finn et minimalt grunnlag for F, si G
  2. For hver FD X → A i G, bruk {X, A} som skjema for en av relasjonene i nedbrytningen
  3. Hvis ingen av settene med forhold fra trinn 2 er en supernøkkel for R, legg til en annen relasjon hvis skjema er en nøkkel for R

Jeg vil dekomponere denne relasjonen 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økkelen til R: {A},{B},{C}

S har flere minimale grunnlag, for eksempel:

  1. {A→B, B→A, B→C, C→B}; og
  2. {A→B, B→C, C→A}

Problemet er at hvis vi bruker det første minimale grunnlaget, så spalter vi R i to relasjoner : (A, B), (B, C).

Hvis vi bruker den 2. minimale basis, blir R til: (A, B), (B, C), (C, A).

Spørsmålet mitt er: hvilken er riktig?

Svar

Merk deg først at den opprinnelige relasjonen er allerede i tredje normale form, siden hvert attributt er primtall (hvert attributt er en nøkkel, faktisk), slik at definisjonen av 3NF blir respektert.

Vær så oppmerksom på at algoritmen er ufullstendig. Trinnene er:

  1. Finn et minimalt grunnlag for F, si G
  2. For hver gruppe av FD med samme venstre del, X → A 1 , X → A 2 , …, X → A n i G, bruk {X, A 1 , A 2 , …, A n } som skjema for en av relasjonene i nedbrytningen
  3. Slett alle relasjonene hvis attributter er inneholdt i en annen relasjon.
  4. Hvis ingen av settene med relasjoner fra trinn 2 er en supernøkkel for R, legg til en annen relasjon hvis skjema er en nøkkel for R.

Så i det første tilfellet får du tre grupper av avhengigheter:

A → B B → A B → C C → B 

som gir tre forhold, R 1 (A, B), R 2 (A, B, C), R 3 (B, C), og etter algoritmen får du som resultat bare R 2 , siden de to andre har attributter i dem.

Så du har to forskjellige utganger fra algoritmen, avhengig av den minimale basen som brukes (som igjen avhenger av rekkefølgen du vurderer avhengighetene når du beregner det minimale dekket).

Så svaret på spørsmålet ditt:

som en er riktig?

er: begge er korrekte siden de begge tilfredsstiller definisjonen av 3NF. Du har rett og slett oppdaget at syntesealgoritmen for å spalte en relasjon i 3NF kan produsere forskjellige løsninger.

Et annet spørsmål er: hva er «bedre», og selvfølgelig er løsningen med en enkelt relasjon «bedre» , siden du ikke trenger å bli med i tabeller når du gjør spørsmål.

Selvfølgelig, hvis man i begynnelsen kunne sjekke om forholdet allerede er i 3NF, enn han kan unngå å bruke algoritmen. Men dette kan generelt ikke gjøres, siden sjekken krever eksponentiell beregning av alle nøklene, for å finne hovedattributtene til relasjonen.

Kommentarer

  • Takk for svaret! Men hvordan produserte du tre forhold: R1 (A, B), R2 (A, B, C), R3 (B, C)? Jeg trodde den bare har R1 og R3. R2 er den opprinnelige relasjonen.
  • For det andre trinnet i riktig algoritme er det to avhengigheter med samme venstre del, B → A og B → C, så du bør sette alle attributtene sammen og få forholdet (A, B, C). Det er bare diktert av algoritmen.
  • Wow, jeg visste ikke ' om det andre trinnet. Jeg tok algoritmen fra en bok som heter A First Course in Database System - 3rd edition. Hvilken skal jeg følge nå?
  • Den algoritmen er ikke komplett. Alle de store bøkene om databaser har algoritmen som jeg har beskrevet i svaret.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *