Kapcsolat jön létre két adatbázistábla között, ha az egyik tábla olyan idegen kulcsot használ, amely egy másik tábla elsődleges kulcsára hivatkozik. Ez az alapfogalom a relációs adatbázis kifejezés mögött.
Hogyan működik az idegen kulcs a kapcsolat létrehozásához
Egy elsődleges kulcs egyedileg azonosítja a táblázat minden rekordját. Ez egy olyan jelölt kulcs, amely általában a táblázat első oszlopa, és az adatbázis automatikusan generálhatja, hogy biztosítsa az egyediséget. Az idegen kulcs egy másik jelölt kulcs (nem az elsődleges kulcs), amelyet egy rekord és egy másik tábla adatainak összekapcsolására használnak.
Vegyük például ezt a két táblázatot, amelyek meghatározzák, hogy melyik tanár melyik kurzust tanítja. Itt a Courses tábla elsődleges kulcsa a Course_ID. Idegen kulcsa Teacher_ID:
Curse_ID | Tanfolyam_neve | Teacher_ID |
---|---|---|
Curse_001 | Biológia | Teacher_001 |
Tanfolyam_002 | Matek | Teacher_002 |
Tanfolyam_003 | angol | Teacher_003 |
Látható, hogy a kurzusok idegen kulcsa megegyezik a Tanárok elsődleges kulcsával:
Teacher_ID | Tanár_neve |
---|---|
Teacher_001 | Carmen |
Teacher_002 | Veronica |
Teacher_003 | Jorge |
Elmondhatjuk, hogy a Teacher_ID idegen kulcs segített kapcsolatot létesíteni a kurzusok és a tanárok táblák között.
Az adatbázis-kapcsolatok típusai
Idegen kulcsok vagy más jelölt kulcsok használatával háromféle kapcsolatot valósíthat meg a táblák között:
Egy-az-egyhez
Ez a típusú kapcsolat csak egy rekordot engedélyez a kapcsolat mindkét oldalán. Az elsődleges kulcs csak egy rekordhoz (vagy egyikhez sem) kapcsolódik egy másik táblában. Például egy házasságban minden házastársnak csak egy másik házastársa van. Ez a fajta kapcsolat egyetlen táblában is megvalósítható, ezért nem használ idegen kulcsot.
Egy a sokhoz
Az egy a többhez kapcsolat lehetővé teszi, hogy az egyik tábla egyetlen rekordja egy másik tábla több rekordjához kapcsolódjon. Vegyük fontolóra egy olyan vállalkozást, amelynek adatbázisa Ügyfelek és Megrendelések táblázatokkal rendelkezik.
Egy ügyfél több rendelést is vásárolhat, de egyetlen rendelést nem lehetett több vásárlóhoz kapcsolni. Ezért a Rendelések tábla tartalmazna egy idegen kulcsot, amely megegyezik a Vevők tábla elsődleges kulcsával, míg a Vevők tábla nem tartalmazna a Rendelések táblára mutató idegen kulcsot.
Sok a sokhoz
Ez egy összetett kapcsolat, amelyben egy tábla sok rekordja hivatkozhat egy másik tábla sok rekordjára. Vállalkozásunknak például valószínűleg szüksége van az Ügyfelek és a Megrendelések táblázatokra, és valószínűleg egy Termékek táblázatra is.
Ismét, a Vevők és Rendelések tábla közötti kapcsolat egy a többhez, de vegye figyelembe a Rendelések és Termékek tábla közötti kapcsolatot. Egy rendelés több terméket is tartalmazhat, és egy termék több megrendeléshez is kapcsolódhat, mivel több ügyfél is leadhat olyan rendelést, amely ugyanazokat a termékeket tartalmazza. Egy ilyen kapcsolathoz legalább három tábla szükséges.
Miért fontosak az adatbázis-kapcsolatok?
Az adatbázistáblák közötti következetes kapcsolatok kialakítása segít az adatok integritásának biztosításában, hozzájárulva az adatbázis normalizálásához. Például mi lenne, ha egyetlen táblát sem kapcsolnánk össze idegen kulcson keresztül, hanem a Kurzusok és a Tanárok táblák adatait kombinálnánk, így:
Teacher_ID | Tanár_neve | Tanfolyam |
---|---|---|
Teacher_001 | Carmen | Biológia, matematika |
Teacher_002 | Veronica | Matek |
Teacher_003 | Jorge | angol |
Ez a kialakítás rugalmatlan, és sérti az adatbázis normalizálásának első elvét, a First Normal Form-ot, amely kimondja, hogy minden táblázatcellának egyetlen, különálló adatot kell tartalmaznia.
Vagy úgy döntöttünk, hogy hozzáadunk egy második rekordot Carmenhez, hogy érvényesítsük az 1NF:
Teacher_ID | Tanár_neve | Tanfolyam |
---|---|---|
Teacher_001 | Carmen | Biológia |
Teacher_001 | Carmen | Matek |
Teacher_002 | Veronica | Matek |
Teacher_003 | Jorge | angol |
Ez még mindig gyenge konstrukció, szükségtelen duplikációkat és úgynevezett adatbeillesztési anomáliákat okoz, ami azt jelenti, hogy hozzájárulhat az adatok következetlenségéhez. Például, ha egy tanárnak több rekordja van, mi van akkor, ha néhány adatot szerkeszteni kell, de az adatszerkesztést végző személy nem veszi észre, hogy több rekord létezik? A táblázat ekkor különböző adatokat tartalmazna ugyanarra a személyre vonatkozóan, anélkül, hogy egyértelműen azonosítani lehetne vagy elkerülni lehetne.
A táblázat két táblázatra, a Tanárok és a Tanfolyamok táblázatra bontása megfelelő kapcsolatot hoz létre az adatok között, és ezáltal elősegíti az adatok következetességét és pontosságát.