Skip to main content

Tietokannan yksi-monta suhdetta

Zeitgeist Addendum (Saattaa 2024)

Zeitgeist Addendum (Saattaa 2024)
Anonim

Tietokannassa on yksi suhde moniin suhteisiin, kun taulukossa A olevilla tietueilla voi olla useita linkitettyjä tietueita taulukossa B, mutta taulukossa B olevilla jokaisella tietueella voi olla vain yksi vastaava tietue taulukossa A. Yksittäinen suhde tietokanta on yleisin relaatiotietokannan suunnittelu ja se on hyvän suunnittelun ydin.

Tarkastellaan opettajan ja heidän opettajiensa välistä suhdetta. Opettaja voi opettaa useita kursseja, mutta kurssilla ei olisi samaa suhdetta opettajaan.

Siksi Opettajat-taulukossa jokaiselle tietueelle kursseja koskevassa taulukossa voi olla monia tietueita. Tämä on monen suhde: yksi opettaja useisiin kursseihin.

Miksi monien suhteiden luominen on tärkeää

Yksittäisen suhteen edustamiseksi tarvitset vähintään kaksi taulukkoa. Katsotaanpa miksi.

Ehkä me luotiin taulukko, jossa halusimme tallentaa nimen ja kurssit. Voisimme suunnitella sen seuraavasti:

Opettajat ja kurssit
Teacher_IDOpettajan nimikurssi
Teacher_001carmenBiologia
Teacher_002VeronicaMatematiikka
Teacher_003JorgeEnglanti

Entä jos Carmen opettaa kahta tai useampaa kurssia? Meillä on kaksi vaihtoehtoa tämän mallin kanssa. Voisimme vain lisätä sen Carmenin nykyiseen tietueeseen, kuten:

Opettajat ja kurssit
Teacher_IDOpettaja_Nimikurssi
Teacher_001carmenBiologia, Matematiikka
Teacher_002VeronicaMatematiikka
Teacher_003JorgeEnglanti

Yllä oleva malli on kuitenkin joustamaton ja voi aiheuttaa ongelmia myöhemmin, kun yrittää lisätä, muokata tai poistaa tietoja.

Tietojen etsiminen vaikeuttaa. Tämä malli rikkoo tietokannan normalisoinnin ensimmäistä periaatetta, First Normal Form (1NF), jossa todetaan, että jokaisen taulukon solun tulisi sisältää yksi, erillinen tieto.

Toinen suunnitteluvaihtoehtona voisi olla yksinkertaisesti lisätä toinen levy Carmenille:

Opettajat ja kurssit
Opettaja_IDOpettaja_Nimikurssi
Teacher_001carmenBiologia
Teacher_001carmenMatematiikka
Teacher_002VeronicaMatematiikka
Teacher_003JorgeEnglanti

Tämä noudattaa 1NF mutta on edelleen huono tietokannan suunnittelu, koska se tuo redundanssia ja voi paisuttaa hyvin suurta tietokantaa tarpeettomasti. Vielä tärkeämpää on, että tiedot saattavat olla epäyhtenäisiä. Esimerkiksi, jos Carmenin nimi muuttui? Joku, joka työskentelee tietojen kanssa, saattaa päivittää nimensä yhteen tietueeseen eikä päivitä sitä toisessa tietueessa. Tämä malli rikkoo toisen normaalimuodon (2NF), joka tarttuu 1 NF: ään, ja sen on myös vältettävä useita tietueiden irtisanomisia erottamalla tietoryhmät useisiin taulukoihin ja luomalla niiden välinen suhde.

Tietokannan suunnittelu tietokannoissa, joissa on monia suhteita

Yhden ja usean suhteen toteuttamiseksi Opettajat ja kurssit -taulukossa, ristisimme taulukoita kahteen ja linkitimme ne ulkomaisen avaimen avulla.

Tässä olemme poistaneet kurssin sarakkeen Opettajat-taulukossa:

opettajat
Opettaja_IDOpettaja_Nimi
Teacher_001carmen
Teacher_002Veronica
Teacher_003Jorge

Ja tässä on kursseja koskeva taulukko. Huomaa, että sen vieraan avaimen, Teacher_ID, linkittää kurssin opettajalle Teachers-taulukossa:

Kurssit
Course_IDKurssin nimiTeacher_ID
Course_001BiologiaTeacher_001
Course_002MatematiikkaTeacher_001
Course_003EnglantiTeacher_003

Olemme kehittäneet suhdetta opettajien ja kurssit-taulukon välityksellä ulkomaisen avaimen avulla.

Tämä kertoo, että sekä Biologia että matematiikka opettaa Carmen ja että Jorge opettaa englantia.

Voimme nähdä, miten tämä muotoilu välttää mahdolliset irtisanomiset, antaa yksittäisille opettajille mahdollisuuden opettaa useita kursseja ja toteuttaa yhden suhde.

Tietokannat voivat myös toteuttaa yhden suhde ja monien suhde.