Kun puhutaan tietokannoista ja kaikesta niihin liittyvästä, perusavain (eng. primary key) on termi, joka tulee vastaan kerta toisensa jälkeen. Sillä tarkoitetaan tiettyä valintaa minimijoukosta attribuutteja (kuten esimerkiksi sarakkeita), jotka määrittävät yksiselitteisesti monikon (kuten rivin) suhteeseen nähden (esimerkiksi taulukossa). Asia voidaan esittää yksinkertaistettuna kysymyksen kautta: “mitä attribuutteja tarvitaan tietyn tietueen tunnistamiseen?”
Asia voidaan myös esittää niin, että perusavain on ehdokasavaimen valinta (minimaalinen superavain), kun taas mikä tahansa muu ehdokasavain on tällöin vaihtoehtoinen avain. Jos taas erillisiä tietueita pitää yhdistää, tähän tarvitaan vierasavain. Tässä artikkelissa käymme läpi kaikki nämä termit selkokielellä.
Mitä perusavain tarkoittaa?
Perusavain on erityinen relaatiotietokantataulukon sarake (tai sarakkeiden yhdistelmä), joka on määritelty yksilöimään jokainen taulukkotietue erikseen.
Primary key on yleisesti ottaen käytössä yksilöllisenä tunnisteena taulukon tietojen nopeaan jäsentämiseen. Huomionarvoista tässä on erityisesti se, että taulukossa voi olla vain yksi perusavain.
Perusavaimen pääominaisuudet ovat seuraavat:
- Sen tulee sisältää yksilöllinen arvo jokaiselle tietoriville.
- Se ei voi sisältää nolla-arvoja.
- Jokaisella rivillä on oltava perusavaimen arvo.
Perusavain voi käyttää yhtä tai useampaa kenttää, joka on jo olemassa taustalla olevassa tietomallissa, tai tietty ylimääräinen kenttä voidaan luoda primary keyksi. Se siis auttaa analysoimaan tietovarastoja.
Techopedia selittää mikä on perusavain
Perusavain ja sen pääkonsepti on kriittinen tehokkaan relaatiotietokannan kannalta. Ilman primary keyta ja siihen läheisesti liittyviä vierasavaimen käsitteitä relaatiotietokannat eivät voisi toimia.
Itse asiassa, koska taulukko voi helposti sisältää tuhansia tietueita (mukaan lukien kaksoiskappaleet), perusavain on välttämätön nimenomaan sen varmistamiseksi, että taulukkotietue voidaan aina tunnistaa yksilöllisesti.
- Kaikkia reaalimaailman havainnoista ja attribuuteista peräisin olevia avaimia kutsutaan luonnollisiksi perusavaimiksi, toisin kuin ne korvaavat primary keyt, jotka sen sijaan määrätään mielivaltaisesti jokaiselle tietueelle.
- Lähes kaikki ihmiset käsittelevät luonnollisia perusavaimia koko ajan, mutta tekevät sen tietämättään jokapäiväisessä elämässä.
Otetaan tästä muutama esimerkki. Opiskelijoille annetaan rutiininomaisesti yksilölliset tunnistenumerot, ja kaikilla Suomen kansalaisilla on valtion myöntämä yksilöllisesti tunnistettavissa oleva sosiaaliturvatunnus. Niiden perusteella tietokoannasta pystytään erottamaan eri opiskelijat toisistaan. Rekisteritiedot tai ajokorttinumerot taas ovat esimerkkejä perusavaimista, joita käytetään vastaavasti sijaintien tai autojen yksilölliseen tunnistamiseen.
Toisena esimerkkinä voidaan mainita se, että tietokannassa on oltava kaikki liikepankin tallentamat tiedot. Kaksi tietokantataulukkoa sisältävät CUSTOMER_MASTER, joka tallentaa perus- ja staattiset asiakastiedot (kuten esim. nimi, syntymäaika, osoite, sosiaaliturvatunnus jne.) ja ACCOUNTS_MASTER, joka tallentaa erilaisia pankkitilitietoja (kuten tilin luomispäivämäärä, tilin tyyppi, nostorajoitukset tai vastaavat tilitiedot jne.).
Muita tapoja käyttää primary key
Asiakkaiden yksilöllistä tunnistamista varten valitaan sarake tai sarakkeiden yhdistelmä, jotta voidaan taata, että kahdella asiakkaalla ei koskaan ole samaa ainutlaatuista arvoa. Tämän avulla tietyt sarakkeet poistetaan välittömästi, kuten sukunimi ja syntymäaika.
Hyvä ensisijainen perusavain on tällöin sarake, joka on tarkoitettu pitämään yllä sosiaaliturvatunnusten tiedostoa. Joillakin tilinhaltijoilla ei kuitenkaan välttämättä ole sosiaaliturvatunnusta, joten tämän sarakkeen ehdokkuudesta jätetään pois.
Seuraava looginen vaihtoehto on käyttää sarakkeiden yhdistelmää, kuten sukunimen lisääminen sähköpostiosoitteeseen, jolloin syntyy pitkä ja hankala perusavain.
Paras vaihtoehto on tällöin luoda erillinen ensisijainen avain uuteen sarakkeeseen, jonka nimi on CUSTOMER_ID. Sitten tietokanta luo automaattisesti yksilöllisen numeron joka kerta kun asiakas lisätään, mikä takaa yksilöllisen tunnisteen.
- Kun tämä avain luodaan, sarake määritetään perusavaimeksi SQL-skriptissä, joka luo taulukon, ja jossa kaikki tyhjät arvot hylätään automaattisesti.
- Kuhunkin CUSTOMER_ID:hen liitetty tilinumero mahdollistaa asiakkaiden kyselyiden turvallisen käsittelyn ja nopean hakuajan (sama pätee mihin tahansa indeksoituun taulukkoon).
- Asiakasta voidaan esimerkiksi pyytää antamaan sukunimensä, kun hän tekee pankkikyselyä. Yleinen sukunimikysely (kuten Koskinen) antaa tällöin todennäköisesti useita tuloksia.
- Tietojen kyselyssä perusavaimen ainutlaatuisuusominaisuuden hyödyntäminen takaa tällöin yhden tuloksen.
Perusavain vs. vierasavain
Kun keskustelemme siitä, mikä on perusavain ja mihin kaikkeen sen käyttö vaikuttaa, meidän on myös ymmärrettävä toinen siihen liittyvä termi: vierasavain.
Vierasavain on sarake tai sarakeryhmä relaatiotietokantataulukossa, joka tarjoaa linkin kahden taulukon tietojen välille. Se toimii ristiviittauksena taulukoiden välillä, mikä tarkoittaa, että se viittaa toisen taulukon perusavaimeen ja muodostaa siten linkin niiden välille.
Suurin osa relaatiotietokantajärjestelmän taulukoista noudattaa vieraan avaimen käsitettä. Monimutkaisissa tietokannoissa ja tietovarastoissa verkkotunnuksen tiedot on lisättävä useisiin taulukoihin, jotta niiden välinen suhde säilyy. Viittauksen eheyden käsite on johdettu vieraiden avainten teoriasta. Vieraat avaimet ja niiden toteutus ovat monimutkaisempia kuin perusavaimen.
Vaikka perusavain voi olla olemassa yksinään, vieraan avaimen on aina viitattava johonkin perusavaimeen. Alkuperäinen taulukko, joka sisältää perusavaimen, on tällöin päätaulukko (tunnetaan myös nimellä viitattu taulukko). Tähän avaimeen voidaan viitata useilla vierailla avaimilla muista taulukoista, joita kutsutaan “lapsitaulukoiksi”.
Jokaiselle vieraana avaimena toimivalle sarakkeelle on oltava vastaava arvo linkitetyssä taulukossa. Erityistä varovaisuutta on noudatettava silloin, kun lisätään tietoja tai poistetaan tietoja viiteavainsarakkeesta, koska huolimaton poisto tai lisäys voi tuhota kahden taulukon välisen suhteen.
Jos kahden tietokannan välinen eheys vaarantuu, seurauksena voi olla virheitä
Jos esimerkiksi on kaksi taulukkoa, kuten vaikka ‘asiakas ‘ja ‘tilaus’, niiden välille voidaan luoda suhde lisäämällä tilaustaulukkoon vierasavain, joka viittaa asiakastaulukon CUSTOMER-ID:hen. Perusavain eli CUSTOMER_ID-sarake on sekä asiakas- että tilaustaulukoissa.
Tilaustaulukon CUSTOMER_ID:stä tulee tällöin vierasavain, joka viittaa asiakastaulukon perusavaimeen. Jos haluat lisätä merkinnän tilaustaulukkoon, vierasavaimen rajoituksen on täytyttävä.
Yritys syöttää CUSTOMER_ID, jota ei ole asiakastaulukossa, epäonnistuu, mikä säilyttää taulukon viitteellisen eheyden. Reaalimaailman tietokannoissa vieraiden avainten ja perusavainten taulukoiden välinen eheys voidaan varmistaa pakottamalla viittausrajoituksia aina, kun viitatun taulukon rivejä päivitetään tai poistetaan.
Joitakin viitetoimintoja, jotka liittyvät vieraan avaimen toimintoon, ovat seuraavat:
Cascade
Kun ylätason taulukon rivit poistetaan, myös vastaavat vieraiden avainten sarakkeet alatason taulukosta poistetaan, mikä luo peräkkäisen poiston.
Set Null
Kun viittausrivi ylätason taulukosta poistetaan tai päivitetään, viittausrivin viiteavainarvot asetetaan nollaan viittauksen eheyden säilyttämiseksi.
Triggers
Viitetoiminnot toteutetaan tavallisesti laukaisimina. Vieraan avaimen toiminnot ovat monella tapaa samanlaisia kuin käyttäjän määrittämät liipaisimet. Oikean suorituskyvyn varmistamiseksi tilatut viittaustoiminnot korvataan joskus vastaavilla käyttäjän määrittämillä laukaisimilla.
Set default
Tämä viittaustoiminto on samanlainen kuin “set null”. Alitaulukon viiteavainarvot asetetaan oletusarvoisiksi sarakkeen arvoiksi, kun päätaulukon viittausrivi poistetaan tai päivitetään.
Restrict
Tämä on normaali viitetoiminto, joka liittyy vieraaseen avaimeen. Päätaulukon arvoa ei voi poistaa tai päivittää niin kauan kuin siihen viitataan vieraalla avaimella jossakin toisessa taulukossa.
No action
Tämä viittaustoiminto on toiminnaltaan samanlainen kuin edellä mainittu “restrict”-toiminto, paitsi että No action -tarkistus suoritetaan vasta sen jälkeen, kun taulukkoa on jo yritetty muuttaa.