Adatbázis kezelés alapfogalmak

Mi fán terem az adatbázis?

Mindig is érdekelt, hogy miképp tárolják és használják az alkalmazások az adatokat? Szeretnéd tudni, mi az az adatbázis kezelés? Cikkünkből most minden kiderül.

Nézzük, miről lesz ma szó:

  • Programok felépítése, „összetevői”
  • Adatbázis példák a való életből, amit mindennapjaidban Te is használsz
  • Programozóként mindenképpen szükséged lesz (legalább) az adatbázis kezelés alapfogalmaira
  • Helyretesszük kicsit az alapfogalmakat és megnézünk néhány konkrét adatbázis rendszert
  • Haladóbb technikák adatbázisok témakörben

Programok felépítése, összetevői

Egyszer egy témában laikusnak számító lelkes érdeklődő megkérdezte tőlem, hogyan kezelik a programok azt a sok adatot, amit nap, mint nap használunk.

Kicsit felülről ránézve a problémára bennem is megfogalmazódott, hogy ez amúgy tök érdekes információ lehet a téma iránt érdeklődők számára. Sőt, mondok jobbat, az adatbázis rendszerek egy olyan nagy tudomány terület az IT piacon belül, amit adott esetben egy kifejezetten erre dedikált osztályt menedzsel. Lehet, hogy Te is a téma szakértője leszel, amikor specializációt választassz? A cikk végére írva lehet el is tudod dönteni.

Na de nézzük, mi ez, hogy adatbázis. Egy száraz definícióval letudva röviden annyit lehetne mondani, hogy egy olyan rendszer, mely az adatok tárolásáért, módosításáért és létrehozásáért felel. Egy szakértő biztosan megmosolyogja ezt a mondatot, de nem sokkolhatunk senkit tanulmányai elején olyan szakszavakkal, mint: ACID elvek, reláció, ER diagram, BCNF, stb…

Egy alap program összetevői

Haladjunk az elejétől. Miből is tevődik össze egy egyszerűbb alapprogram.

A legegyszerűbb programok számára is szükség van egy olyan futtató környezetre, amin keresztül az alkalmazás használható. Ilyen lehet pl.: egy mobiltelefon, webböngésző, de akár egy okos hűtőt is ide sorolhatunk.

Maga a programkód az, ami az általunk végrehajtott cselekedeteket lefordítja a gép számára értelmezhető utasítássá, ami alapján a felhasználó kérése végrehajtódik. Ilyen programkód lehet: Java, PHP, C#, Go, JavaScript, shell script, SQL utasítás, stb…

Kevés olyan program létezik, ami nem hajt végre adatkezelést. Gondoljunk itt egy profil adatlap mentésre, egy regisztrációs folyamatra, vagy egy jelszómódosításra, de ide tartozik pl.: az ujjlenyomat tárolása is.

Jól látható a fenti ábrából is, hogy egyik összetevő nem tud létezni a másiktól, ebből következik, hogy fejlesztőként, programozóként, IT szakemberként mindegyikre kell, hogy legyen legalább rálátásunk. Most nézzük meg, melyik összetevőt, jellemzően milyen szaktudású IT specialisták végzik:

  • Futtató környezet: Rendszergazda, Rendszertechnikus, DevOps, Infrastruktúra üzemeltető.
  • Programkód: Backend fejlesztő, Frontend fejlesztő, Fullstack fejlesztő, Mobilalkalmazás fejlesztő
  • Adatbázis (DB – Database): DB adminisztrátor (DBA), DB programozó

Ha nem emlékszel melyik mit jelent, olvasd el IT munkakörökről szóló cikkünket.

Adatbázis példák a való életből, amit mindennap Te is használsz

Szinte biztos vagyok benne, hogy Neked is van Facebook fiókod, vagy valamilyen e-mail postafiókod, de ha más nem TAJ számod biztosan van.

Nagyon bele sem gondolunk, de csak azzal, hogy mindennap meglátogatjuk esetleg a Facebook – ot, azzal számos szervert utasítunk arra, hogy hajtson végre bizonyos utasításokat a mi kérésünkre. Ilyen kérés például, hogy feltöltessz egy képet a fiókodba. Ez azt jelenti, hogy a Facebook – nak ezt mondod: Facebook, itt ez a kép, tárold már el nekem az adatbázisodba úgy, hogy azt bármikor elérhessem. Jó pár ezer soros utasítás hajtódik végre erre az aprócska kérésedre villámgyorsan.

De tegyük fel, hogy elmész a háziorvoshoz feliratni egy gyógyszert. Az első az lesz, hogy a TAJ számod alapján rákeresnek az adataidra az „adatbázisban”. Ez az adatokat nyílvántartó és rendszerező megoldás pontosan tud rólad mindent és néhány millisecundum alatt az orvos már tudja is, hogy mit szeretnél, még úgyis, hogy ki sem mondtad a felírandó gyógyszer nevét.

Nap, mint nap használjuk ezt a fogalmat mind szóban, mind a gyakorlatban, de nagyon sokunk számára ez egy kézzel foghatatlan, fekete képernyőn szaladgáló zöld betűs misztikumot jelent. Pedig ez korántsem az. Nemsokára mutatok is rá példát.

Miért szükséges fejlesztőként ismernünk az adatbázis alapfogalmait?

Azért, mert a programkód, amit fejlesztünk ehhez a bizonyos rendszerhez fordul minden áldott alkalommal, amikor valamilyen adatmanipulációs művelet történik. De hogyan is mondhatnánk el az adatbázis fejlesztőnek, hogy milyen problémát oldjon meg, ha nem tudjuk kifejezni magunkat röviden, tömören, célravezetően.

Egyáltalán nincs rá garancia, hogy minden esetben, amikor adatbázissal kapcsolatos műveletvégzésre van szükséges, olyankor mindig lesz melletted egy DB szaki, aki segít megoldani a problémát. Gondolj egy olyan hobbiprojektedre, amit otthon egy lesötétített szobában fejlesztessz a fekete hátterű IDE – ben. Olyankor bizony neked kell kialakítanod az adatbázis felépítését, neked kell végrehajtanod a programkódon keresztül a szükséges adatmanipulációs műveleteket (létrehozás, módosítás, törlés).

Tehát fontos, hogy legyenek adatbázis kezelési (alap)ismereteid, de ahhoz, hogy jó programozó legyen belőled, egyáltalán nem szükséges adatbázis adminisztrátori tudással rendelkezned. De mik ezek a tipikus alapismeretek, amiket mindenképp érdemes tudnod, nézzük meg néhány pontban:

  • adatbázis tervezési ismeretek: adatmodell diagramok készítése, táblák és kapcsolataik kialakítása, indexelés
  • adatbázis kezelési ismeretek: adatok tárolása, módosítása, törlése és lekérdezése, vagy mondhatnám, hogy az SQL nyelv alaputasításainak ismerete

Van néhány olyan alapfogalom, amit mindenképp érdemes ismerned, hogy eligazodj a témában.

Adatbázis alapfogalmak

SQL: Structured Query Language, azaz struktúrált lekérdező nyelv. Igen, talán már mondhatjuk, hogy programozási nyelvként is tekinthetünk az SQL-re (pl.: MySQL, PostgreSQL), ugyanis képes változókat kezelni, vezérlési szerkezetekkel manipulálni, tulajdonképpen minden alapjellemzővel rendelkezik, amivel valamely népszerű programozási nyelv is (pl.: Java, PHP). Az SQL az a nyelv, amin keresztül az adatbázis rendszernek utasítást adhatsz egy művelet végrehajtására.

Adatbázis rendszer: Ez az a program, motor, ami feldolgozza az SQL utasításokat. Ez lehet Oracle, MySQL, PostgreSQL, Mongo, Cassandra, stb…, de akár egy sima Excel tábla is tekinthető adatbázis rendszernek.

Adatbázis kezelő rendszer: Ez az a kliens program, amin keresztül kiadjuk az SQL utasítást az adatbázis rendszernek. Ez lehet egy általad írt alkalmazás, de ma már elég sok adatbázis kezelő rendszer létezik a végtelen számosságú adatbázis rendszerek kényelmes használatára, pl.: MySQL Workbench, Navicat, DBeaver, PhpMyAdmin, Microsoft SQL Server Management Studio (MSSMS), Microsoft Access, de akár egy sima Excel program is tekinthető adatbázis kezelő rendszernek.

Relációs adatbázis: olyan komponensek (entitások) összessége, mely komponensek között valamilyen véges számosságú kapcsolat (reláció) fedezhető fel. Ez a gyakorlatban általában adatbázis táblákat jelent, melyek között a kapcsolatot kulcs – idegen kulcs párosok írják le.

Igen, szinte 100%-ban biztos, hogy bármilyen programozási nyelvet fogsz tanulni, az SQL nyelv alapjait el kell sajátítanod. A jó hír viszont az, hogy kb. 1 hét alatt az SQL nyelv alapjai olyan szinten elsajátítható, amivel már kisebb-nagyobb tanulóprojekteket is el tudsz készíteni.

MySQL adatbázis példa egy teszt webáruházon keresztül bemutatva

Példa adatbázis a relációk és táblák szemléltetésére

Példánkban látható, hogy:

  • az adatbázis rendszer: MySQL
  • az adatbázis kezelő rendszer: DBeaver
  • adatbázis neve: rest_api_kit
  • táblák neve: orders, orderitems, products
  • a táblák közti szaggatott vonal pedig a táblák közti relációkat, a kapcsolatot jelentik

Ez egy nagyon minimális logika egy webáruház rendszer rendeléseinek feldolgozására. Nézzük meg, hogy egy konkrét példarendelés adatai hogyan néznek ki ebben a rendszerben, hogyan jelenik meg az adat. A vevő név és e-mail adatokat részben kitakarjuk, de minden adat véletlenszerűen generált adat, így semmilyen adatbiztonsági kockázat nincs az adatbázis tábla részlet publikálásában.

Adatbázis tartalom részlet véletlenszerűen generált adatokkal

Látható, hogy egy teljesen feldolgozható adathalmaz áll előttünk. A programozás során azt kell megoldanunk a megfelelő utasításkészletekkel, hogy az itt szereplő adatok például a profilunkon keresztül, fiókunkba bejelentkezve egy böngészőből elérhetőek legyenek. Ugyebár az teljesen érthető, hogy nem várhatjuk el az emberektől, hogy adatbázis kezelő programon keresztül kérdezzék le a számukra szükséges információkat.

Haladóbb technikák az adatbázisok témakörben

Ugyan kivétel nélkül minden programozónak illik ismernie a relációs DB kezelés alapjait, de fontos megemlíteni, hogy a nagyterhelésű rendszereknél a NoSQL, illetve Key-Value DB rendszerek jellemzőek. Sőt olyan is lehetséges, hogy egy alkalmazás bizonyos komponense relációs megoldást használ, egy másik komponense pedig pl.: NoSQL alapú megoldást használ.

Elég sokféle adatbázis rendszer létezik, de elsőként talán mindenképp a relációs irányzattal érdemes kezdeni tanulmányainkat, aztán haladni a bonyolultabb megoldások felé.

ACID elvek az adatbázis kezelésben

Az ACID elvek négy tulajdonságot foglal magába, amikkel ha rendelkezik egy adatbázis rendszer, akkor kijelenthető, hogy az adatbázis rendszer képes a tranzakciókezelésre.

Ezek az elvek a következők:

  • Atomiság
  • Konzisztencia
  • Izoláció
  • Tartósság

Atomiság

Az adatbázis tranzakciók kisebb részegységekre bonthatók, úgymond atomokra. Az atomiság tulajdonképpen a teljes tranzakció atomi összetevőinek integritására vonatkozik, nem pedig külön – külön a tranzakció összetevőire.

Ez a gyakorlatban azt jelenti, hogy ha egy összetett adatbázis tranzakció bármely összetevője (atomja) nem az elvárásoknak megfelelően működik, akkor a tranzakció nem megy végbe.

Konzisztencia

Ez adatbázisnak mindig konzisztensnek kell lennie, azaz a benne lévő adatok követnek valamilyen szabályszerűséget. Ebből az következik, hogy az adatbázisba kizárólag olyan adatok írhatók, melyek követik az előírt szabályokat.

Előfordulhatnak olyan esetek, amikor az adatbázisba írandó adatok nem teljesítik a meghatározott szabályokat. Ilyenkor az adatbázis kezelő rendszer automatikusan visszagörgeti az adatbázist olyan állapotba, amikor még minden konzisztens volt (azaz rollback – eli a tranzakciót).

Így ha egy tranzakció sikeresen le tud futni, akkor biztosak lehetünk benne, hogy az adatbázisba bekerült adatok konzisztensek és megfelelnek a korábban definiált szabályoknak.

Izoláció

Az adatbázisok esetében az izoláció azt jelenti, hogy egy időben egyszerre több tranzakció feldolgozását biztosítja az adatbázis, de ezt úgy teszi, hogy a tranzakciók nincsenek egymásra hatással.

Példa: Tegyük fel, hogy egy webáruházban 2 db cipőt szeretnél venni. Egy másik vevő pedig ugyanabból, amiből te 3 db-ot, de összesen csak 4 db cipő van készleten. Aki „atomi” szinten először kattintott, először annak a tranzakciója fut le, majd ezt követi a másik vásárló tranzakciója, azaz elkülönülten egymásra hatás nélkül futnak a tranzakciók.

Tehát ha te előbb kattintottál, akkor meg tudod venni a 2db – ot, de ha a másik vevő volt gyorsabb, akkor te már csak 1 db-ot fogsz tudni megvenni.

Tartósság

Az adatbázisok esetén az adatok tartóssága alapfeltétel. Tegyük fel, hogy vásárolsz valamit egy webáruházban. Megtörténik a vásárlás, majd valamilyen rendszerhiba következtében eltűnik a vásárlásod. Ez megengedhetetlen, ezért az adatokról biztonsági mentés is készül, illetve az adatok lementése akkor is meg kell, hogy történjen, ha esetleg áramszünet van.