Elsődleges és idegen kulcs használata SQL-ben – PRIMARY KEY, FOREIGN KEY megszorítások bemutatása példákkal
Az SQL elsődleges kulcs (PRIMARY KEY) és idegen kulcs (FOREIGN KEY) megszorításait, kényszerfeltételeit együtt szokás emlegetni, hiszen egy adatbázis felépítése során általában mind a kettő előkerül. A közöttük lévő különbözőségekre az állásinterjúkon is előszeretettel kérdeznek rá, így ebben a cikkben bemutatjuk a két megkötés használatát és különbözőségeit.
Elsődleges kulcs bemutatása
A PRIMARY KEY megszorítást magyarul elsődleges kulcsnak nevezzük. Az elsődleges kulcs egy olyan érték, amely alapján minden rekord egyértelműen és összetéveszthetetlenül beazonosítható. Ebből kifolyólag az elsődleges kulcs egy teljesen egyedi érték, ez az érték nem tartalmazhat NULL-t. Egy táblának csak egyetlen egy elsődleges kulcsa lehet, amely állhat egy vagy több oszlopból is. Ha egy oszlopból áll, akkor egyszerű kulcsnak, ha több oszlopból, akkor összetett kulcsnak nevezzük.
A tábla elsődleges kulcsa automatikusan indexelésre kerül. Ennek előnyeiről egy másik cikkben olvashattok.
Az SQL PRIMARY KEY szintaxisa
Először definiálnunk kell egy mezőt, melyhez meg kell adnunk a típusát, illetve ki kell kötnünk, hogy az értéke nem lehet NULL. Majd a következő sorban a PRIMARY KEY utasítással megadjuk, hogy az előbb definiált mező lesz az elsődleges kulcs. Ne felejtsük el, hogy az egyes utasítások között vessző van, elég gyakori hiba, amely sok fejfájást okoz és nehéz észrevenni is.
Egyszerű elsődleges kulcs létrehozása MySQL-ben
CREATE TABLE tábla (
mező adattípus NOT NULL,
PRIMARY KEY (mező)
);
Code language: PHP (php)
Elsődleges kulcsokat általában a tábla létrehozásakor szoktunk létrehozni, de lehetőség van utólag is létrehozni egyet. Ehhez az ALTER TABLE utasításra lesz szükségünk. Ebben a cikkben részletesen bemutatjuk a használatát.
SQL PRIMARY KEY példa
Ebben a példában létrehozunk „vasarlok” táblát, amelynek a „vasarloID” névre keresztelt mező lesz az elsődleges kulcsa.
SQL kód
CREATE TABLE vasarlok (
vasarloID int NOT NULL,
PRIMARY KEY (vasarloID)
);
Code language: SQL (Structured Query Language) (sql)
Idegen kulcs bemutatása
Az idegen kulcsot magyarul szokás másodlagos kulcsnak is nevezni, míg angolul FOREIGN KEY-ként hivatkozunk rá. A másodlagos kulcs egy olyan oszlop vagy több oszlop, amely kapcsolatot biztosít két tábla adatai között. Az idegen kulcs egy olyan azonosító, amellyel egy másik tábla elsődleges kulcsára hivatkozhatunk. Leegyszerűsítve azt mondhatjuk, hogy az idegen kulcs egy másik tábla elsődleges kulcsa. A másodlagos kulcsot egyszerűnek nevezzük, ha csak egy oszlopból áll, illetve összetettnek, ha többől.
Az SQL FOREIGN KEY szintaktikája
Bár ha egy picit lentebb pillantunk, elsőre ijesztő lehet a szintaktika, de ha alaposan átnézzük és értelmezzük a látottakat, akkor hamar kiderül, hogy nem is olyan vészes a helyzet.
Először szükségünk lesz egy mezőre, amelyet másodlagos kulcsnak nevezünk ki a FOREIGN KEY utasítással. A FOREIGN KEY utasítás után található zárójelek közé jön a jelenlegi táblában definiált mező neve, amelyet idegen kulcsként akarunk kinevezni. Majd ezt követi a REFERENCES szó és a másik tábla, amellyel kapcsolatot akarunk kialakítani. Ezt követően a zárójelek közé a másik tábla elsődleges kulcsát kell megadni.
Egyszerű idegen kulcs létrehozása MySQL-ben
CREATE TABLE tábla (
mező adattípus,
FOREIGN KEY (mező) REFERENCES másikTábla(elsődlegesKulcs)
);
Code language: SQL (Structured Query Language) (sql)
Idegen kulcsok esetében is igaz, hogy általában a tábla létrehozásakor szoktunk definiálni őket, de lehetőség van utólagos létrehozásra is. Ehhez az ALTER TABLE utasításra lesz szükségünk. Ebben a cikkben részletesen bemutatjuk a használatát.
SQL FOREIGN KEY példa
A lenti példában létrehozunk egy „vasarlasok” táblát, amelyben a „vasarloID” lesz az idegen kulcs, amely a „vasarlok” tábla „vasarloID” elsődleges kulcsára mutat.
CREATE TABLE vasarlasok (
vasarloID int,
FOREIGN KEY (vasarloID) REFERENCES vasarlok(vasarloID)
);
SQL összetett kulcs
A korábbi példákban egyszerű kulcsokat hoztunk létre, de ahogy a leckében is említettük lehetséges összetett kulcsok létrehozása is. A szintaxis nem változik, csak abban a pontban, ahol megadjuk, hogy mely mező legyen az elsődleges kulcs. Korábban csak egyetlen egy oszlopot adtunk meg, egy összetett kulcs esetében viszont többet is megadunk.
CREATE TABLE tábla (
mező1 adattípus NOT NULL,
mező2 adattípus,
PRIMARY KEY (mező1, mező2)
);
Code language: PHP (php)
Egy összetett kulcs esetében nem kell, hogy minden mező NOT NULL legyen, de legalább egynek annak kell lennie.