Utenlandsk nøkkel PostgreSql

Utenlandsk nøkkel PostgreSql
En fremmed nøkkel er en eller flere kolonner som har verdier som er avhengig av den primære nøkkelen. Denne begrensningen brukes til å gå sammen med to bord. I PostgreSQL hjelper en fremmed nøkkel med å generere et forhold mellom tabellene, noe som gjør det ene bordet til et foreldrebord og den andre et barn. Den utenlandske nøkkelen kan opprettes ved å bruke:
  • Lag tabell spørring
  • Oppdater/alter spørring

Syntaks

[Begrensningsnavn] Utenlandsk nøkkel (kolonner)
Referanser Parent_Table (kolonner)
[På slett handling]
[Ved oppdatering handling]

Referansetabellen er overordnet tabell. Og kolonnen for den utenlandske nøkkelen er foreldrenes primære nøkkel.

Utenlandsk nøkkel introduserer i Create -uttalelsen

Når det gjelder utenlandske nøkkelbegrensninger, trenger vi to tabeller for å illustrere konseptet. La oss begynne med å definere et tabell “Designer”, og den andre er “kategori”. Begge tabellene opprettes ved å bruke en Create -setning.

>> Opprett tabelldesigner (Designer_id int Generert alltid som identitet, Designer_name varchar (50) ikke null, primærnøkkel (designer_id));

I tabellen "Designer" er Designer_id satt som en primærnøkkel. Lag nå den andre tabellen.

>> Opprett tabellkategori (kategori_id int generert alltid som identitet, designer_id int, category_id int, category_name varchar (200) ikke null, primærnøkkel (kategori_id), begrensning fk_designer utenlandsk nøkkel (designer_id) referanser designer (designer_id));

I denne tabellen er kategorien_id satt som en primærnøkkel. Ettersom begge disse tabellene skal bli med den utenlandske nøkkelbegrensningen. Vi gjør "Designer_id" til den utenlandske nøkkelen i denne tabellen. Referansetabellen er nevnt i tabellen slik at spørringen enkelt kan utføres ved å søke i tabellen.

Begrensning FK_DESIGNER
Utenlandsk nøkkel (designer_id)
Referanser designer (designer_id));

Designerbordet er overordnet bord, mens "kategorien" -tabellen er barnebordet. Hver designer jobber på null eller flere klesskategorier, og en eller flere designere vurderer hver kjole -kategori.

MERK: For å lage en fremmed nøkkel for IDen til en tabell i den andre tabellen, er det viktig å lage den spesifikke IDen som en primærnøkkel i tabellen. Ellers vil den ikke danne en fremmed nøkkel i den andre tabellen. Det vil oppstå en feil mens du oppretter den utenlandske nøkkelen.

INGEN HANDLING

Etter opprettelsen av tabeller bruker vi å legge inn verdier i den ved å "sette inn" -kommandoen.

>> Sett inn Designer (Designer_Name) Values ​​('Ahmad Shah'), ('Sajjad Hassan');

Tilsvarende når det gjelder andre tabell, skriver du inn verdiene.

>> Sett inn i kategori (Designer_id, Category_name) verdier (1, 'Frock'), (1, 'Frock'), (2, 'Suit'), (2, 'Suit-1');

I tabellen "kategori" vil verdiene bli satt inn i to kolonner inkludert kategori_navn, og Designer_id. Vi har lagt til samme nummer for ID og samme navn for kategorienavnet her for å oppfylle betingelsen. Bruk nå slettekommandoen for å bevise typen "ingen handling" av den utenlandske nøkkelen. I denne kommandoen har vi gitt et ID -nummer for å slette den spesifikke raden fra tabellen.

>> slett fra designer der designer_id = 1;

Denne spørringen vil ikke utføre vellykket. Det vil vise en feilmelding som vist i snapen som nevnt ovenfor. Denne feilen er på grunn av "ingen sletting ingen handling". PostgreSQL viser brudd på begrensningen fordi Designer_id = 1 er for to rader som for tiden er til stede i tabellen.

Sett null som alternativ på Delete Clause

Lag en tabell som heter “ansatt” som har emp_id som en primærnøkkel.

>> Opprett tabellansatt (emo_id generert alltid som identitet, emp_name varchar (50) ikke null, primærnøkkel (emp_id));

Når vi utfører spørringen, vises en melding som viser at spørringen vår utføres vellykket. Etter å ha opprettet ansattbordet, lag sin barnebord “info” ved å bruke “emp_id” som den utenlandske nøkkelen.

>> Opprett tabellinfo (info_id int generert alltid som identitet, info_id int, emp_id int, info_name varchar (200) ikke null, primærnøkkel (info_id), begrensning fk_employe utenlandsk nøkkel (emp_id) referanser ansatt (emp_id) på slett set null) ;

Utfør spørringen, og du vil se at tabellen er opprettet. Som "opprette" tabellerklæring som ble brukt før, er dette det samme. Her har vi lagt til eiendom.

På sletting set null”. Denne handlingen brukes i ON -sletteklausulen. Nå må vi fylle tabellene med verdiene.

>> sett inn i ansatt (emp_name) verdier ('Sophia Smith'), ('Rubi Williams'), ('Victoria Gomex'); >> Sett inn info (emp_id, info_name) verdier (1, 'kontorist'), (1, 'manager'), (2, 'manager'), (3, 'kontorist');

Delete -kommandoen består av "Where" -bestemmelsen for å identifisere IDen som skal slettes fra raden i tabellens ansatt.

>> slett fra ansatt der emp_id = 2;

Relevante data blir slettet ved utførelsen av spørringen. Vi vil se den resulterende tabellen igjen etter den spørringen.

>> Velg * fra info;

Radene som har den spesifikke referansen i barnebordet 'Info' er satt til NULL fordi vi brukte On Delete Set Null -handlingen i kommandoen ved Tabellopprettelsen.

Bruke en Alter Table -kommando

I de forrige eksemplene har vi sett hvordan vi skal bruke begrensningene på tidspunktet for opprettelsen av tabellene. Hva om du har laget tabellene med FK (utenlandsk nøkkel) begrensninger, og senere vil du legge til begrensninger? Her er en løsning på dette spørsmålet. For det første skal vi lage to tabeller. Men på tidspunktet for å lage bordet, er det ikke nødvendig å identifisere den utenlandske nøkkelen i den andre tabellen for å gjøre det som barn.

>> Lag bordsykepleier (sykepleier_id int ikke null, sykepleiernavn varchar (55) ikke null, sykepleier_location varchar (55) ikke null, primærnøkkel (sykepleier_id)); >> Opprett tabellklinikk klinikk_id int, sykepleier_id int, clinic_details varchar (50) ikke null, clinic_type varchar (50) ikke null);

Denne tabellen inneholder ikke utenlandske nøkkelbegrensninger og referanser osv. Etter innsetting vil vi nå oppdatere tabellen ved å tillate begrensningene til det.

>> Alter Table Clinic Legg til begrensning FK_NURSE Foreign Key (Clinic_ID) Referanser Sykepleier (sykepleier_id) på slett kaskade ved oppdatering begrenset;

Tabellen vil ha den utenlandske nøkkelen nå etter endring.

Fjern begrensningene fra bordet

For dette formålet bruker vi Alter -kommandoen. Denne kommandoen vil bare fjerne begrensningene fra tabellen.

Dette er nødvendig for å slette hele tabellen. Men det er umulig å slette eller slippe en slik tabell som har en sammenføyning med den andre tabellen i form av en fremmed nøkkel. Så for det første fjerner vi fk_constraint av det først opprettet tabellen fra den andre. Tenk på tabellen "designer" og barnebord "kategori".

>> alter tabell kategori slipp begrensning FK_DESIGNER;

Etter å ha sett at spørringen blir utført. Bruk nå drop -kommandoen.

>> slippbord hvis eksisterer designer;

Diagram representerer de utenlandske nøklene i tabellene. Fra ERD -representasjonen tok vi et snap for å avklare tvetydigheten angående begrensningene fra bildet; Du kan se sammenføyningene i tabellene som vi har laget i denne artikkelen.

Konklusjon

“Foreign Key PostgreSql” viser sammenføyningsforholdet mellom to tabeller. Å hente posten til ett bord ved å forårsake en endring i en annen kan bare gjøres gjennom denne begrensningen. Foreldre-barn-forholdet er innebygd og deler nøklene. Denne nøkkelen kan introduseres ved å opprette eller oppdatere tabellen. Begge metodene er forklart i denne guiden. Disse eksemplene beskriver viktigheten av nøkler i alle tabellene som brukes i en hvilken som helst database.