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.

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.