Yksi-moneen väliset suhteet tietokannassa

Sisällysluettelo:

Yksi-moneen väliset suhteet tietokannassa
Yksi-moneen väliset suhteet tietokannassa
Anonim

Yksi-moneen-suhde tietokannassa tapahtuu, kun jokaisella taulukon A tietueella voi olla useita linkittyjä tietueita taulukossa B, mutta jokaisella taulukon B tietueella voi olla vain yksi vastaava tietue taulukossa A.

Yksi-moneen-suhde tietokannassa on yleisin relaatiotietokantasuunnittelu, ja se on hyvän suunnittelun ydin.

Tietokannot voivat toteuttaa myös yksi-yhteen- ja useista moneen -suhteen.

Image
Image

Esimerkki kahdenvälisestä suhteesta

Mieti opettajan ja hänen opettamiensa kurssien välistä suhdetta. Opettaja voi opettaa useita luokkia, mutta kurssilla ei olisi samaa suhdetta opettajaan.

Siksi opettajat-taulukon jokaisessa tietueessa voi olla useita tietueita Kurssit-taulukossa. Tämä esimerkki havainnollistaa yksi-moneen-suhdetta: yksi opettaja useille kursseille.

Miksi kahdenkeskisen suhteen luominen on tärkeää

Yksi moneen -suhteen edustamiseksi tarvitset vähintään kaksi taulukkoa. Katsotaanpa miksi.

Ensimmäisen normaalin muodon suunnittelun noudattaminen

Ehkä teimme taulukon, johon haluamme tallentaa nimen ja opetetut kurssit. Voimme suunnitella opettajat ja kurssit -taulukon seuraavasti:

Teacher_ID Opettajan_nimi Kurssi
Opettaja_001 Carmen Biologia
Opettaja_002 Veronica Math
Opettaja_003 Jorge Englanti

Entä jos Carmen opettaa kahta tai useampaa kurssia? Meillä on kaksi vaihtoehtoa tälle mallille. Voisimme lisätä sen Carmenin olemassa olevaan ennätykseen näin:

Teacher_ID Opettaja_Nimi Kurssi
Opettaja_001 Carmen Biologia, matematiikka
Opettaja_002 Veronica Math
Opettaja_003 Jorge Englanti

Yllä oleva rakenne on kuitenkin joustamaton ja voi aiheuttaa ongelmia myöhemmin, kun lisäät, muokkaat tai poistat tietoja. Se vaikeuttaa tietojen etsimistä.

Tämä rakenne rikkoo myös tietokannan normalisoinnin ensimmäistä periaatetta, First Normal Form (1NF), jonka mukaan jokaisen taulukon solun tulee sisältää yksittäinen erillinen tieto.

Toinen normaalimuotosääntö

Toinen suunnitteluvaihtoehto voisi olla lisätä Carmenille toinen ennätys:

Opettaja_ID Opettaja_Nimi Kurssi
Opettaja_001 Carmen Biologia
Opettaja_001 Carmen Math
Opettaja_002 Veronica Math
Opettaja_003 Jorge Englanti

Tämä lähestymistapa noudattaa 1NF:ää, mutta on silti huono tietokantasuunnittelu, koska se aiheuttaa redundanssia ja voi turvottaa suurta tietokantaa tarpeettomasti. Vielä tärkeämpää on, että tiedoista voi tulla epäjohdonmukaisia.

Esimerkiksi mitä jos Carmenin nimi muuttuisi? Joku tietojen parissa työskentelevä saattaa päivittää nimensä yhdessä tietueessa ja epäonnistua toisessa tietueessa.

Tämä rakenne rikkoo 2NF (Second Normal Form) -standardia, joka noudattaa 1NF:ää, ja sen on myös vältettävä useiden tietueiden redundanssia. 2NF-sääntö saavuttaa tämän erottamalla tietojen osajoukot useiksi taulukoiksi ja luomalla niiden välille suhteen.

Kuinka suunnitella tietokanta, jossa on yksi-moneen-suhteita

Ota yksi moneen -suhteen käyttöön Opettajat ja kurssit -taulukossa jakamalla taulukot kahteen osaan ja linkittämällä ne vieraalla avaimella.

Tässä poistimme Kurssi-sarakkeen Opettajat-taulukosta:

Opettaja_ID Opettaja_Nimi
Opettaja_001 Carmen
Opettaja_002 Veronica
Opettaja_003 Jorge

Ja tässä on Kurssit-taulukko. Huomaa, että sen vierasavain, Teacher_ID, linkittää kurssin opettajaan opettajataulukossa:

Kurssin_tunnus Kurssin_nimi Teacher_ID
Kurssi_001 Biologia Opettaja_001
Kurssi_002 Math Opettaja_001
Kurssi_003 Englanti Opettaja_003

Olemme kehittäneet suhteen Opettajat- ja Kurssit-taulukon välille vieraalla avaimella. Tämä järjestely kertoo meille, että Carmen opettaa sekä biologiaa että matematiikkaa ja että Jorge opettaa englantia.

Näemme, kuinka tämä suunnittelu välttää mahdolliset irtisanomiset, antaa yksittäisille opettajille mahdollisuuden opettaa useita kursseja ja toteuttaa yksi-moneen-suhteen.

Suositeltava: