Mikä on tietokantasuhde?

Kahden tietokantataulukon välille muodostuu suhde, kun yksi taulukko käyttää a vieras avain joka viittaa pääavain toisesta pöydästä. Tämä on termin relaatiotietokanta taustalla oleva peruskäsite.

Kuinka vieras avain toimii suhteen luomiseksi

Ensisijainen avain tunnistaa yksilöllisesti jokaisen taulukon tietueen. Se on eräänlainen ehdokasavain joka on yleensä taulukon ensimmäinen sarake, ja tietokanta voi luoda sen automaattisesti varmistaakseen, että se on ainutlaatuinen. Vieras avain on toinen ehdokasavain (ei ensisijainen avain), jota käytetään tietueen linkittämiseen toisen taulukon tietoihin.

Harkitse esimerkiksi näitä kahta taulukkoa, jotka osoittavat, kuka opettaja opettaa minkä kurssin. Tässä Kurssit-taulukon ensisijainen avain on Course_ID. Sen vierasavain on Teacher_ID:

Kurssin_ID Kurssin nimi Opettajan_ID
Kurssi_001 Biologia Opettaja_001
Kurssi_002 Matematiikka Opettaja_002
Kurssi_003 Englanti Opettaja_003

Voit nähdä, että Kurssien vierasavain vastaa Teachers-sovelluksen ensisijaista avainta:

Opettajan_ID Opettajan nimi
Opettaja_001 Carmen
Opettaja_002 Veronica
Opettaja_003 Jorge

Voimme sanoa, että Teacher_ID-vierasavain auttoi luomaan yhteyden kurssien ja opettajien taulukoiden välille.

Kaavio tietokoneen näytöllä
Glow / Getty Images

Tietokantasuhteiden tyypit

Käyttämällä vieraita avaimia tai muita ehdokasavaimia voit toteuttaa kolmen tyyppisiä suhteita taulukoiden välillä:

Yksi yhteen

Tämäntyyppinen suhde sallii vain yhden tietueen suhteen kummallakin puolella. Ensisijainen avain liittyy vain yhteen tietueeseen (tai ei yhteenkään) toisessa taulukossa. Esimerkiksi avioliitossa kummallakin puolisolla on vain yksi toinen puoliso. Tällainen suhde voidaan toteuttaa yhdessä taulukossa, joten se ei käytä vierasavainta.

Yksi moniin

Yksi moniin -suhde mahdollistaa yhden taulukon yksittäisen tietueen liittämisen useisiin toisen taulukon tietueisiin. Harkitse yritystä, jolla on asiakas- ja tilaustaulukot sisältävä tietokanta.

Yksi asiakas voi ostaa useita tilauksia, mutta yhtä tilausta ei voitu linkittää useisiin asiakkaisiin. Siksi Tilaukset-taulukko sisältäisi vieraan avaimen, joka vastaa Asiakkaat-taulukon ensisijaista avainta, kun taas Asiakkaat-taulukossa ei olisi Vieraa-avainta, joka osoittaisi Tilaukset-taulukkoon.

Monelta moneen

Tämä on monimutkainen suhde, jossa monet taulukon tietueet voivat linkittää moniin toisen taulukon tietueisiin. Yrityksemme tarvitsee esimerkiksi todennäköisesti Asiakkaat- ja Tilaukset-taulukoita ja todennäköisesti myös Tuotteet-taulukon.

Myös asiakkaat ja tilaukset -taulukon välinen suhde on yksi useaan, mutta harkitse Tilaukset ja tuotteet -taulukon välistä suhdetta. Tilaus voi sisältää useita tuotteita, ja tuote voi olla linkitetty useisiin tilauksiin, koska useat asiakkaat voivat lähettää tilauksen, joka sisältää joitain samoja tuotteita. Tällainen suhde vaatii vähintään kolme taulukkoa.

Miksi tietokantasuhteet ovat tärkeitä?

Johdonmukaisten suhteiden luominen tietokantataulukoiden välille auttaa varmistamaan tietojen eheyden, mikä edistää tietokannan normalisointia. Entä jos emme esimerkiksi linkittäisi yhtään taulukkoa vieraalla avaimella, vaan yhdistäisimme Kurssit- ja Opettajat-taulukoiden tiedot näin:

Opettajan_ID Opettajan nimi Kurssi
Opettaja_001 Carmen Biologia, matematiikka
Opettaja_002 Veronica Matematiikka
Opettaja_003 Jorge Englanti

Tämä rakenne on joustamaton ja rikkoo tietokannan normalisoinnin ensimmäistä periaatetta, First Normal Form -periaatetta, jonka mukaan jokaisen taulukon solun tulee sisältää yksittäinen, erillinen tieto.

Tai ehkä päätimme lisätä Carmenille toisen ennätyksen pakottaaksemme 1NF: n:

Opettajan_ID Opettajan nimi Kurssi
Opettaja_001 Carmen Biologia
Opettaja_001 Carmen Matematiikka
Opettaja_002 Veronica Matematiikka
Opettaja_003 Jorge Englanti

Tämä on edelleen heikko rakenne, joka aiheuttaa tarpeetonta päällekkäisyyttä ja niin kutsuttuja tietojen lisäysvirheitä, mikä tarkoittaa, että se voi myötävaikuttaa epäjohdonmukaisiin tietoihin. Jos esimerkiksi opettajalla on useita tietueita, entä jos joitain tietoja on muokattava, mutta tietojen muokkaaja ei ymmärrä, että tietueita on useita? Taulukko sisältäisi sitten eri tietoja samasta henkilöstä ilman selkeää tapaa tunnistaa se tai välttää sitä.

Tämän taulukon jakaminen kahteen taulukkoon, opettajat ja kurssit, luo oikean suhteen tietojen välille ja auttaa siten varmistamaan tietojen johdonmukaisuuden ja tarkkuuden.