Tänään luin 3NF-hajoamisalgoritmista. Siinä sanottiin:
- Etsi minimaalinen perusta F: lle, sano G =
- Jokaiselle FD X → A: lle G: ssä käytä {X, A} yhtenä hajotuksen relaation kaaviona
- 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:
-
{A→B, B→A, B→C, C→B}
; ja -
{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:
- Etsi minimaalinen perusta F: lle, sano G
- 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
- Poista kaikki suhteet, joiden määritteet sisältyvät toiseen relaatioon.
- 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.
A First Course in Database System - 3rd edition
. Minkä minun pitäisi noudattaa nyt?