Ekstern nøgle

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 11. december 2021; verifikation kræver 1 redigering .

Fremmednøgle ( eng.  fremmednøgle ) - begrebet teori om relationelle databaser , der vedrører begrænsninger på databasens integritet .

Uformelt set er en fremmednøgle en delmængde af attributter af en eller anden relationsvariabel R 2 , hvis værdier skal matche værdierne af en potentiel nøgle af en eller anden relationsvariabel R 1 .

Formel definition. Lad R 1 og R 2  være to relationsvariable, der ikke nødvendigvis er adskilte. En fremmednøgle FK i R 2 er en delmængde af attributterne for variablen R 2 , således at følgende krav er opfyldt:

  1. Relationsvariablen R 1 har en potentiel nøgle CK , således at FK og CK falder sammen op til attributomdøbning (dvs. ved at omdøbe en delmængde af FK 's attributter , kan man opnå en sådan delmængde af FK' attributter , at FK' og CK falder sammen i begge navne. og i attributtyper).
  2. På ethvert givet tidspunkt er hver FK- værdi i den aktuelle R2 - værdi identisk med CK- værdien i en eller anden tupel i den aktuelle R1 - værdi . Med andre ord, på ethvert givet tidspunkt er sættet af alle FK -værdier i R 2 en (ikke-streng) delmængde af CK -værdierne i R 1 .

Desuden, for denne særlige fremmednøgle FK → CK , kaldes relationen R1 , der indeholder den potentielle nøgle, hoved- , mål- eller overordnet relation, og relationen R2 , der indeholder fremmednøglen , kaldes den underordnede eller underordnede relation.

Vedligeholdelse af fremmednøgler omtales også som opretholdelse af referentiel integritet . Relationel DBMS understøtter automatisk kontrol af referentiel integritet.

Eksempel

Antag, at der er to tabeller i databasen: By (byer) og Gade (gader), som er defineret som følger:

OPRET TABEL By ( id INTEGER IKKE NULL PRIMÆR NØGLE , navn CHAR ( 40 ) ) OPRET TABEL Gade ( id INTEGER IKKE NULL PRIMÆR NØGLE , navn CHAR ( 40 ) , id_city HELTAL IKKE NULL UDENLANDSKE NØGLEREFERENCER By ( id ) )

Indholdet af disse tabeller er som følger:

BY

ID NAVN
en Moskva
2 Sankt Petersborg
3 Vladivostok

GADE

ID NAVN ID_CITY
181 Malaya Bronnaya en
182 Tverskoy boulevard en
183 Nevsky Avenue 2
184 Pushkinskaya 2
185 Svetlanskaya 3
186 Pushkinskaya 3

STREET-tabellen har et ID_CITY-felt, som er en fremmednøgle og refererer til CITY-tabellen. Værdien i dette felt svarer til den primære nøgle i CITY-tabellen for den by, hvor gaden ligger. Nevsky Prospekt har således ID_CITY=2, hvilket svarer til St. Petersburg (ID=2 i CITY-tabellen).

STREET-tabellen indeholder to gader med samme navn Pushkinskaya, som er forskellige i værdien af ​​ID_CITY-feltet. En af dem ligger i St. Petersborg (ID_CITY=2), den anden er i Vladivostok (ID_CITY=3).

Et forsøg på at tilføje gaden "Deribasovskaya" med ID_CITY=4 til STREET-tabellen vil forårsage en henvisnings-integritetskrænkelsesfejl, da der ikke er nogen by med ID=4 i CITY-tabellen. Men efter at have tilføjet byen "Odessa" med ID=4 til CITY-tabellen, vil det lykkes at gå ind på gaden "Deribasovskaya" igen med ID_CITY=4.

Når du sletter byen Vladivostok fra CITY-tabellen, afhænger resultatet af egenskaberne for den fremmede nøgle:

  • Hvis sletning med kæde er tilladt for den fremmede nøgle, så vil Svetlanskaya og Pushkinskaya gader med ID=3 blive slettet sammen med sletningen af ​​Vladivostok.
  • Hvis kædesletning er deaktiveret for fremmednøglen, vil handlingen generere en referentiel integritetskrænkelsesfejl, da STREET-tabellen vil indeholde gader med ID_CITY=3-koden, som ikke er i CITY-tabellen.

Når du ændrer bykoden for St. Petersborg fra 2 til 48 i CITY-tabellen, afhænger resultatet af egenskaberne for den fremmede nøgle:

  • Hvis den fremmede nøgle får lov til at ændre sig langs kæden, vil ID_CITY-værdierne for de tilsvarende gader blive ændret sammen med ændringen i koden for St. Petersborg.
  • Hvis den fremmede nøgle ikke tillades at blive ændret i en kæde, vil operationen forårsage en referentiel integritetskrænkelsesfejl, da STREET-tabellen vil indeholde gader med ID_CITY=2-kode, som ikke er i CITY-tabellen.

Litteratur

  • Dato CJ Introduktion til databasesystemer = Introduktion til databasesystemer. - 8. udg. - M . : "Williams" , 2006. - 1328 s. — ISBN 0-321-19784-4 .