Mitä ovat avaimet ja Rajoitteet?
tietokannan on noudatettava tiettyjä ominaisuuksia säilyttämiensä tietojen eheyden ja laadun säilyttämiseksi. Avaimet ja rajoitukset ovat sääntöjä, jotka määrittelevät, mitkä tietoarvot ovat sallittuja tietyissä tietosarakkeissa. Ne ovat tärkeä tietokantakonsepti ja osa tietokannan skeemamääritelmää. Avainten ja rajoitusten määrittely on osa tietokannan suunnitteluprosessia ja varmistaa, että tietokannan tiedot ovat luotettavia ja säilyttävät eheytensä. Rajoitteita voidaan soveltaa tiettyyn sarakkeeseen, kokonaiseen taulukkoon, useampaan kuin yhteen taulukkoon tai kokonaiseen skeemaan. Luotettava tietokantajärjestelmä varmistaa, että rajoitukset pitävät aina. Avaimet ovat erityinen rajoite, jota käytetään luomaan suhteita ja ainutlaatuisuutta.
ensisijainen avain
välttämätön osa kahden yksikön tai kahden tiedon välisten suhteiden muodostamisessa on tietojen oikea tunnistaminen. SQL: ssä yksikäsitteinen tieto on ratkaisevaa. Ensisijainen avain on yksilöllinen tunniste riville tietoja. Tähän asti käyttämässämme taulukkovertauksessa on aina ollut id
– sarake. Vaikka mikä tahansa sarake voi toimia ensisijaisena avaimena, on id
– nimisen sarakkeen käyttäminen helppoa muistisyistä ja on suosittu konventio. RDBMS: ssä jokaisessa taulukossa voi olla vain yksi ensisijainen avain.
ensisijainen avain on taulukon rivin taattu yksilöllinen tunniste. Tämän vuoksi voimme käyttää rivin ensisijaista avainarvoa viitataksemme kyseiseen riviin muista taulukoista. Edellisessä luvussa, olemme luoneet suhteita useita taulukoita perustuu, että, mutta relaatiotietokannat tarvitsevat tapa liittyä toisiinsa, ja ensisijainen avain sarake on tapa tehdä tämä tehokkaasti. PostgreSQL: ssä ensisijaisille avaimille annetaan myös suorituskykyetuja, koska tiedetään, että niitä käytetään usein datan etsimiseen, erityisesti monen pöydän Hauissa.
huomaa, että kaikki ”id” – nimiset sarakkeet eivät ole ensisijaisia avaimia; tämä on vain käytäntö. Lisäksi ensisijaisilla avaimilla voi olla mikä tahansa nimi.
aiemmissa luvuissa on jo nähty syntaksi, jolla sarakkeen voi nimetä ensisijaiseksi avainsarakkeeksi:
Katsotaanpa yllä olevaa komentoa, joka luo taulukon nimeltä users
ensisijaisten avainten ymmärtämisen näkökulmasta.
-
id
sarake on tämän taulukon ensisijainen avain. Voidaan myös sanoa, että ensisijainen keskeinen rajoitus on sovellettuid
– sarakkeeseen. -
id
voi pitää vain numeerisia arvoja (int
). - jokaisen taulukkoon lisätyn uuden rivin osalta
id
kenttää korotetaan automaattisesti 1: llä. Monissa RDBM: issä käytetäänAUTO_INCREMENT
– hakusanaa. Kanssa PostgreSQL, käytämme serial automaattinen lisäys meidän tunnukset ja asettaa niiden tyyppi kokonaisluku. Ensisijaisen avaimen arvoa ei tarvitse määrittää manuaalisesti joka kerta, kun syötät tietoja, PostgreSQL tekee sen puolestasi, jos määrität sarjanumeron id: n tyypiksi.
ulkomainen avain
ulkomaisia avainsarakkeita käytetään viitattaessa toiseen tietoriviin, ehkä toiseen taulukkoon. Jotta voidaan viitata toiseen riviin, tietokanta tarvitsee kyseiselle riville yksilöllisen tunnisteen. Tämän vuoksi ulkomaiset avainsarakkeet sisältävät viitatun rivin ensisijaisen avaimen arvon. Esimerkiksi taulukossa voi olla ulkomaisena avainsarakkeena user_id
– niminen sarake, joka vastaa users
taulukon id
– saraketta. Ulkomaisten avainten avulla RDBMS määrittää tietorivien väliset suhteet joko samassa taulukossa tai taulukoiden välillä.
yllä olevasta SQL-lauseesta näkee, että tämän suhteen muodostava rivi on
FOREIGN KEY (book_id) REFERENCES books(id) ON DELETE CASCADE
yllä olevassa esimerkissä id
on books
– taulukon ensisijainen avain, jonka avulla luodaan suhde arvostelutaulukkoon. id
tiedot tallennetaan arvostelutaulukkoon book_id
– kenttään, jotta kirjat voidaan kartoittaa arvosteluilla. ON DELETE CASCADE
lauseke osoittaa, että jos kirja poistetaan, poistetaan myös kaikki kyseiseen kirjaan liittyvät arvostelut.
yhdistelmäavain ensisijaisena avaimena
edellisessä luvussa loimme moneen-to-moneen suhteen, jossa ensisijainen avaimemme tehtiin kahdesta sarakkeesta. user_id
ja book_id
muodostivat molemmat yhdessä ristiviittaustaulukon ensisijaisen avaimen, kuten voidaan nähdä SQL-lausekkeen tältä riviltä.
PRIMARY KEY (user_id, book_id)
kun primary_key koostuu ainutlaatuisesta parista PRIMARY KEY (user_id, book_id)
, sitä kutsutaan yhdistelmäavaimeksi. Se esiintyy yleensä monissa-to-monet suhteet, ja meidän täytyy lisätä ylimääräinen taulukko tallentaa tämän suhteen tiedot. Yhdistelmäavain varmistaa, että taulukon tiedot ovat yksilöllisiä käyttäjän ja kirjan suhteen. Esimerkki:
|User_id | Book_id | | 1 | 1 | | 1 | 2 | | 2 | 1 |
yksilölliset rajoitteet
ensisijaisen avaimen lisäksi tietokanta mahdollistaa myös yksilöllisen rajoituksen soveltamisen mihin tahansa tietokannan sarakkeeseen. Esimerkiksi kirjataulukossa voidaan valita paitsi että book_id
on ainutlaatuinen ensisijainen avain, myös kirjaan on tallennettava kirjan ISBN-numero. ISBN, International Standard Book Number on 10-numeroinen kirjan yksilöllinen numero. Voimme suunnitella tietokantamme tehdäksemme tästä sarakkeesta ainutlaatuisen. Vaikka tämä ei ole ensisijainen avain, päällekkäisiä ISBN-koodeja ei sallita kirjanpidossa, ja tietojen laatu säilyy.
yksilöllinen rajoite estää ISBN: n sarakearvon päällekkäisen kirjaamisen kirjanpitotaulukkoon.
Not NULL rajoitteet
olemme nähneet ”NOT NULL” monissa SQL-lauseissamme. NOT NULL
rajoitus estää saraketta sallimasta Nollaa arvoa (eli tämän sarakkeen on sisällettävä tietoja). Tämä on tärkeää avainaloille. Esimerkiksi: jos haluat lisätä käyttäjän tietokantaan, sinun on annettava käyttäjätunnus. Ilman tätä rajoitusta tietokanta täyttyisi tyhjillä arvoilla ja siitä tulisi vähemmän hyödyllinen.
miten SQL käsittelee näitä suhteita?
PostgreSQL mahdollistaa sekä skeeman että eri taulukoiden datan väliset suhteet käyttämällä ulkomaisia avaimia ja operaatiota nimeltä a JOIN
. Nimensä mukaisesti tarkoitus on liittyä pöytiin. Tämän mekanismin avulla voimme esimerkiksi saada täydelliset tiedot yllä olevan arvostelutaulukon tekijästä, sillä sen kenttä user_id
liittyy user
– taulukkoon. Tässä nopea esimerkki:
nyt kun ymmärrämme, miten luodaan useita taulukoita ja mikä merkitys avaimilla on suhteiden luomisessa, tarkastelemme syvällisemmin eri liittymiä ja sitä, miten SQL-kyselyt rakennetaan näiden liittymien avulla hakemaan vaaditut tiedot useista taulukoista.