NYME Informatika Intézet Számítógépes alkalmazások 5. előadás
Adatbázis-kezelő rendszerek
Tartalom Adatbázis fogalma Adatbázis-kezelő rendszerekkel szembeni elvárások Repülőgép helyfoglalás Banki rendszerek Vállalati nyilvántartások Relációs adatbázisok – számlák példa Adatbázis-kezelő rendszerek felépítése Adatok, metaadatok, indexek A tárkezelő feladata A lekérdezés-feldolgozó feladata A tranzakció-kezelő feladata Adatbázis-tervezés Adatbázis-programozás Adatbázis-megvalósítás Az ACCESS adatbázis objektumai ACCESS definíciók ACCESS lekérdezés típusok
Adatbázis Mi egy adatbázis? A valós világ egy meghatározott részének leírásá-hoz használt, adott formátumú és rendszer szerint tárolt adatok (adatelemek) együttese. Olyan adatok együttese, amit egy adatbázis-kezelő rendszer kezel (tárol, lekérdez, módosít)
Adatbázis-kezelő rendszerekkel szembeni elvárások Tegye lehetővé új adatbázisok létrehozását, az adat-bázis logikai struktúrájának (sémájának) egy speci-ális nyelven (adatdefiníciós nyelv) való megadását. Biztosítsa, hogy a felhasználók az adatokat egy meg-felelő nyelv (adatmanipulációs nyelv, lekérdező nyelv) segítségével lekérdezhessék, módosíthassák.
Adatbázis-kezelő rendszerekkel szembeni elvárások Támogassa nagyon nagy mennyiségű adat hosszú időn keresztül történő tárolását. Garantálja az adatok biztonságát a meghibásodá-sokkal és az illetéktelen felhasználókkal szemben. Tegye lehetővé a hatékony adathozzáférést a le-kérdezések és módosítások számára.
Adatbázis-kezelő rendszerekkel szembeni elvárások Támogassa több felhasználó egyidejű munkáját. Figyelje a több felhasználó által egy időben törté-nő adathozzáféréseket úgy, hogy azok ne vezes-senek az adatok hibássá vagy következetlenné válásához.
Első adatbázis-kezelő rendszerek 60-as évek végén jelentek meg. Nem támogattak semmilyen magas szintű lekérde-ző nyelvet. Első jelentős alkalmazási területek azok a rendsze-rek voltak, amelyekben sok kis adatelem szerepelt és a rendszerben sok lekérdezés és módosítás volt.
Repülőgép helyfoglalás Adatelemek: Egy vevő helyfoglalása egy adott járatra (ülőhely, választott menü). Járatokra vonatkozó információ (indulás, érkezés, honnan, hová, repülőgép). Jegyárak, előjegyzések, még kapható jegyek.
Repülőgép helyfoglalás Lekérdezések: Egy adott városból egy másikba mely járatok indul-nak egy hozzávetőlegesen megadott időpontban. Mely ülőhelyek szabadok. Mennyi egy jegy ára.
Repülőgép helyfoglalás Adatmódosítások: Egy vevő helyfoglalása egy adott járatra. Egy ülőhely kiadása. Egy menüválasztás bejegyzése.
Banki rendszerek Adatelemek: Ügyfelek nevei és címei. Folyószámlák és hitelszámlák egyenlegei. Az ügyfelek és a számlák között fennálló kapcso-latok (pl. kinek melyik számla felett van aláírási joga).
Banki rendszerek Lekérdezések: Egy adott számla egyenlege. Adatmódosítások: Egy adott számlára vonatkozó befizetés vagy ki-fizetés.
Vállalati nyilvántartások Adatelemek: Eladásokra vonatkozóak. Kimenő és bejövő számlákra vonatkozóak. Dolgozókra vonatkozóak (név, cím, fizetés, nye-reség-részesedés).
Vállalati nyilvántartások Lekérdezések (jelentések): Kinnlevő számlák. Dolgozók havi fizetése. Adatmódosítások: Minden egyes eladás, vásárlás, számlakibocsátás, számlakifizetés. Dolgozók felvétele, elbocsátása, előléptetése.
Adatbázis-kezelő rendszerek Kezdetben egyedi programok készültek az egyes válla-latoknál a különböző adatok nyilvántartására. A tömeges alkalmazási igény kikényszerítette az adat-formátumok szabványosítását, és általános célú adatbá-ziskezelő szoftverek kifejlesztését.
Relációs adatbázis-kezelők E. F. Codd: A relational model of data for large shared data banks. Communications of the ACM, 13 (1970), 377-387. Az adatokat a felhasználók felé táblázat (reláció) for-májában jelenítjük meg (a háttérben persze bonyolult struktúrák is lehetnek). A lekérdezések magas szintű nyelv segítségével való-sulnak meg, amely jelentősen növeli az adatbázis programozók hatékonyságát.
Relációs adatbázisok Számlák Számlaszám Egyenleg Típus 12345 1000,00 betétszámla 67890 2849,92 folyószámla …
Relációs adatbázisok Számlák nevű reláció Lekérdezés (SQL): Attribútumok (oszlopok, mezők): számlaszám, egyenleg, típus Lekérdezés (SQL): SELECT egyenleg FROM Számlák WHERE számlaszám = 67890;
Relációs adatbázisok Vizsgáld meg a FROM után szereplő reláció min-den sorát. Válaszd ki azokat a sorokat, amelyek a WHERE után megfogalmazott követelményeknek eleget tesznek. Add meg eredményként ezeknek a soroknak a SELECT után megadott attribútumait.
Relációs adatbázisok Még egy lekérdezés (SQL): SELECT számlaszám FROM Számlák WHERE típus='betétszámla' AND egyenleg < 0;
Relációs adatbázisok A gyakorlatban a rendszernek optimalizálnia kell a lekérdezést: hatékony végrehajtási módot kell találni még akkor is, ha a lekérdezésben szereplő relációk nagyon nagyok. Az IBM volt az első olyan cég, amely relációs adat-báziskezelő rendszereket árusított. Ma is a relációs adatbázis-kezelő rendszerek a legel-terjedtebbek a piacon.
Adatbázis-kezelő rendszerek felépítése sémamódosítások lekérdezések módosítások „Lekérdezés”- feldolgozó Tranzakció- kezelő Tárkezelő Adatok, metaadatok
Adatok, metaadatok Az ábra alján az adatok tárolására szolgáló hely látható. Ez a rész nem csak adatokat, hanem metaadatokat is tar-talmaz, ami az adatok szerkezetét írja le (relációs adat-báziskezelő esetén a relációk nevei, attribútumok nevei, attribútumok típusai).
Indexek Az adatbázis-kezelő rendszerek gyakran indexeket hasz-nálnak az adatok elérésére. Az index olyan adatstruktúra, amely lehetővé teszi, hogy az adatelemeket gyorsan megtaláljuk, ha ismerjük a hoz-zá tartozó értékek bizonyos részét.
Indexek A leggyakrabban előforduló példa olyan index, ame-lyiknek a segítségével egy reláció azon sorait keres-hetjük meg, amelyekben az egyik attribútum értéke adott. Az indexek a tárolt adatok közé tartoznak, viszont az, hogy mely attribútumokra léteznek indexek, a meta-adatok részét képezik.
Tárkezelő A tárkezelő feladata a kért információk beolvasása a tá-rolóhelyről, illetve az adatok módosítása, ha a felette ál-ló rendszerszintek ilyen irányú kérést fogalmaznak meg. Lehetne az operációs rendszer fájlkezelő része is, de a hatékonyság érdekében az adatbázis-kezelők általában közvetlenül felügyelik az adatok lemezen való tárolását.
Tárkezelő A tárkezelő két részből áll: Fájlkezelő: fájlok lemezen való elhelyezkedését tartja nyilván, az állomány blokkjait írja/olvassa ha a puffer-kezelő erre kéri. Pufferkezelő: a fájlkezelő segítségével adatblokkokat olvas be a lemezről és kiválaszt egy memóriaterületet, ahol az adott blokkot tárolni fogja; Egy lemezblokkot a memóriában tarthat egy ideig, de ha a blokk által foglalt memóriára egy másik blokknak van szüksége, akkor a blokkot visszaírja a lemezre.
Lekérdezés-feldolgozó A lekérdezés-feldolgozónak nevezett egység feladata, hogy a lekérdezéseket, illetve egyéb adatbázis-műveleteket (adatok és metaadatok módosítása), amelyek gyakran egy magas szintű nyelven vannak megfogalmazva, egyszerű utasítások sorozatává alakítsa. Gyakran a lekérdezés-feldolgozás legnehezebb része a le-kérdezés optimalizálása, vagyis egy megfelelő végrehajtási terv kiválasztása.
Példa Tegyük fel, hogy egy bank adatbázisában a követke-ző két reláció található: Az ÜGYFELEK reláció tárolja az egyes ügyfelek ne-vét, címét és személyi azonosítóját. A SZÁMLÁK reláció tárolja az egyes számlák szám-laszámát, egyenlegét és a számla tulajdonosának sze-mélyi azonosítóját (feltesszük, hogy minden számlá-nak csak egy tulajdonosa van).
Példa A következő kérdésre szeretnénk választ kapni: Adjuk meg az összes számla egyenlegét, amelynek tulajdonosa Kovács István. Egy meglehetősen költséges terv a következő: Nézzük végig az ÜGYFELEK táblát, amíg meg nem találjuk Kovács Istvánt (remélhetőleg csak egy van), majd a SZÁMLÁK táblából gyűjtsük ki azokat a sorokat, amelyekben Kovács István személyi azonosítója szerepel.
Példa Ha az ÜGYFELEK táblához van indexünk az ügyfél nevére, akkor az első fázis gyorsan megy. Ha a SZÁMLÁK táblához is van indexünk, méghoz-zá a személyi azonosítóra, akkor a második fázis sem tart sokáig. Általában 8-10 lemezolvasásnál nincs többre szükség, ha mindkét index rendelkezésre áll, ellenkező esetben viszont több százezer lemezolvasásra is szükség lehet.
Lekérdezés-feldolgozó Bár ebből a példából úgy tűnhet, hogy egy lekérdezés optimalizálása mindössze annyiból áll, hogy használ-junk indexeket, ha léteznek, valójában a dolog ennél sokkal összetettebb. A bonyolult lekérdezések sokszor lehetővé teszik, hogy átrendezzük az elemi műveleteket, és így nagyon sok végrehajtási terv adódik.
Tranzakció-kezelő A tranzakció-kezelő rész felelős a rendszer sértetlen-ségéért. Ennek kell biztosítania, hogy az egy időben futó lekérdezések és módosítások ne ütközzenek össze egymással, és hogy a rendszer még rendszer-hiba esetén se veszíthessen adatokat.
Tranzakció-kezelő A tranzakció-kezelő kapcsolatot tart a lekérdezés-feldolgozóval, hiszen a konfliktusok elkerüléséhez tudni kell, hogy az aktuális lekérdezések éppen mely adato-kon dolgoznak, és épp a konfliktusok megakadályozá-sáért késleltethet bizonyos műveleteket (zárolás). Kapcsolatot tart a tárkezelővel is, mert az adatok védel-mére szolgáló módszerek többnyire magukban foglalják a módosítások naplózását.
Tranzakció-kezelő Az adatbázis-kezelők többnyire megengedik a felhasz-nálóknak, hogy egy vagy több lekérdezést vagy módo-sítást egy tranzakcióba csoportosítsanak. A tranzakció tulajdonképpen olyan műveletek egy cso-portja, amelyeket egymás után egy egységként kell vég-rehajtani. Az adatbázisrendszerek gyakran sok tranzakció egyide-jű végrehajtását engedik meg, ezek helyes lefutásának biztosítása is a tranzakció-kezelő feladata.
Tranzakciók A tranzakciók „helyes” lefutásával szembeni elvárá-sokat négy pontban szokták összefoglalni: Atomosság. Megköveteljük, hogy egy tranzakció vagy teljes egészében hajtódjon végre, vagy sem-mi ne hajtódjon végre belőle. Például az automatából történő pénzfelvétel és a hozzá kapcsolódó megterhelés az ügyfél számlá-ján egyetlen atomi tranzakciót kell, hogy alkosson.
Tranzakciók Következetesség. Egy adatbázisban akkor beszélhe-tünk a következetes állapot fogalmáról, amikor az adatok megfelelnek bizonyos elvárásoknak (feltételek-nek).
Tranzakciók Például egy repülőgép-helyfoglalási adatbázisban egy megfelelő következetességi feltétel, hogy egyetlen ü-lőhelyet se rendeljünk hozzá két különböző utashoz. Noha ezt a feltételt megsérthetjük a tranzakció alatt (pl. utasok átrendezése), a tranzakció-kezelőnek biz-tosítania kell, hogy a tranzakció befejezése után az adatbázis ismét következetes állapotba kerüljön.
Tranzakciók Elkülönítés. Amikor két vagy több tranzakció egyi-dejűleg fut, azok kihatását el kell különíteni egymás-tól. Ez azt jelenti, hogy semmiféle olyan eredményt vagy kihatást nem tapasztalhatunk az adatbázisban, amit a két tranzakció egyidejű futása okozott, és ami nem fordult volna elő, ha a két tranzakció egymás után fut le.
Tranzakciók Például ha két ügynök éppen ugyanarra a járatra ad el jegyet és a járaton már csak egy hely van, akkor az e-gyik kérést teljesíteni kell, a másikat pedig vissza kell utasítani. Tartósság. Ha egy tranzakció befejeződött, akkor an-nak eredménye nem veszhet el rendszerhiba esetén sem, még akkor sem, ha a rendszer közvetlenül a tranzakció befejezése után hibásodik meg.
Adatbázis-kezelő rendszerek Az ábra tetején három különböző fajta input látható: Lekérdezések (adatokra vonatkozóan): Egy általános lekérdező-interfészen keresztül. Például a rendszer megengedi SQL lekérdezé-sek begépelését. Egy alkalmazói program interfészén keresztül. Általában nem tehetünk fel akármilyen kérdést, de amit igen, azt általában egyszerűbben tehet-jük meg (mezők kitöltése ACCESS-ben).
Adatbázis-kezelő rendszerek Módosítások (adatokra vonatkozóan): hasonló, mint a lekérdezéseknél. Sémamódosítások: az ezekre vonatkozó utasításokat csak az arra illetékes személyek, az adatbázis admi-nisztrátorok adhatják ki.
Adatbázis-kezelő rendszerekkel kapcsolatos főbb tevékenységek Adatbázis-tervezés Hogyan alakítsunk ki egy jól használható adatbázist? Mely információk kerüljenek be az adatbázisba? Milyen legyen az adatok szerkezete? Milyen feltételezésekkel éljünk az adatelemek típusára és értékeire vonatkozóan? Hogyan kapcsolódjanak egymáshoz az adatelemek?
Adatbázis-kezelő rendszerekkel kapcsolatos főbb tevékenységek Adatbázis-programozás Hogyan fejezzük ki az adatbázisra vonatkozó lekérde-zéseket és egyéb műveleteket? Hogyan használjuk ki az adatbázis-kezelő rendszerek egyéb lehetőségeit, mint amilyenek a tranzakciók vagy a triggerek (ellenőrző procedurák)?
Adatbázis-kezelő rendszerekkel kapcsolatos főbb tevékenységek Adatbázis-megvalósítás Hogyan készítsünk el egy adatbázis-kezelő rendszert? Hogyan valósítsuk meg a lekérdezés-feldolgozót, a tranzakció-kezelőt? Hogyan szervezzük meg az adatok tárolását, hogy az adathozzáférés hatékony legyen?
Az ACCESS adatbázis objektumai TÁBLA: Az adatokat tárolja (reláció). LEKÉRDEZÉS: Szelektálja, rendezi, elemzi, módosítja az adatokat, új táblát hozhat létre. Jelentések, űrlapok alapját képezheti. ŰRLAP: Adatok bevitele, megjelenítése és módosítása rekordonként, diagram. JELENTÉS: Táblák és lekérdezések adatait összegzi elemzés, nyomtatás végett. MAKRÓ: Műveletsort tárol automatikus végrehajtáshoz. MODUL: ACCESS Basic programot tartalmaz.
Fogalom-definíciók REKORD: az adattábla egy sora (egy entitásra vonatkozó adatokkal) MEZŐ: az adattábla egy oszlopa (azonos típusú adatokkal - attributum) MEZŐNÉV: az adatoszlop elnevezése INDEX: olyan mező (oszlop), mely szerint a szűrést felgyorsítjuk KULCS: olyan indexelt mező, melyben nincs két agyforma érték
Fogalom-definíciók KIFEJEZÉS: képlet, mely az adattábla adataiból új információt vezet le KIFEJEZÉS-SZERKESZTŐ: olyan eszköz, mellyel egyszerűen hozhatók létre képletek SZÁMÍTOTT MEZŐ: az adattábla olyan oszlopa, melyet kifejezés állít elő. Ennek kiszámítása csak futtatással (jele „!”) lehetséges SZŰRÉS: rekordok (sorok) szelekciója, melynek logikáját a szűrési feltétel írja elő
Lekérdezés típusok Módosító: átírja az adattábla adatait Törlő: rekordokat (sorokat) töröl a táblából Választó: új táblát hoz létre levezetett adatokból Tábla-készítő: mint a választó, de az eredmény valódi tábla lesz Kereszttáblás: sor és oszlopfejléccel kombinált összesítő lekérdezés Hozzáfűző: egyik táblából másikba tehetünk át rekordokat