Postgres Foreign Key Constraint Tutorial

Introduction

jos työskentelet tietojen kanssa PostgreSQL: ssä, on tärkeää osata käyttää ulkomaisia avaimia. Vierasavain on tietyntyyppinen SQL-rajoite, joka on suunniteltu ylläpitämään viittausvarmuutta kahden taulukon välillä. Yksinkertaisesti sanottuna, vieras avain on sarake tai sarakkeiden joukko, joka muodostaa yhteyden kahden taulukon tietojen välillä. Yhden taulukon ulkomainen avain viittaa toisen taulukon ensisijaiseen avaimeen, jolloin taulukoiden välille syntyy suhde. Tässä artikkelissa, selitämme miten luoda Postgres ulkomainen avain ja tarkastella joitakin esimerkkejä sen käytöstä.

Edeltävät opinnot

tämän opetusohjelman edetessä työstämme taulukoita, joissa on ulkomainen avainsuhde, joten sinun on varmistettava, että sekä Postgres että sen psql komentoriviliittymä on asennettu. Sinun on myös oltava kaksi taulukkoa, jotka jakavat kyseisen rajoituksen yhdelle niiden sarakkeista.

varmista, että sinulla on pääsy psql

voit käyttää psql -V – komentoa varmistaaksesi, että psql ja Postgres on asennettu ja toimivat oikein. Käytä psql – komentoa yksinään muodostaaksesi yhteyden Postgresiin ja siirtääksesi komentoriviliittymän.

HUOMAUTUS: Jos viestissä psql: FATAL: role "linux" does not exist tapahtuu virhe, Postgres yrittää todennäköisesti käyttää järjestelmäsi käyttäjätunnusta yhteyden muodostamiseen psql: ään. Korjataksesi tämän, käytä sudo -u postgres -i – komentoa vaihtaaksesi käyttäjänimesi muotoon postgres ja yritä sitten käyttää psql: ää uudelleen.

kuvakaappaus psql-versiosta ja roolista "linux" ei ole olemassa virhe Postgres

luo taulukot ulkomaiselle avaimelle

ensimmäinen asia, jonka teemme on luoda tietokanta käyttäen psql komentoriviliitäntää:

voimme luoda PostgreSQL-tietokannan alla olevan komentosyntaksin avulla:

1
Luo tietokanta db_name;

tässä esimerkki:

1
Luo tietokanta testdb;

voimme myös luoda pöydän, joka toimii ”Äiti” pöytä tai pöytä, joka on suhde muihin pöytiin. Käyttäisimme alla olevaa perussyntaksia:

1
luo TAULUKKO_NIMI (SARAKE_NIMI + DATA_TYPE + rajoite )

tätä opetusohjelmaa varten luodaan taulukko nimeltä price, jossa on ensisijainen avain id:

1
luo taulukon hinta (id INT ensisijainen avain, hinta todellinen);

seuraavassa jaksossa luodaan toinen taulukko, jolla on ulkomainen avainsuhde hintataulukon id sarakkeeseen.

käyttäen ulkomaan avaimen rajoitusta

, kuten aiemmin mainittiin, FOREIGN KEY rajoite viittaa toisen taulukon ensisijaiseen avaimeen. Meillä voi olla useita ulkomaisia avaimia taulukossa; jokainen avain riippuu sen suhteesta johonkin toiseen taulukkoon.

jos haluat luoda taulukon, jossa on FOREIGN KEY rajoite, sinun on viitattava toiseen taulukkoon. Katsotaanpa seuraava esimerkki:

1
2
3
4
5
luo PÖYTÄAUTOT (
car_id INT NOT NULL,
price INT REFERENCES hinta (id), vastaa sitä
nimiteksti,
bränditeksti);

huomaa, että cars – taulukossa on vieras avain, joka viittaa price – taulukkoon. Tämä tarkoittaa, että ”lapsi” – taulukon ulkomaisten avainsarakkeiden arvot tulevat ”äiti” – taulukosta viitearvona.

nähdäksesi taulukon yksityiskohdat, käytä \d komentoa, jota seuraa taulukon nimi:

1
2
3
4
5
6
7
8
9
taulukko ” Julkinen.autot ”
sarake / tyyppi | kollaasi | mitätön / oletusarvo
——–+———+———–+———-+———
car_id | INTEGER | | NOT NULL |
price | INTEGER | | |
name | text / / /
brand / text / / /
Foreign-KEY rajoitteet:
”cars_price_fkey” FOREIGN KEY (price) referenssit hinta (id)

voisimme myös ilmoittaa ulkomaisen avaimen rajoituksen käyttämällä eksplisiittisesti FOREIGN KEY ja avainsanoja julistaessamme sarakenimeä CREATE TABLE komennossamme:

1
2
3
4
5
6
7
8
luo PÖYTÄAUTOT (
car_id NOT NULL,
price INT,
name TEXT,
brand TEXT
PRIMARY KEY (car_id),
FOREIGN KEY (price) referenssit hinta (id);
);

tässä vaiheessa voi miettiä, mitä tapahtuisi, jos vahingossa poistaisi tietueen taulukosta cars— tulisiko virhe? Itse asiassa, Postgres ei salli sinun poistaa tietueen ellei toinen vastaava taulukon tietuetta poistetaan samoin.

voit käyttää jotakin seuraavista vaihtoehdoista– NO ACTION,DELETE CASCADE ja DELETE RESTRICT— päättääksesi, mitä tapahtuu, kun toiseen taulukkoon liitetty tietue poistetaan.

seuraava esimerkki osoittaa DELETE RESTRICT rajoituksen, jota sovelletaan taulukkoon:

1
2
3
4
5
luo PÖYTÄAUTOT (
car_id INT NOT NULL,
price INT REFERENCES price (id) on DELETE limit,
name TEXT,
brand TEXT);

huomautus: tämä rajoitus ei salli rivin poistamista, ellei kaikkia linkitettyjä arvoja poisteta tai itse rajoite poisteta.

seuraava esimerkki osoittaa DELETE CASCADE rajoituksen toiminnassa:

1
2
3
4
5
luo PÖYTÄAUTOT (
car_id INT NOT NULL,
price INT REFERENCES price (id) on DELETE CASCADE,
name TEXT,
brand TEXT);

huomautus: DELETE CASCADE – rajoituksen avulla voit poistaa vanhemman tietueen, mutta on tärkeää olla tietoinen siitä, että myös sen vastaava lapsitietue poistetaan. Cascade poistoa ei suositella käytettäväksi tuotannossa, koska se on liian helppo tahattomasti poistaa rivit toisessa taulukossa.

NO ACTION – valinta on PostgreSQL: n oletustoiminto, joka näyttää virheen, jos jompaakumpaa yllä mainituista rajoitteista ei ole määritelty.

johtopäätös

relaatiotietokannassa on tavallista, että eri taulukoiden tiedoilla on tiettyjä yhteyksiä tai suhteita. Ulkomainen avaimenperä on tehokas tapa turvata näiden tietojen viitteellinen eheys varmistamalla, että tietoja ei poisteta yhdestä taulukosta, kun suhde toisen taulukon tietoihin on olemassa. Tämä opetusohjelma antoi yleiskuvan siitä, miten Postgres ulkomainen avain toimii ja tarjosi esimerkkejä siitä, miten tätä rajoitusta käytetään eri tavoin. Näiden esimerkkien avulla voit toteuttaa ulkomaisia avainsuhteita omassa PostgreSQL-tietokannassasi.

Vastaa

Sähköpostiosoitettasi ei julkaista.