Postgres Foreign key constrângere Tutorial

Introducere

dacă lucrați cu date în PostgreSQL, este important să știți cum să utilizați chei străine. O cheie străină este un tip specific de constrângere SQL care este proiectat pentru a menține integritatea referențială între două tabele. Mai simplu spus, o cheie străină este o coloană sau un set de coloane care stabilește o legătură între datele din două tabele. Cheia externă pentru un tabel face referire la cheia primară pentru celălalt tabel, creând astfel o relație între tabele. În acest articol, vom explica cum să creați o cheie străină Postgres și să analizați câteva exemple de utilizare a acesteia.

cerințe preliminare

pe măsură ce continuăm cu acest tutorial, vom lucra cu tabele care vor avea o relație cheie străină, deci va trebui să vă asigurați că sunt instalate atât Postgres, cât și interfața sa de linie de comandă psql. De asemenea, va trebui să aveți două tabele care împărtășesc acea constrângere pentru una dintre coloanele respective.

asigurați-vă că aveți acces la psql

puteți utiliza comanda psql -V pentru a verifica dacă psql și Postgres sunt instalate și funcționează corect. Utilizați comanda psql de la sine pentru a vă conecta la Postgres și introduceți interfața liniei de comandă.

NOTĂ: Dacă primiți o eroare cu mesajul psql: FATAL: role "linux" does not exist, Postgres încearcă probabil să utilizeze numele de utilizator al sistemului dvs. pentru a vă conecta la psql. Pentru a remedia acest lucru, utilizați comanda sudo -u postgres -i pentru a comuta numele de utilizator la postgres, apoi încercați să accesați din nou psql.

captură de ecran a versiunii și rolului psql "linux" nu există eroare pentru Postgres

creați tabele pentru cheia străină

primul lucru pe care îl vom face este să creăm o bază de date folosind interfața liniei de comandă psql:

putem crea baza noastră de date PostgreSQL folosind sintaxa de comandă de bază prezentată mai jos:

1
crearea bazei de date db_name;

Iată un exemplu:

1
crearea bazei de date testdb;

de asemenea, putem crea un tabel care servește ca masă „mamă” sau un tabel care are o relație cu alte tabele. Am folosi sintaxa de bază prezentată mai jos:

1
crearea tabelului TABLE_NAME(COLUMN_NAME + DATA_TYPE + constrângere )

în scopul acestui tutorial, vom crea un tabel numit price cu o cheie primară id:

1
creați prețul tabelului (id cheie primară int, preț REAL);

în secțiunea următoare, vom crea un alt tabel care va avea o relație cheie străină cu coloana id a tabelului de prețuri.

folosind constrângerea cheii externe

așa cum am menționat mai devreme, o constrângere FOREIGN KEY face referire la cheia primară într-un alt tabel. Putem avea mai multe chei străine într-un tabel; fiecare cheie va depinde de relația sa cu un alt tabel.

pentru a crea un tabel cu o constrângere FOREIGN KEY, trebuie să faceți referire la celălalt tabel. Să ne uităm la următorul exemplu:

1
2
3
4
5
creați mașini de masă (
car_id int nu NULL,
preț referințe int preț (id), corespunzător acestuia
text Nume,
text marcă);

observați că tabelul cars are o cheie străină care face referire la tabelul price. Aceasta înseamnă că valorile coloanelor cheie străine din tabelul „copil” provin din tabelul „mamă” ca referință.

pentru a vedea detaliile unui tabel, utilizați comanda \d urmată de numele tabelului:

1
2
3
4
5
6
7
8
9
tabelul ” public.mașini”
coloană / tip | colaționare | NULABIL / implicit
——–+———+———–+———-+———
car_id / INTEGER / / NOT NULL /
price / INTEGER / / /
name / text / / /
brand / text / / /
constrângeri cu cheie străină:
” cars_price_fkey ” cheie străină (preț) referințe preț (id)

de asemenea, am putea declara constrângerea cheii străine folosind în mod explicit cuvintele cheie FOREIGN KEY și atunci când declarăm numele coloanei în comanda noastră CREATE TABLE :

1
2
3
4
5
6
7
8
creați mașini de masă (
car_id nu NULL,
preț int,
TEXT Nume,
text marcă
cheie primară (car_id),
cheie străină (preț) referințe preț (id);
);

în acest moment, s— ar putea să vă întrebați ce s-ar întâmpla dacă ați șters accidental o înregistrare din tabel cars – ați primi o eroare? De fapt, Postgres nu vă va permite să ștergeți înregistrarea decât dacă înregistrarea celuilalt tabel corespunzător este ștearsă.

puteți utiliza una dintre următoarele opțiuni– NO ACTION,DELETE CASCADE și DELETE RESTRICT — pentru a decide ce ar trebui să se întâmple atunci când se șterge o înregistrare care este legată de un alt tabel.

următorul exemplu arată constrângerea DELETE RESTRICT aplicată unui tabel:

1
2
3
4
5
creați mașini de masă (
car_id int NOT NULL,
preț referințe int preț (id) la ștergere restricționare,
text Nume,
text marcă);

Notă: această constrângere nu vă va permite să ștergeți un rând decât dacă toate valorile legate sunt eliminate sau constrângerea în sine este eliminată.

următorul exemplu arată constrângerea DELETE CASCADE în acțiune:

1
2
3
4
5
creați mașini de masă (
car_id int NOT NULL,
preț referințe int preț (id) la ștergere cascadă,
text Nume,
text marcă);

notă :constrângerea DELETE CASCADE vă va permite să ștergeți o înregistrare părinte, dar este important să fiți conștienți de faptul că înregistrarea corespunzătoare a copilului va fi ștearsă și ea. Ștergerea în cascadă nu este recomandată pentru utilizare în producție, deoarece este prea ușor să ștergeți neintenționat rândurile dintr-un alt tabel.

opțiunea NO ACTION este o acțiune implicită în PostgreSQL care afișează o eroare dacă una dintre cele două constrângeri menționate mai sus nu este specificată.

concluzie

într-o bază de date relațională, este obișnuit ca datele din diferite tabele să aibă anumite legături sau relații. O constrângere cheie străină oferă o modalitate eficientă de a proteja integritatea referențială a acestor date, asigurându-se că datele nu sunt șterse dintr-un tabel atunci când există o relație cu datele dintr-un alt tabel. Acest tutorial a oferit o imagine de ansamblu a modului în care funcționează o cheie străină Postgres și a oferit exemple de utilizare a acestei constrângeri în moduri diferite. Cu aceste exemple de utilizat ca ghid, veți putea implementa relații cheie străine în propria bază de date PostgreSQL.

Lasă un răspuns

Adresa ta de email nu va fi publicată.