Cheie străină ( ing. cheie străină ) - conceptul teoriei bazelor de date relaționale , referitor la constrângerile asupra integrității bazei de date .
Informal vorbind, o cheie străină este un subset de atribute ale unei variabile de relație R 2 ale cărei valori trebuie să se potrivească cu valorile unei chei potențiale a unei variabile de relație R 1 .
Definiție formală. Fie R 1 și R 2 două variabile relaționale, nu neapărat distincte. O cheie externă FK în R2 este un subset al atributelor variabilei R2 astfel încât să fie îndeplinite următoarele cerințe :
Mai mult, pentru această cheie străină particulară FK → CK , relația R1 care conține cheia potențială este numită relație principală , țintă sau părinte , iar relația R2 care conține cheia externă este numită relație subordonată sau copil .
Menținerea cheilor străine este denumită și menținerea integrității referențiale . SGBD-urile relaționale acceptă controlul automat al integrității referențiale.
Să presupunem că există două tabele în baza de date: Oraș (orașe) și Stradă (străzi), care sunt definite după cum urmează:
CREATE TABLE City ( id INTEGER NOT NULL PRIMARY KEY , numele CHAR ( 40 ) ) CREATE TABLE Strada ( id INTEGER NOT NULL PRIMARY KEY , numele CHAR ( 40 ), id_city INTEGER NOT NULL REFERINȚE STRĂINE CHEIE Oraș ( id ) )Conținutul acestor tabele este următorul:
ORAȘ
ID | NUME |
---|---|
unu | Moscova |
2 | St.Petersburg |
3 | Vladivostok |
STRADĂ
ID | NUME | ID_CITY |
---|---|---|
181 | Malaya Bronnaya | unu |
182 | Bulevardul Tverskoy | unu |
183 | Bulevardul Nevski | 2 |
184 | Pușkinskaia | 2 |
185 | Svetlanskaya | 3 |
186 | Pușkinskaia | 3 |
Tabelul STREET are un câmp ID_CITY, care este o cheie străină și se referă la tabelul CITY. Valoarea din acest câmp corespunde cheii primare din tabelul CITY pentru orașul în care se află strada. Astfel, Nevsky Prospekt are ID_CITY=2, care corespunde Sankt Petersburgului (ID=2 în tabelul CITY).
Tabelul STREET conține două străzi cu același nume Pushkinskaya, care diferă prin valoarea câmpului ID_CITY. Unul dintre ele este situat în Sankt Petersburg (ID_CITY=2), celălalt este în Vladivostok (ID_CITY=3).
O încercare de a adăuga strada „Deribasovskaya” cu ID_CITY=4 la tabelul STREET va provoca o eroare de încălcare a integrității referențiale, deoarece nu există niciun oraș cu ID=4 în tabelul CITY. Cu toate acestea, după adăugarea orașului „Odessa” cu ID=4 la tabelul CITY, reintrarea străzii „Deribasovskaya” cu ID_CITY=4 va avea succes.
Când ștergeți orașul Vladivostok din tabelul CITY, rezultatul depinde de proprietățile cheii externe:
Când schimbați codul orașului Sankt Petersburg de la 2 la 48 în tabelul CITY, rezultatul depinde de proprietățile cheii străine:
Bază de date | |
---|---|
Concepte |
|
Obiecte |
|
Chei | |
SQL |
|
Componente |