Iz 2.razreda -> Spoljašnji ključ (Foreign Key) u bazama podataka
Zaokružiti brojeve ispred tačnih iskaza:
1. Vrednost u polju spoljašnjeg ključa ne sme biti NULL
2. Vrednost spoljašnjeg ključa mora biti jedinstvena (unique) u koloni nad kojom je postavljeno ograničenje spoljašnjeg ključa
3. Vrednost u polju spoljašnjeg ključa mora biti ili NULL ili jednaka nekoj od vrednosti iz kolone na koju spoljašnji ključ referencira
4. Više redova u tabeli može sadržati istu vrednost u polju spoljašnjeg ključa i time pokazivati na isti red u referenciranoj tabeli
5. Kolona spoljašnjeg ključa ne mora sadržati isti tip podataka kao kolona na koju spoljašnji ključ referencira
Spoljašnji ključ (Foreign Key) u bazama podataka
Uvod
U relacionim bazama podataka tabele su međusobno povezane. Da bi jedna tabela mogla da „pokazuje“ na drugu koristi se spoljašnji ključ (foreign key).
Spoljašnji ključ omogućava povezivanje podataka između tabela i obezbeđuje da podaci budu logički ispravni.
Bez spoljašnjih ključeva moglo bi doći do unošenja nepostojećih ili nelogičnih podataka.
Šta je primarni ključ?
Pre nego što razumemo strani ključ, moramo znati šta je primarni ključ (primary key).
Primarni ključ:
-
jedinstveno identifikuje svaki red,
-
ne sme imati duplikate,
-
ne sme imati NULL vrednost.
Primer:
Tabela Odeljenje
| ID_Odeljenja | Naziv |
|---|---|
| 1 | I-1 |
| 2 | I-2 |
| 3 | I-3 |
ID_Odeljenja je primarni ključ.
Šta je spoljašnji ključ?
Spoljašnji ključ (foreign key) je kolona koja referencira primarni ključ druge tabele.
Njegova svrha je povezivanje tabela.
Primer:
Tabela Odeljenje
| ID_Odeljenja | Naziv |
|---|---|
| 1 | I-1 |
| 2 | I-2 |
Tabela Ucenik
| ID_Ucenika | Ime | ID_Odeljenja |
|---|---|---|
| 1 | Marko | 1 |
| 2 | Ana | 2 |
Ovde:
ID_Odeljenja u tabeli Ucenik je spoljašnji ključ.
On pokazuje na:
Odeljenje.ID_Odeljenja
Kako radi spoljašnji ključ?
Spoljašnji ključ proverava da li vrednost postoji u drugoj tabeli.
Dozvoljeno:
ID_Odeljenja = 1
ako postoji odeljenje 1.
Nedozvoljeno:
ID_Odeljenja = 99
ako takvo odeljenje ne postoji.
Ovo pravilo naziva se:
Referencijalni integritet
To znači da veze između tabela moraju ostati ispravne.
Baza neće dozvoliti unos pogrešnih podataka.
Pravila spoljašnjeg ključa
1. Foreign key može biti NULL
Ako nije obavezna vrednost.
Primer:
Neki učenik još nije raspoređen u odeljenje.
| Ucenik | ID_Odeljenja |
|---|---|
| Marko | NULL |
2. Foreign key NE mora biti UNIQUE
Više redova može imati istu vrednost.
Primer:
Više učenika pripada jednom odeljenju.
To omogućava vezu:
1 : M
Jedno odeljenje → više učenika.
3. Foreign key mora postojati u referenciranoj tabeli
Ako referencira tabelu Odeljenje, vrednost mora postojati tamo.
Dozvoljeno:
1, 2, 3
Nedozvoljeno:
999
ako takav ključ ne postoji.
4. Tip podataka mora odgovarati
Ako je primarni ključ:
INT
i strani ključ mora biti:
INT
Ne može biti:
VARCHAR
Primer
Kreiranje dve povezane tabele:
CREATE TABLE Odeljenje (
ID_Odeljenja INT PRIMARY KEY,
Naziv VARCHAR(20)
);
CREATE TABLE Ucenik (
ID_Ucenika INT PRIMARY KEY,
Ime VARCHAR(50),
ID_Odeljenja INT,
FOREIGN KEY (ID_Odeljenja)
REFERENCES Odeljenje(ID_Odeljenja)
);
Ovde:
FOREIGN KEY (ID_Odeljenja)
REFERENCES Odeljenje(ID_Odeljenja)
predstavlja strani ključ.
Primer greške
Ako pokušamo:
INSERT INTO Ucenik
VALUES (1, 'Marko', 99);
baza će prijaviti grešku jer:
odeljenje 99 ne postoji.
Razlika između primarnog i spoljašnjeg ključa
| Osobina | Primary Key | Foreign Key |
|---|---|---|
| Jedinstven | Da | Ne |
| NULL dozvoljen | Ne | Da |
| Identifikuje red | Da | Ne |
| Povezuje tabele | Ne | Da |
Zaključak
Spoljašnji ključ služi za povezivanje tabela i očuvanje tačnosti podataka.
Najvažnije treba zapamtiti:
-
Foreign key može biti NULL
-
Foreign key ne mora biti jedinstven
-
Mora pokazivati na postojeću vrednost ili biti NULL
-
Tip podataka mora odgovarati referenciranom ključu
Zahvaljujući spoljašnjem ključu baza podataka održava logičke veze između tabela i sprečava unos neispravnih podataka.