Kuinka hajottaa tämä suhde 3NF-suhteiksi?

Tänään luin 3NF-hajoamisalgoritmista. Siinä sanottiin:

  1. Etsi minimaalinen perusta F: lle, sano G =
  2. Jokaiselle FD X → A: lle G: ssä käytä {X, A} yhtenä hajotuksen relaation kaaviona
  3. Jos mikään vaiheen 2 relaatiojoukoista ei ole R: n superavain, lisää toinen relaatio, jonka kaava on avain R: lle

Haluan hajottaa tämän suhteen 3NF: ksi.

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} 

Kuten näemme, R: n avain on: {A},{B},{C}

S : llä on useita vähimmäisperusteita, kuten:

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

Ongelma on, että jos käytämme ensimmäistä minimipohjaa, hajotamme R kahdeksi relaatioksi : (A, B), (B, C).

Jos käytämme 2. minimipohjaa, R muuttuu seuraaviksi: (A, B), (B, C), (C, A).

Kysymykseni kuuluu: kumpi on oikea?

Vastaa

Huomaa ensinnäkin, että alkuperäinen suhde on jo kolmannessa normaalimuodossa, koska kukin attribuutti on ensisijainen (kukin attribuutti on itse asiassa avain), joten 3NF: n määritelmää noudatetaan.

Huomaa sitten, että algoritmi on puutteellinen. Vaiheet ovat:

  1. Etsi minimaalinen perusta F: lle, sano G
  2. Jokaiselle FD-ryhmälle, jolla on sama vasen osa, X → A 1 , X → A 2 , …, X → A n G: ssä, käytä {X, A 1 , A 2 , …, A n } yhtenä hajotussuhteen kaaviona
  3. Poista kaikki suhteet, joiden määritteet sisältyvät toiseen relaatioon.
  4. Jos mikään vaiheen 2 relaatiojoukoista ei ole R: n avain, lisää toinen relaatio, jonka kaava on avain R: lle.

Joten ensimmäisessä tapauksessa saat kolme riippuvuusryhmää:

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

jotka tuottavat kolme relaatiota, R 1 (A, B), R 2 (A, B, C), R 3 (B, C), ja algoritmia noudattaen saat tulokseksi vain R 2 , koska kahdella muulla on määritteitä.

Joten sinulla on kaksi erilaista lähtöä algoritmista käytetyn minimikannan mukaan (mikä puolestaan riippuu missä järjestyksessä otat huomioon riippuvuudet laskiessasi vähimmäiskatetta).

Joten, vastaus kysymykseesi:

mikä yksi on oikea?

on: molemmat ovat oikeita , koska molemmat täyttävät 3NF: n määritelmän. Olet yksinkertaisesti huomannut, että synteesialgoritmi relaation hajottamiseksi 3NF: ssä voi tuottaa erilaisia ratkaisuja.

Eri kysymys on: mikä on ”parempi”, ja tietysti ratkaisu yhdellä relaatiolla on ”parempi”. , koska sinun ei tarvitse liittyä taulukoihin kyselyjä tehdessäsi.

Jos joku voisi alusta tarkistaa, onko suhde jo 3NF: ssä, hän ei voi välttää algoritmin käyttöä. Tätä ei kuitenkaan yleensä voida tehdä, koska tarkistus vaatii kaikkien avainten eksponentiaalisen laskennan relaation päämääritteiden löytämiseksi.

Kommentit

  • Kiitos vastauksestasi! Mutta miten tuotit 3 relaatiota: R1 (A, B), R2 (A, B, C), R3 (B, C)? Luulin, että sillä on vain R1 ja R3. R2 on alkuperäinen suhde.
  • Oikean algoritmin toisessa vaiheessa on kaksi riippuvuutta, joilla on sama vasen osa, B → A ja B → C, joten sinun tulisi laittaa kaikki attribuutit yhteen ja saada suhde (A, B, C). Sen sanelee vain algoritmi.
  • Vau, en tiennyt ' en tällöin toisesta vaiheesta. Otin algoritmin kirjasta nimeltä A First Course in Database System - 3rd edition. Minkä minun pitäisi noudattaa nyt?
  • Tuo algoritmi ei ole täydellinen. Kaikilla tärkeimmillä tietokantakirjoilla on algoritmi, jonka olen kuvannut vastauksessa.

Vastaa

Sähköpostiosoitettasi ei julkaista. Pakolliset kentät on merkitty *