Suhde muodostetaan kahden tietokantataulukon välille, kun yksi taulukko käyttää vierasavainta, joka viittaa toisen taulukon ensisijaiseen avaimeen. Tämä on peruskäsite termin relaatiotietokanta takana.
Kuinka vieras avain toimii suhteen luomiseksi
Ensisijainen avain tunnistaa yksilöllisesti jokaisen taulukon tietueen. Se on ehdokasavaimen tyyppi, joka on yleensä taulukon ensimmäinen sarake ja jonka tietokanta voi luoda automaattisesti sen ainutlaatuisuuden varmistamiseksi. Vieras avain on toinen ehdokasavain (ei ensisijainen avain), jota käytetään tietueen linkittämiseen toisen taulukon tietoihin.
Ajattele esimerkiksi näitä kahta taulukkoa, jotka osoittavat, kuka opettaja opettaa mitäkin kurssia. Tässä Kurssit-taulukon ensisijainen avain on Course_ID. Sen vierasavain on Teacher_ID:
Kurssin_tunnus | Kurssin_nimi | Teacher_ID |
---|---|---|
Kurssi_001 | Biologia | Opettaja_001 |
Kurssi_002 | Math | Opettaja_002 |
Kurssi_003 | Englanti | Opettaja_003 |
Voit nähdä, että Kurssien vieraavain vastaa ensisijaista avainta kohdassa Teachers:
Teacher_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 kolmenlaisia yhteyksiä 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 moneen -suhde mahdollistaa yhden taulukon yhden 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.
Monet 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.
Asiakkaat ja tilaukset -taulukon välinen suhde on yksi useaan, mutta ota huomioon Tilaukset ja tuotteet -taulukon välinen suhde. 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 ja yhdistäisimme sen sijaan Kurssit- ja Opettajat-taulukoiden tiedot, kuten:
Teacher_ID | Opettajan_nimi | Kurssi |
---|---|---|
Opettaja_001 | Carmen | Biologia, matematiikka |
Opettaja_002 | Veronica | Math |
Opettaja_003 | Jorge | Englanti |
Tämä rakenne on joustamaton ja rikkoo tietokannan normalisoinnin ensimmäistä periaatetta, First Normal Form -muotoa, jonka mukaan jokaisen taulukon solun tulee sisältää yksittäinen, erillinen tieto.
Tai ehkä päätimme lisätä Carmenille toisen ennätyksen pakottaaksemme 1NF:
Teacher_ID | Opettajan_nimi | Kurssi |
---|---|---|
Opettaja_001 | Carmen | Biologia |
Opettaja_001 | Carmen | Math |
Opettaja_002 | Veronica | Math |
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 tiedot 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.