(Kiss Beáta 2025/2026)
Az adatbázis az egymással kapcsolatban álló, összetartozó tárolt adatok összessége.
Az adatbázis célja, hogy hatékonyan tárolja, kezelje és szolgáltassa az adatokat különböző alkalmazások és felhasználók számára.
Jellemzői:
Az adatok nem feltétlenül számítógépen kerülnek tárolásra, gondoljunk például a könyvtári kartoték rendszerekre. Az adatbázisok mellé egy adatbáziskezelő rendszer (DBMS - Database Management System) is társul, amely az adatbázis vagy adatbázisok üzemeltetését biztosítja. Elektronikus adatbázisok esetén ez valamsilyen szoftver.
Az adatbáziskezelők fejlődése során többfajta logikai modell alakult ki, melyek főként az adatok közötti kapcsolatok tárolásában térnek el egymástól.
Ilyen modellek:


Relációs
A relációs adatmodell az egyik legáttekinthetőbb és a 80-as évektől kezdve a legelterjedtebb modell. Kidolgozása E. F. Codd (1923-2003) nevéhez fűződik.
Az adatokat táblázatokban tároljuk, itt nincsenek előre definiált és tárolt kapcsolatok az egyes adategységek között, hanem csak a kapcsolatok létrehozásához szükséges adatokat tároljuk. Ezzel egy sokkal rugalmasabb és általánosabb szerkezetet kapunk.
Objektum-relációs
Az objektum relációs adatmodell a relációs adatmodell bővítésével állt elő.
Az objektum orientált megközelítésben használt osztály, objektum, öröklődés fogalmakat alkalmazza a relációs adatbázis táblákra és a lekérdező nyelvet is ez irányba bővíti. Továbbá támogatja az adatmodell bővítését saját adattípusokkal és azokat kezelő beépített függvényekkel.
A relációs modell előnyei:
Egyed Az adatbázisainkban bizonyos dolgokról tartunk információkat. Egy-egy konkrét dolgot, amiről adatot tárolunk, egyednek (entitásnak) is szokás nevezni.
Tábla
Egy tábla az egyedek leírását tartalmazza soronként. A táblázat minden sorban egy egyedet ír le.
A táblákat mindig egyedi névvel látjuk el.
A táblák oszlopaiban azonos mennyiségre vonatkozó adatok jelennek meg. Az oszlopok névvel rendelkeznek, melyeknek a táblán belül egyedieknek kell lenniük, de más táblák tartalmazhatnak azonos nevű oszlopokat.
A tábla soraiban tároljuk a logikailag összetartozó adatokat. A tábla sorainak sorrendje közömbös, de nem tartalmazhat két azonos adatokkal kitöltött sort.
| Rendszám | Gyártmány | Évjárat |
|---|---|---|
| ABC-123 | Opel | 2000 |
| DEF-456 | Audi | 2020 |
| GHI-789 | BMW | 2022 |
Relációs adatbázisok esetén a logikailag összetartozó adatokat egy táblában tároljuk. A táblában lévő oszlopokat attribútumoknak, a sorokat pedig rekordoknak nevezzük.
Mező
Egyetlen tulajdonság, egy sor és oszlop metszetében található táblázat elem. A mezők tartalmazzák az adatokat. A mezőkben oszloponként különböző típusú (numerikus, szöveges stb.) mennyiségek tárolhatók.

Azonosító
Olyan mező, amely egy példányt, vagyis egy rekordot egyértelműen azonosít.
Az azonosítóval szemben támasztott követelmények:
Nézzük meg a járművek táblát. A gyártmány vagy az évjárat nem lehet egyedi azonosító, mivel ismétlődhet, vagyis lehet két járműnek azonos márkája vagy évjárata.
| Rendszám | Gyártmány | Évjárat |
|---|---|---|
| ABC-123 | Opel | 2000 |
| DEF-456 | Audi | 2020 |
| GHI-789 | BMW | 2022 |
A rendszám alkalmas lehet, bár egy járművet a forgalomból kivonva újra forgalomba lehet helyezni. Az azonosító mezőt, kulcs mezőnek is hívjuk, illetve elsődleges kulcsnak.
Idegen kulcs
Az idegen kulcs egy másik táblában szerepel elsődleges kulcsként. Az adott táblában nem elsődleges kulcs. A másik tábla elsődleges kulcsa és az aktuális tábla idegen kulcsa alapján kötjük össze a táblákat. Az idegenkulcsok ebben a formában a táblák közötti kapcsolatot jelölik.
Vegyünk példaként egy olyan csoportot, amelynek tagjai szeretnének egy közös buszos kirándulást tenni, a jegyet pedig már előre megváltották.
Egyik táblában nyilván tartjuk kik a csoport tagjai, a másikban pedig ki az aki már vásárolt jegyet, melyik ülést foglalta le stb.
A jegyek táblában, az Utas mezőben, azt tartjuk nyilván, hogy mi az azonosítója a másik táblában annak a csoport tagnak, aki vásárolta a jegyet. Az Utas mező tehát egy speciális mező, amelyben más táblák elsődleges kulcsai szerepelenek. Ezért az Utas mező a Jegyek táblában az idegenkulcs.
A két tábla valahogy így néz ki:
Csoport:
| az | nev |
|---|---|
| 1 | Nagy István |
| 2 | Kis Virág |
| 3 | Kovács Sándor |
Jegyek:
| az | ules | jaratszam | utas |
|---|---|---|---|
| 1 | 13 | Z10 | 2 |
| 2 | 14 | Z10 | 3 |
Összetett kulcs
Az azonosító két vagy több mezőből áll.
Akkor használjuk, ha nincs olyan mező, amely alkalmas egyedi azonosítónak és valamiért nem szeretnénk ilyen mezőt létrehozni sem.
| Név | Anyja neve | Születési hely | Születési idő |
|---|---|---|---|
| Próba Béla | Próba Jolán | Budapest | 1990.10.01 |
| Vidám Vica | Virgonc Vera | Gyula | 2010.03.14 |
| Humor Helga | Morcos Mici | Szeged | 2008.05.01 |
| Vidám Vica | Kerge Kinga | Tata | 2011.12.01 |
A példában a név mező nem alkalmas egyedi azonosítónak, a Név és az Anyja neve mezők összetett kulcsként azonban be tudnak azonosítani egy konkrét rekordot.
Pótkulcs (surrogate key)
Az előző, összetett kulcsos példában a név nem tekinthető egyértelmű azonosítónak (mivel a név nem egyedi, másnak is lehet ilyen neve), ezért bevezettünk egy összetett kulcsot a név és az anyja neve mezőkre.
A másik lehetőség egy rekord azonosítására a pótkulcs bevezetése:
| Az | Név | Anyja neve | Születési hely | Születési idő |
|---|---|---|---|---|
| 1 | Próba Béla | Próba Jolán | Budapest | 1990.10.01 |
| 2 | Vidám Vica | Virgonc Vera | Gyula | 2010.03.14 |
| 3 | Humor Helga | Morcos Mici | Szeged | 2008.05.01 |
| 4 | Vidám Vica | Kerge Kinga | Tata | 2011.12.01 |
Az „az” mező értékei nem következnek a személyek adataiból, csak pótkulcsnak lett felvéve.
Néhány relációs adatbázis-kezelő:
| Kereskedelmi szoftverek | Nyiltforrású szoftverek |
|---|---|
| Oracle | PostgreSQL |
| MS SQL Server | MySQL |
| IBM DB2 | SQLite |
Ha egy adatbázis-rendszer relációs, akkor használhatjuk a RDBMS (Relational Database Management System) rövidítést is.
NoSQL típusok:
A NoSQL adatbázisok olyan adatbázisok, amelyek nem a hagyományos relációs adatbázis modelleket használják, hanem inkább saját, speciális adatmodelleket.
A NoSQL adatbázisok típusai:
Ezek csak néhány példa a NoSQL adatbázisok típusaira. Minden típusnak megvannak a saját előnyei és hátrányai és a választás függ a konkrét igényektől és követelményektől.
A NoSQL adatbázisokat nem azért találták ki, hogy leváltsák az SQL-t. Az SQL összetett feladatokban nagyon jól teljesít. NoSQL adatbázisokat akkor használunk, ha nincs szükség komplex lekérdezésekre.
Heterogén DBMS rendszerek:
A heterogén DBMS rendszerek olyan hálózatok, amelyek több, különböző típusú adatbázist és rendszerkezelő rendszert integrálnak egy egységes, átfogó rendszerbe.
Ezek a rendszerek lehetővé teszik a különböző forrásokban tárolt adatok elérését és kezelését, beleértve a különféle operációs rendszereket, hálózati architektúrákat és adatbázis-típusokat is.
A heterogén rendszerek integrálják a különálló, eltérő technológiát használó adatbázisokat.
Főbb jellemzők:
Előnyök:
Lehetővé teszik a szervezet számára, hogy kihasználja a meglévő, különálló adatbázisok előnyeit, miközben egységes hozzáférést biztosítanak a teljes adathalmazhoz.
A relációs adatszerkezet számunkra a legszemléletesebben igyekszik megjeleníteni az adatokat.
Jellemzői:
A fentiek alapján kimondható, hogy:
A relációs adatbázis olyan adatbázis, amelyben az adatok névvel ellátott táblákba vannak rendezve, és kapcsolatok révén állnak összeköttetésben egymással.
A relációs adatbázisban az azonosítókat elsődleges kulcsnak nevezik.
A fenti jármű példában elsődleges kulcs lehet a rendszám, mert biztosan nem lesz két olyan kocsi, aminek megegyezik a rendszáma.
Kapcsolatok:
Az adatokat általában több táblában tároljuk, ezért meg kell határoznunk, hogy a táblák között milyen kapcsolatok vannak.
Például egy anyának több gyereke is lehet. Mivel az anyának több gyereke is lehet, de egy gyereknek csak egy anyukája lehet, ezért 1:n-hez (egy a többhöz) kapcsolat van köztük.
Lehetséges kapcsolatok:
Az adatbázistervezés egy folyamat, amely több lépésből tevődik össze.
A tervezés lépései:
Először meghatározzuk az adatbázissal szembeni igényeket, a tárolandó adatokat és az adatok közötti kapcsolatokat. Ezután következik a rendszer tervezése, melynek eredménye az adatbázis logikai modellje. Végül az adatbázis logikai modelljét leképezzük fizikai szinten.
Funkcionális kapcsolatról akkor beszélünk, ha egy tábla egyik oszlopának (vagy oszlopainak) értéke meghatározza egy másik tábla egy másik oszlopának (vagy oszlopainak) értékét.
Például:
Egy Rendelés tábla és egy Ügyfél tábla között funkcionális kapcsolat van, ha a Rendelés tábla ÜgyfélID oszlopa hivatkozik az Ügyfél tábla ÜgyfélID oszlopára.
A funkcionális kapcsolatokat a következőképpen jelöljük:



A funkcionális függőség (angolul: functional dependency) azt jelenti, hogy egy attribútum vagy attribútumcsoport függ egy másik attribútumtól vagy attribútumcsoporttól.
Formálisan:
Egy attribútum (B), funkcionálisan függ egy másik attribútumtól (A), ha:
Jelölése: A → B
Például:
Tegyük fel, hogy van egy Ügyfél tábla a következő oszlopokkal:
ÜgyfélID, Név, Cím
Ebben az esetben a Név és Cím attribútumok funkcionálisan függnek az ÜgyfélID-től, mert az ÜgyfélID egyértelműen meghatározza a Név és Cím értékét.
A funkcionális függőség fontos az adatbázistervezésben, mert segít meghatározni a táblák szerkezetét és az attribútumok közötti kapcsolatokat.
A teljes funkcionális függőség (angolul: full functional dependency) azt jelenti, hogy egy attribútum vagy attribútumcsoport teljes mértékben függ egy másik attribútumtól vagy attribútumcsoporttól.
Formálisan:
Egy attribútum (B), teljes mértékben függ egy másik attribútumtól (A), ha:
Például:
Tegyük fel, hogy van egy Rendelés tábla a következő oszlopokkal:
RendelésID, ÜgyfélID, TermékID, MegrendeltMennyiség
Ebben az esetben a MegrendeltMennyiség attribútum teljes mértékben függ a RendelésID, ÜgyfélID és TermékID attribútumoktól, mert a MegrendeltMennyiség értéke csak ezen attribútumok együttes értékétől függ.
Adatok közötti többértékű függőség
A többértékű függőség (angolul: multi-valued dependency) egy olyan függőségtípus, amely akkor fordul elő, ha egy tábla egyik oszlopának (vagy oszlopainak) értéke több értéket határoz meg egy másik oszlopban.
Ha egy táblában az A oszlop értéke meghatározza a B oszlop értékét, de a B oszlop értéke nem egyedi, hanem több értéket is tartalmazhat, akkor töbértékű függőségről beszélünk.
Jelölése: A →→ B
Például:
Tegyük fel, hogy van egy Termék tábla a következő oszlopokkal:
TermékID, TermékNév, Kategória
Ha egy terméknek több kategóriája is lehet (pl. egy termék lehet elektronikai cikk és ajándék is), akkor a TermékID →→ Kategória töbértékű függőség.
Tranzitív függőségnek nevezzük azt a helyzetet, amikor egy tábla egyik oszlopának (vagy oszlopainak) értéke függ egy másik oszlop értékétől, amely viszont függ egy harmadik oszlop értékétől.
Formálisan:
Ha A → B és B → C, akkor A → C tranzitív függőség.
Például:
Tegyük fel, hogy van egy Rendelés tábla a következő oszlopokkal:
RendelésID, ÜgyfélID, ÜgyfélNév
Ebben az esetben az ÜgyfélID → ÜgyfélNév függőség tranzitív, mert az ÜgyfélNév valójában az ÜgyfélID-től függ, nem közvetlenül a RendelésID-től.
A függőségek problémája az, hogy redundanciát és inkonzisztenciát okozhatnak az adatokban. Ezért az adatbázistervezés során törekszünk arra, hogy a függőségeket megszüntessük, vagyis a táblákat úgy tervezzük, hogy ne tartalmazzanak függőségeket. A függőségek megszüntetését a táblák normalizálással érhetjük el.
Általános formája:
reláció_név = ({attribútumok},{funkcionális függőségek listája})
A reláció táblázatos megadása:

Matematikai jelöléssel a következő formában írható le a funkcionális függőségekkel együtt (feltételezve, hogy mindenkinek csak egy munkahelye van):
SZEMELYEK = ({SZEMELYI_SZAM, NEV, MUNKAHELY}, {SZEMELYI_SZAM -> NEV, SZEMELYI_SZAM -> MUNKAHELY})
Reláció kulcs
A reláció kulcs a reláció egy sorát egyértelműen azonosítja. A reláció nem tartalmazhat két azonos sort, ezért minden relációban létezik kulcs.
A reláció kulcsnak a következő feltételeket kell teljesítenie
A kulcsok nem önkényes döntések alapján alakulnak ki, hanem az adatok természetéből következnek, mint a funkcionális vagy a többértékű függőség.
A relációban külső kulcsot vagy kulcsokat is megkülönböztetünk. Ezek az attribútumok nem az adott relációban (táblában), hanem az adatbázis másik relációjában alkotnak kulcsot.
Például ha a SZAKKOR relációban a DIÁK azonosítására a személyi számot alkalmazzuk, akkor ez egy külső kulcs a személyi adatokat nyilvántartó relációhoz.
A redundancia azt jelenti, hogy egy adat több helyen is tárolásra kerül az adatbázisban. Ez történhet szándékosan vagy szándékolatlanul. A szándékos redundancia esetén a tervező szándékosan duplikálja az adatokat, hogy bizonyos helyzetekben javítsa a teljesítményt vagy a megbízhatóságot. A szándékolatlan redundancia viszont általában a tervezési hibákból adódik, és problémákat okozhat, például az adatok inkonzisztenciáját. Az adatok inkonzisztenciája azt jelenti, hogy az adatok között ellentmondások vagy eltérések vannak.
A redundancia típusai:
A redundancia milyen problémákat okozhat?:
Példa redundanciára:
| Tanár | Tantárgy | Össz_óraszám | Tanított_órák |
|---|---|---|---|
| Kovács Péter | Angol | 64 | 12 |
| Nagy Éva | Matematika | 32 | 8 |
| Szabó Miklós | Angol | 64 | 4 |
| Kis Rita | Matematika | 32 | 5 |
A fenti relációban a tantárgyak össz óraszámát annyiszor tároljuk, ahány tanár tanítja az adott tantárgyat. A példában feltételezzük, hogy egy tantárgyat több tanár is tanít. A redundancia a következő hátrányokkal jár:
Vizsgáljuk meg a következő példát:
| Termék | Alkatrész | Darab |
|---|---|---|
| Nyomtató | papír adagoló | 1 |
| Nyomtató | festékpatron | 2 |
| Számítógép | 1TB SSD | 1 |
| Számítógép | 16 GB memória | 4 |
A táblázat a termék oszlopban többször tartalmazza a nyomtató és számítógép adatokat. Ez azonban nem okoz redundanciát, mivel egy termék több alkatrészből is állhat, így nem ugyanannak az adatnak a többszörös tárolásáról van szó, hanem egy másik adatot fejezünk ki, melyhez elengedhetetlen a duplikált tárolás. A duplikált és a redundáns adatok között a funkcionális függőségek vizsgálatával tehetünk különbséget.
Az adatbázistervezésben a cél általában a redundancia minimalizálása és az adatok integritásának biztosítása. Ezt normalizálással érik el, amely magában foglalja az adatok szervezését és a táblák közötti kapcsolatok kialakítását úgy, hogy minimalizálják a redundanciát és biztosítsák az adatok konzisztenciáját.
A normalizálás során az adatbázist több lépésben alakítják át, hogy az adatok szervezése megfeleljen bizonyos szabályoknak.
Ezek a szabályok biztosítják, hogy az adatok:
A normalizálás hátrányai:
A leggyakrabban használt normalizálási formák:
Első normál forma (1NF)
Egy tábla akkor van első normál formában, ha minden sorában csak egyszerű értékek vannak, azaz nem lehetnek összetett értékek vagy táblák.
Példa:
Tábla, amely nincs 1NF-ben:
| ID | Név | Telefon számok |
|---|---|---|
| 1 | Kovács | 123-456-7890, 987-654-3210 |
Tábla, 1NF-ben:
| ID | Név | Telefon szám |
|---|---|---|
| 1 | Kovács | 123-456-7890 |
| 1 | Kovács | 987-654-3210 |
Második normál forma (2NF)
Egy tábla akkor van második normál formában, ha a tábla 1NF-en van és minden attribútum függ az elsődleges kulcstól.
Példa:
Tábla, amely nincs 2NF-ben:
| ID | Név | Cím | Város |
|---|---|---|---|
| 1 | Kovács | 123 Main St | Budapest |
Tábla, amely 2NF-ben van:
| ID | Név |
|---|---|
| 1 | Kovács |
| Cím ID | Cím | Város |
|---|---|---|
| 1 | 123 Main St | Budapest |
Harmadik normál forma (3NF)
Egy tábla akkor van harmadik normál formában, ha nincs tranzitív függőség és a tábla 2NF-ben van.
Példa:
Tábla, amely nincs 3NF-ben:
| ID | Név | Város | Ország |
|---|---|---|---|
| 1 | Kovács | Budapest | Magyarország |
Tábla, amely 3NF-ben van:
| ID | Név | Város ID |
|---|---|---|
| 1 | Kovács | 1 |
| Város ID | Város | Ország |
|---|---|---|
| 1 | Budapest | Magyarország |
A normalizálási formák biztosítják, hogy az adatok szervezése megfeleljen bizonyos követelményeknek, és segítenek abban, hogy az adatbázis hatékonyan és megbízhatóan működjön.
További normál formák:
Boyce-Codd normál forma (BCNF)
Egy tábla akkor van Boyce-Codd normál formában, ha minden attribútum függ az elsődleges kulcstól, és nincs tranzitív függőség, továbbá a tábla 3NF-ben van.
A BCNF szigorúbb követelményeket támaszt, mint a 3NF, és biztosítja, hogy az adatok szervezése még hatékonyabb legyen.
Példa:
Tábla, amely nincs BCNF-ben:
| ID | Név | Osztály | Osztályvezető |
|---|---|---|---|
| 1 | Kovács | Matematika | Smith |
| 2 | Szabó | Fizika | Johnson |
Ebben a táblában az Osztályvezető attribútum függ az Osztály attribútumtól, nem pedig az ID vagy Név attribútumtól. Ez tranzitív függőséget jelent.
Tábla, amely BCNF-ben van:
| ID | Név | Osztály |
|---|---|---|
| 1 | Kovács | Matematika |
| 2 | Szabó | Fizika |
| Osztály | Osztályvezető |
|---|---|
| Matematika | Smith |
| Fizika | Johnson |
Ebben a példában a táblákat szétbontottuk úgy, hogy az Osztályvezető attribútum csak az Osztály attribútumtól függjön, és ne legyen tranzitív függőség. Így a tábla BCNF-ben van.
Negyedik normál forma (4NF)
Egy tábla akkor van negyedik normál formában, ha nincs többértékű függőség és a tábla BCNF-ben van.
Példa:
Tábla, amely nincs 4NF-ben:
| ID | Név | Színek |
|---|---|---|
| 1 | Kovács | piros, kék |
Tábla, amely 4NF-ben van:
| ID | Név |
|---|---|
| 1 | Kovács |
| ID | Szín |
|---|---|
| 1 | piros |
| 1 | kék |
Források: