Postgres foreign Key Constraint Tutorial

introduktion

hvis du arbejder med data i Postgres, er det vigtigt at vide, hvordan du bruger udenlandske nøgler. En fremmed nøgle er en bestemt type begrænsning, der er designet til at opretholde referentiel integritet mellem to tabeller. Kort sagt er en fremmed nøgle en kolonne eller et sæt kolonner, der etablerer en forbindelse mellem data i to tabeller. Den fremmede nøgle for den ene tabel refererer til den primære nøgle for den anden tabel, hvilket skaber en relation mellem tabellerne. I denne artikel forklarer vi, hvordan du opretter en Postgres fremmed nøgle og ser på nogle eksempler på dens anvendelse.

forudsætninger

når vi fortsætter med denne tutorial, arbejder vi med tabeller, der har et fremmed nøgleforhold, så du skal sørge for, at både Postgres og dets kommandolinjegrænseflade er installeret. Du skal også have to tabeller, der deler denne begrænsning for en af deres respektive kolonner.

sørg for, at du har adgang til pskl

du kan bruge kommandoen psql -V til at kontrollere, at pskl og Postgres er installeret og fungerer korrekt. Brug kommandoen psql i sig selv til at oprette forbindelse til Postgres og indtaste kommandolinjegrænsefladen.

BEMÆRK: Hvis du får en fejl med meddelelsen psql: FATAL: role "linux" does not exist, forsøger Postgres sandsynligvis at bruge dit systems brugernavn til at oprette forbindelse til pskl. For at afhjælpe dette skal du bruge kommandoen sudo -u postgres -i til at skifte dit Brugernavn til postgres og derefter prøve at få adgang til pskl igen.

skærmbillede af pskl-version og rolle "Linuks" findes ikke fejl for Postgres

Opret tabeller til den fremmede nøgle

den første ting, vi gør, er at oprette en database ved hjælp af kommandolinjegrænsefladenpsql

vi kan oprette vores Postgres-database ved hjælp af den grundlæggende kommandosyntaks vist nedenfor:

1
Opret DATABASE db_name;

her er et eksempel:

1
Opret DATABASE testdb;

vi kan også oprette en tabel, der fungerer som “mor” – tabellen eller en tabel, der har et forhold til andre tabeller. Vi bruger den grundlæggende syntaks vist nedenfor:

1
Opret tabel TABLE_NAME(kolonnenavn + DATA_TYPE + begrænsning )

med henblik på denne tutorial opretter vi en tabel kaldet price med en primær nøgle id:

1
Opret tabel pris (id int primær nøgle, pris reel);

i det næste afsnit opretter vi en anden tabel, der har en fremmed nøgleforhold til pristabellens kolonne id.

brug af fremmednøglebegrænsningen

som vi nævnte tidligere, refererer en FOREIGN KEY begrænsning til den primære nøgle i en anden tabel. Vi kan have flere udenlandske nøgler i en tabel; hver nøgle vil være afhængig af dens forhold til en anden tabel.

for at oprette en tabel med en FOREIGN KEY – begrænsning skal du henvise til den anden tabel. Lad os se på følgende eksempel:

1
2
3
4
5
Opret tabel biler (
car_id INT IKKE NULL,
pris int Referencer Pris (id),svarende til det
navn tekst,
brand tekst);

Bemærk, at tabellen cars har en fremmed nøgle, der refererer til tabellen price. Dette betyder, at værdierne for den eller de fremmede nøglekolonner i tabellen “barn” kommer fra tabellen “mor” som reference.

for at se en tabels detaljer skal du bruge kommandoen \d efterfulgt af tabelnavnet:

1
2
3
4
5
6
7
8
9
tabel ” offentlig.biler “
kolonne / TYPE / sortering / NULLABLE / DEFAULT
——–+———+———–+———-+———
car_id | heltal | / ikke NULL /
pris / heltal / / /
navn / tekst / / /
mærke / tekst / / /
udenlandske nøglebegrænsninger:
“cars_price_fkey” fremmed nøgle (pris) Referencer Pris (id)

vi kunne også erklære den udenlandske nøglebegrænsning ved eksplicit at bruge nøgleordene FOREIGN KEY og , når vi erklærer kolonnenavnet i vores CREATE TABLE kommando:

1
2
3
4
5
6
7
8
Opret tabel biler (
car_id IKKE NULL,
pris INT,
navn tekst,
mærke tekst
primær nøgle (car_id),
fremmed nøgle (pris) Referencer Pris (id);
);

på dette tidspunkt undrer du dig måske over, hvad der ville ske, hvis du ved et uheld slettede en post i tabellen cars— ville du få en fejl? Faktisk tillader Postgres dig ikke at slette posten, medmindre den anden tilsvarende tabels post også slettes.

du kan bruge en af følgende indstillinger– NO ACTION,DELETE CASCADE og DELETE RESTRICT— til at beslutte, hvad der skal ske, når en post slettes, der er knyttet til en anden tabel.

følgende eksempel viser DELETE RESTRICT – begrænsningen, der anvendes på en tabel:

1
2
3
4
5
Opret tabel biler (
car_id INT IKKE NULL,
pris int Referencer Pris (id) på Slet begrænse,
navn tekst,
mærke tekst);

BEMÆRK!: Denne begrænsning tillader ikke, at du sletter en række, medmindre alle sammenkædede værdier fjernes, eller selve begrænsningen fjernes.

det næste eksempel viser DELETE CASCADE begrænsningen i aktion:

1
2
3
4
5
Opret tabel biler (
car_id INT IKKE NULL,
pris int Referencer Pris (id) på Slet CASCADE,
navn tekst,
brand tekst);

Bemærk: begrænsningen DELETE CASCADE giver dig mulighed for at slette en overordnet post, men det er vigtigt at være opmærksom på, at dens tilsvarende underordnede post også slettes. Cascade sletning anbefales ikke til brug i produktionen, da det er for nemt at utilsigtet slette rækker i en anden tabel.

indstillingen NO ACTION er en standardhandling, der viser en fejl, hvis en af de to ovennævnte begrænsninger ikke er angivet.

konklusion

i en relationsdatabase er det almindeligt, at data i forskellige tabeller har visse links eller relationer. En fremmed nøglebegrænsning giver en effektiv måde at beskytte disse datas referenceintegritet på og sikre, at data ikke slettes fra en tabel, når der findes en relation til data i en anden tabel. Denne tutorial gav et overblik over, hvordan en Postgres fremmed nøgle fungerer og tilbød eksempler på, hvordan man bruger denne begrænsning på forskellige måder. Med disse eksempler til brug som vejledning kan du implementere udenlandske nøgleforhold i din egen database.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret.