Kahden tietokantataulukon välille muodostuu suhde, 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 luomisessa
Ensisijainen avain tunnistaa yksilöllisesti jokaisen taulukon tietueen. Se on ehdokasavaintyyppi, 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 liittä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. Vieras avain on Teacher_ID:
Kurssin tunnus | 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 | Nimeä opettaja |
---|---|
opettaja_001 | carmen |
opettaja_002 | Veronica |
opettaja_003 | Jorge |
Voidaan sanoa, että vieras avain Teacher_ID auttoi luomaan yhteyden Kurssit- ja Opettajataulukoiden välille.
Tietokannan suhdetyypit
Käyttämällä vieraita avaimia tai muita ehdokasavaimia voit toteuttaa kolmen tyyppisiä suhteita taulukoiden välillä:
Yksi vastaan
Tämäntyyppinen suhde sallii vain yhden tietueen suhteen kummallakin puolella. Ensisijainen avain koskee vain yhtä tietuetta (tai ei mitää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.
Ylimäärä
Yksi moniin -suhde mahdollistaa yhden taulukon yksittäisen tietueen liittämisen useisiin toisen taulukon tietueisiin. Harkitse yritystä, jolla on tietokanta asiakas- ja tilaustaulukoista. Yksi asiakas voi ostaa useita tilauksia, mutta yhtä tilausta ei voi yhdistää useisiin asiakkaisiin. Siksi Tilaukset-taulukko sisältäisi vieraan avaimen, joka vastaa Asiakkaat-taulukon ensisijaista avainta, kun taas Asiakkaat-taulukossa ei olisi Tilaukset-taulukkoon osoittavaa vierasavainta.
Liian paljon
Tämä on monimutkainen suhde, jossa useita yhden taulukon tietueita voidaan liittää useisiin toisen taulukon tietueisiin. Esimerkiksi yrityksemme tarvitsee todennäköisesti Asiakkaat- ja Tilaukset-taulukot ja luultavasti myös Tuotteet-taulukon. Myös asiakkaat ja tilaukset -taulukon välinen suhde on yksi useaan, mutta muista Tilaukset- ja Tuotteet-taulukon välinen suhde. Tilaus voi sisältää useita tuotteita ja tuote voidaan liittää useisiin tilauksiin, koska useat asiakkaat voivat tehdä tilauksen, joka sisältää joitain samoja tuotteita. Tämäntyyppinen suhde vaatii vähintään kolme taulukkoa.
Miksi tietokantasuhteet ovat tärkeitä?
Johdonmukaisten suhteiden luominen tietokantataulukoiden välille auttaa varmistamaan tietojen eheyden ja edistää tietokannan normalisointia. Entä jos emme esimerkiksi linkitä taulukoita vieraalla avaimella, vaan yhdistäisimme sen sijaan Kurssit- ja Opettajat-taulukoiden tiedot seuraavasti:
Opettajan_ID | Nimeä opettaja | Luokka |
---|---|---|
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, jonka mukaan jokaisen taulukon solun on sisällettävä yksi tieto. Tai ehkä päätimme lisätä Carmenille toisen ennätyksen pakottaaksemme 1NF:n:
Opettajan_ID | Nimeä opettaja | Luokka |
---|---|---|
opettaja_001 | carmen | Biologia |
opettaja_001 | carmen | Matematiikka |
opettaja_002 | Veronica | Matematiikka |
opettaja_003 | Jorge | Englanti |
Tämä on edelleen heikko rakenne ja aiheuttaa tarpeettomia päällekkäisyyksiä ja niin sanottuja poikkeamia tietojen lisäyksessä, mikä tarkoittaa, että se voi myötävaikuttaa epäjohdonmukaisiin tietoihin. Jos esimerkiksi opettajalla on useita tietueita, entä jos joitakin tietoja on muokattava, mutta tietojen muokkauksen suorittava henkilö ei ymmärrä, että tietueita on useita? Taulukko sisältäisi tällöin eri tiedot samasta henkilöstä, ilman ilmeistä tapaa tunnistaa tai välttää niitä. Tämän taulukon jakaminen kahteen taulukkoon, opettajat ja kurssit, luo oikean suhteen tietojen välille ja varmistaa siten tietojen johdonmukaisuuden ja tarkkuuden.