SQL Server FOREIGN KEY: Hvordan opprette med eksempel

โšก Smart oppsummering

En fremmednรธkkel i SQL Server hรฅndhever referanseintegritet ved รฅ koble en underordnet tabell til en overordnet tabell. Hver fremmednรธkkelverdi mรฅ allerede finnes i den refererte primรฆrnรธkkelen til den overordnede tabellen.

  • ๐Ÿ”— Hva er en fremmednรธkkel: En fremmednรธkkel kobler en underordnet tabell til en overordnet tabell og hรฅndhever referanseintegritet mellom dem.
  • ๐Ÿ‘ช Foreldre og barn: Den refererte tabellen er den overordnede tabellen; tabellen som inneholder fremmednรธkkelen er den underordnede tabellen, som peker til den overordnede primรฆrnรธkkelen.
  • ๐Ÿ–ฑ๏ธ To opprettelsesmetoder: Bรฅde SQL Server Management Studio-relasjoner og T-SQL CREATE TABLE โ€ฆ FOREIGN KEY โ€ฆ REFERENCES-klausulen definerer en fremmednรธkkel.
  • โž• Legg til i en eksisterende tabell: ENDRE TABELL โ€ฆ LEGG TIL BEGRENSNING โ€ฆ UTENLANDSK Nร˜KKEL legger til relasjonen til en tabell som allerede finnes.
  • ๐Ÿ”„ Referansehandlinger: ON DELETE- og ON UPDATE-klausuler styrer underrader med NO ACTION, CASCADE, SET NULL eller SET DEFAULT.
  • โœ… Integrity sjekk: ร… sette inn en underrad der nรธkkelen ikke har noen samsvarende overordnet rad blir avvist, keeping dataene er konsistente.

SQL Server FOREIGN KEY: Hvordan opprette i SQL Server med et eksempel

Hva er en utenlandsnรธkkel?

En fremmednรธkkel gir en mรฅte รฅ hรฅndheve referanseintegritet pรฅ SQL ServerEnkelt sagt sikrer en fremmednรธkkel at verdier i รฉn tabell mรฅ vรฆre tilstede i en annen tabell.

Regler for UTENLANDSK Nร˜KKEL

  • NULL er tillatt i en SQL-fremmednรธkkel.
  • Tabellen det refereres til kalles overordnet tabell.
  • Tabellen med fremmednรธkkelen kalles barnetabellen.
  • Fremmednรธkkelen i barnetabellen refererer til primรฆrnรธkkel i den overordnede tabellen.
  • Dette foreldre-barn-forholdet hรฅndhever regelen kjent som ยซreferanseintegritetยป.

Diagrammet nedenfor oppsummerer alle punktene ovenfor for fremmednรธkkelen.

Diagram over en fremmednรธkkel som kobler en underordnet tabell til primรฆrnรธkkelen til den overordnede tabellen

Hvordan lage utenlandsk nรธkkel i SQL

Du kan opprette en fremmednรธkkel i SQL Server pรฅ to mรฅter:

SQL Server Management Studio

Overordnet tabell: La oss si at vi har en eksisterende overordnet tabell med navnet ยซKursยป. Kurs-ID og Kursnavn er to kolonner, med Kurs-ID som primรฆrnรธkkel.

Overordnet tabell Kurs med primรฆrnรธkkelen Course_Id og kolonnene Course_name

Undertabell: Vi mรฅ opprette den andre tabellen som en undertabell. 'Course_ID' og 'Course_Strength' er de to kolonnene. 'Course_ID' skal imidlertid vรฆre fremmednรธkkelen.

Trinn 1) Hรธyreklikk pรฅ Tabeller > Ny > Tabellโ€ฆ

Hรธyreklikk pรฅ Tabeller, deretter Ny og deretter Tabell i SQL Server Management Studio

Trinn 2) Skriv inn to kolonnenavn som ยซCourse_IDยป og ยซCourse_Strengthยป. Hรธyreklikk pรฅ ยซCourse_Idยป-kolonnen, og klikk deretter pรฅ Relasjon.

Nye underordnede tabellkolonner Course_ID og Course_Strength med Relasjonsmenyen

Trinn 3) Klikk pรฅ ยซLegg tilยป i ยซForeign Key Relationsยป.

Dialogboksen Forhold mellom fremmednรธkler med Legg til-knappen

Trinn 4) Klikk pรฅ ikonet ยซโ€ฆยป i ยซTabell- og kolonnespesifikasjonยป.

Spesifikasjonsfelt for tabeller og kolonner med ellipseknappen

Trinn 5) Velg ยซPrimรฆrnรธkkeltabellยป som ยซKURSยป og den nye tabellen som opprettes som ยซFremmednรธkkeltabellยป fra rullegardinmenyen.

Velge COURSE som primรฆrnรธkkeltabell i relasjonsdialogen

Trinn 6) For ยซPrimรฆrnรธkkeltabellยป velger du kolonnen ยซKurs-IDยป som kolonne for primรฆrnรธkkeltabellen.

For ยซTabell med fremmednรธklerยป velger du kolonnen ยซKurs-IDยป som kolonne for tabellen med fremmednรธkler. Klikk pรฅ OK.

kartping Course_Id som bรฅde primรฆrnรธkkel- og fremmednรธkkelkolonner

Trinn 7) Klikk pรฅ Legg til.

Klikk pรฅ Legg til for รฅ bekrefte forholdet mellom fremmednรธkkelen

Trinn 8) Gi tabellen navnet ยซCourse_Strengthยป og klikk OK.

Navngi undertabellen Course_Strength og klikk OK

Resultat: Vi har satt en foreldre-barn-relasjon mellom 'Kurs' og 'Kursstyrke'.

Foreldre-barn-forhold etablert mellom Kurs og Kursstyrke

T-SQL: Opprett en overordnet-underordnet tabell ved hjelp av T-SQL

Overordnet tabell: Tenk pรฅ at vi har en eksisterende overordnet tabell med navnet ยซKursยป. Kurs-ID og Kursnavn er to kolonner, med Kurs-ID som primรฆrnรธkkel.

Eksisterende overordnet tabell Kurs med Kurs-ID som primรฆrnรธkkel

Undertabell: Vi mรฅ opprette den andre tabellen som undertabellen med navnet ยซCourse_Strength_TSQLยป. ยซCourse_IDยป og ยซCourse_Strengthยป er de to kolonnene. Imidlertid skal ยซCourse_IDยป vรฆre fremmednรธkkelen.

Nedenfor er syntaksen til lage en tabell med en UTENLANDSK Nร˜KKEL.

Syntaks:

CREATE TABLE childTable
(
  column_1 datatype [ NULL |NOT NULL ],
  column_2 datatype [ NULL |NOT NULL ],
  ...

  CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n)
    [ ON DELETE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ]
    [ ON UPDATE { NO ACTION |CASCADE |SET NULL |SET DEFAULT } ] 
);

Her er en beskrivelse av parameterne ovenfor:

  • childTable er navnet pรฅ tabellen som skal opprettes.
  • kolonne_1 og kolonne_2 er kolonnene som skal legges til i tabellen.
  • fkey_name er navnet pรฅ fremmednรธkkelbegrensningen som skal opprettes.
  • barnekolonne1, barnekolonne2 โ€ฆ barnekolonne_n er underordnede tabellkolonner som refererer til primรฆrnรธkkelen i overordnet tabell.
  • parentTable er navnet pรฅ den overordnede tabellen hvis nรธkkel det refereres til i barnetabellen.
  • parent_column1, parent_column2 โ€ฆ parent_column_n er kolonnene som utgjรธr primรฆrnรธkkelen til den overordnede tabellen.
  • ON DELETE er en valgfri parameter som angir hva som skjer med underdataene etter at overdataene er slettet. Verdier inkluderer NO ACTION, SET NULL, CASCADE eller SET DEFAULT.
  • ON UPDATE er en valgfri parameter som angir hva som skjer med underdataene etter at overdataene er oppdatert. Verdier inkluderer NO ACTION, SET NULL, CASCADE eller SET DEFAULT.
  • INGEN HANDLING betyr at ingenting skjer med underdataene etter at overordnede data er oppdatert eller slettet.
  • CASCADE betyr at underdataene slettes eller oppdateres etter at overordnede data er slettet eller oppdatert.
  • SET NULL betyr at underdataene settes til null etter at overordnede data er oppdatert eller slettet.
  • ANGI STANDARD betyr at underdataene settes til standardverdien etter en oppdatering eller sletting av de overordnede dataene.

La oss se pรฅ et eksempel pรฅ en fremmednรธkkel som oppretter en tabell med รฉn kolonne som en fremmednรธkkel, ved hjelp av en data-type for hver kolonne.

Fremmednรธkkel i SQL-eksempel

Spรธrsmรฅl:

CREATE TABLE Course_Strength_TSQL
(
Course_ID Int,
Course_Strength Varchar(20) 
CONSTRAINT FK FOREIGN KEY (Course_ID)
REFERENCES COURSE (Course_ID)	
)

Trinn 1) Kjรธr spรธrringen ved รฅ klikke pรฅ Utfรธr.

Utfรธrer CREATE TABLE-spรธrringen som definerer fremmednรธkkelen Course_ID

Resultat: Vi har satt en foreldre-barn-relasjon mellom 'Kurs' og 'Course_Strength_TSQL'.

Foreldre-barn-forhold opprettet mellom Course og Course_Strength_TSQL

Bruker ALTER TABLE

Nรฅ skal vi lรฆre hvordan man legger til en fremmednรธkkel i SQL Server til en tabell som allerede finnes ved hjelp av ALTER TABLE-setningen. Vi bruker syntaksen nedenfor:

ALTER TABLE childTable
ADD CONSTRAINT fkey_name
    FOREIGN KEY (child_column1, child_column2, ... child_column_n)
    REFERENCES parentTable (parent_column1, parent_column2, ... parent_column_n);

Her er en beskrivelse av parameterne som er brukt ovenfor:

  • childTable er navnet pรฅ tabellen som skal opprettes.
  • kolonne_1 og kolonne_2 er kolonnene som skal legges til i tabellen.
  • fkey_name er navnet pรฅ fremmednรธkkelbegrensningen som skal opprettes.
  • barnekolonne1, barnekolonne2 โ€ฆ barnekolonne_n er underordnede tabellkolonner som refererer til primรฆrnรธkkelen i overordnet tabell.
  • parentTable er navnet pรฅ den overordnede tabellen hvis nรธkkel det refereres til i barnetabellen.
  • parent_column1, parent_column2 โ€ฆ parent_column_n er kolonnene som utgjรธr primรฆrnรธkkelen til den overordnede tabellen.

Eksempel pรฅ รฅ legge til fremmednรธkkel i ALTER TABLE:

ALTER TABLE department
ADD CONSTRAINT fkey_student_admission
    FOREIGN KEY (admission)
    REFERENCES students (admission);

Vi har laget en fremmednรธkkel som heter fkey_student_admission pรฅ avdelingstabellen. Denne fremmednรธkkelen refererer til opptakskolonnen i elevtabellen.

Eksempel pรฅ forespรธrsel UTENLANDSK Nร˜KKEL

La oss fรธrst se pรฅ dataene i overordnet tabell, COURSE.

Spรธrsmรฅl:

SELECT * from COURSE;

SELECT-resultat som viser den overordnede tabellen COURSE-data

La oss nรฅ sette inn noen rader i barnetabellen ยซCourse_Strength_TSQLยป. Vi skal prรธve รฅ sette inn to typer rader:

  • Den fรธrste typen, der Course_Id i barnetabellen finnes i Course_Id i foreldretabellen, det vil si at Course_Id = 1 og 2.
  • Den andre typen, der Course_Id i barnetabellen ikke finnes i Course_Id i foreldretabellen, det vil si at Course_Id = 5.

Spรธrsmรฅl:

Insert into COURSE_STRENGTH values (1,'SQL');
Insert into COURSE_STRENGTH values (2,'Python');
Insert into COURSE_STRENGTH values (5,'PERL');

Setter inn underrader, inkludert Course_ID 5 som ikke har noen samsvarende overordnet rad

Resultat: La oss kjรธre spรธrringen sammen for รฅ se foreldre- og underordnetabellene vรฅre.

Radene med Course_ID 1 og 2 finnes i Course_Strength-tabellen. Course_ID 5 er imidlertid et unntak, fordi den ikke har noen samsvarende rad i den overordnede tabellen.

Foreldre- og underordnede tabeller sammenlignet; Course_ID 5 bryter med referanseintegritet

Spรธrsmรฅl og svar

En primรฆrnรธkkel identifiserer unikt hver rad i sin egen tabell og kan ikke vรฆre NULL. En fremmednรธkkel refererer til den primรฆrnรธkkelen fra en annen tabell for รฅ hรฅndheve referanseintegritet. primรฆrnรธkkel kontra fremmednรธkkel Sammenligning forklarer alle forskjeller.

Ja. En fremmednรธkkel kan referere til enten en primรฆrnรธkkel eller en hvilken som helst kolonne som har en UNIK begrensning i den overordnede tabellen. Den refererte kolonnen mรฅ inneholde unike verdier, slik at hver underordnede rad samsvarer nรธyaktig med รฉn overordnet rad.

VED SLETTING sletter CASCADE automatisk de samsvarende underradene nรฅr den overordnede raden slettes.ping tabellene er konsistente. Alternativer er SET NULL, som fjerner den underordnede fremmednรธkkelen, og NO ACTION, som blokkerer slettingen.

Ja. En selvrefererende fremmednรธkkel peker til en primรฆrnรธkkel i samme tabell, som modellerer hierarkier, for eksempel en ansattrad som refererer til sin leder. For selvreferanser anbefaler SQL Server ON DELETE NO ACTION for รฅ unngรฅ kaskadesykluser.

Ja, med mindre kolonnen er deklarert som NOT NULL. En NULL-fremmednรธkkel betyr at den underordnede raden ikke er koblet til noen overordnet rad ennรฅ, og SQL Server hopper over referenssjekken for den NULL-verdien.

Kjรธr ALTER TABLE child_table DROP CONSTRAINT fkey_name. Du mรฅ oppgi begrensningsnavnet, som du finner i sys.foreign_keys. Dropping Fremmednรธkkelen fjerner relasjonen, men lar bรฅde tabellene og dataene deres vรฆre uendret.

Ja. GitHub Copilot kan skrive FOREIGN KEY-begrensninger i CREATE TABLE- eller ALTER TABLE-setninger fra en naturlig sprรฅkledetekst og foreslรฅ den overordnede tabellen og den refererte kolonnen. Se alltid gjennom nรธklene, referansehandlingene og datatypene fรธr du kjรธrer skriptet.

AI- og maskinlรฆringsverktรธy undersรธker eksempeldata og spรธrremรธnstre for รฅ foreslรฅ hvilke kolonner som skal bli fremmednรธkler, oppdage manglende eller foreldrelรธse relasjoner og anbefale passende ON DELETE-handlinger. Utvikleren gjennomgรฅr hvert forslag fรธr det tas i bruk.

Oppsummer dette innlegget med: