database relationship eb40478e1d9b4b73aec6452586c8927f scaled

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.

Por Markus