==== 1. Adatbáziskezelés alapjai ==== === 1.1. Adatbázis === Ahhoz hogy az adatokat egy számítógépes rendszerben tárolni tudjuk, valamilyen struktúrába kell őket szervezni. Ezt általában a köztük lévő logikai összefüggések alapján szoktuk megtenni. Az integrált, logikailag összetartozó, hosszú ideig tárolt adatok (információ) összességét **adatbázisnak (AB) ** nevezzük. **Adatbázis-rendszerek** magába foglalják az adatbázisokat, a hozzájuk kapcsolódó számítógépes erőforrásokat, s tágabb értelemben az adatbázisok tervezését, kezelését végző személyeket is. Ez utóbbiakat nevezzük **adatbázis adminisztrátoroknak. ** Minden adatbázisnak van egy belső struktúrája: **sémája**. A séma tartalmazza az összes adatelemeket és a köztük lévő kapcsolatok definícióját, leírását. Az adatbázisnak az egyes felhasználók szempontjából tekintett sémáját **alsémának** nevezzük. //Az alséma a séma részhalmaza.// **Példa** Egy vállalat dolgozóinak adatait nyilvántartó program adatbázisának része lehet: ^ A dolgozó törzsszáma^ A dolgozó neve^ A dolgozó születési helye ^ A dolgozó születési ideje ^ |T234578 |Kiss István |Eger |1968.12.11.| |T456734 |Nagy József |Budapest |1972.01.30.| |T429877 |Kovács János|Szeged |1967.05.12.| === 1.2 Adatredundancia === Adatredundancián azt értjük, ha egy adatot egynél több helyen tárolunk egy adatbázisban. Azt nehéz elkerülni, hogy redundancia egyáltalán ne forduljon elő, azonban a többszörös előfordulások minimálisra csökkentése minden esetben fontos cél. Például, ha egy adat több helyen szerepel, és azt módosítjuk, akkor az összes előfordulást módosítani kell. A redundancia kiküszöbölésének szokásos módszere, hogy az adatbázis tervezése során az ismétlődő adatokat „kiemeljük”, külön tároljuk, a megfelelő helyen hivatkozva rá. **Példa** ^A kifizetés dátuma^Kifizetett bér^Levont adóelőleg^Hivatkozás a dolgozóra^ ^A dolgozó törzsszáma^A dolgozó neve^A dolgozó születési helye^A dolgozó születési ideje^ ===1.3. Adatbázis-kezelő rendszerek=== Az AB kezelésére speciálisan erre a célra kifejlesztett programok léteznek, az **Adatbázis-kezelő rendszerek (ABKR)**. Az ABKR nem felhasználói programnak tekinthető, mivel fő feladatai nem egyedi felhasználói igényeket elégítsenek ki. Ez utóbbiak megvalósításához külön alkalmazásokat szoktak fejleszteni, az ABKR által nyújtott eszközöket felhasználva. Egy ABKR általában a következő feladatokat látja el: * Támogatja új adatbázisok létrehozását, azok struktúrájának, tárolási módjának kialakítását. * Megvalósítja az adatbázisban tárolt adatok kezelését, karbantartását. Ennek keretében új adatok tárolhatók, a tárolt adatok módosíthatók, törölhetők. * Lehetővé teszi a tárolt adatok feldolgozását, lekérdezését. Ennek keretében új információkat képes előállítani, illetve a meglévő információknak a felhasználók által igényelt formában történő megjelenítését támogatja. * Lehetővé teszi az adatbázisok megosztását több felhasználó között. * Garantálja az adatok biztonságát, konzisztenciáját, a hozzáférések szabályozását, vagyis hogy a felhasználói műveleteket csak arra jogosult személyek végezhessék, és ezek a műveletek ne veszélyeztessék az adatok integritását. ===1.4. Az ANSI/SPARC modell=== Láthatjuk, hogy az ABKR összeköttetést jelent a felhasználó és a számítógépes háttértárolón fizikailag tárolt adatok között. Az **ANSI (American National Standards Institute= Amerikai Szabványügyi Hivatal)** //Szabvány Tervezési és Követelmények Bizottsága// (SPARC=Standards Planning And Requirements Committe) ezt az összeköttetést a következő három szintre osztotta fel: * külső * koncepcionális * belső. A //külső szint// a felhasználó szemszögéből vizsgálja az adatokat. Az adatbázis tartalma ezen a szinten jelentések, űrlapok, vagy más dokumentumok formájában jelenik meg. Az adatok azon nézetét, ahogyan a különböző felhasználók látják azokat //felhasználói nézetnek (user view)// nevezik. A középső szinten a// koncepcionális szint//. Ez a szint magában foglalja az összes felhasználói nézetet, így tartalmazza mindazokat az adatokat, amelyre valamely felhasználónak szüksége lehet. Ezen a szinten az adatbázist az úgynevezett logikai sémával szokták megadni. A harmadik szint a //belső szint//. Az adatoknak a számítógépes rendszerben való aktuális reprezentációját jelenti. Ezt fizikai szintnek is nevezik, az adatok reprezentációját pedig fizikai sémának. ===1.5 Adatfüggetlenség=== ** Adatfüggetlenség** – a táblák logikai és fizikai szerkezetének megváltoztatásának olyan végzése, hogy a táblát feldolgozó alkalmazást ne kelljen módosítani. **Fizikai adatfüggetlenség** – azt jelenti, hogy a fizikai sémának a változása nincs hatással a felette lévő szintekre. Így a belső szinten történő változások végrehajthatók anélkül, hogy módosítani kellene a logikai sémát. **Logikai adatfüggetlenség.** A felhasználó hozzáadhat új nézetet a rendszerhez anélkül, hogy ez változtatást igényelne a logikai sémában. ===1.6. Adatbázis-műveletek=== Azt a nyelvet, amelynek segítségével az adatbázis adminisztrátorok az új adatbázisok sémáját definiálhatják, **adatdefiníciós nyelvnek (DDL=Data Definition Language)** nevezzük. Műveletek az adatokkal az **adatmanipulációs nyelvnek (DML=Data Manipulation Language)** parancsai (utasításai) által történik. A **lekérdező nyelvnek (QL=Query Language)** általában kevésbé bonyolultak, mint egy általános célú programozási nyelv. Legtöbb esetben nem tartalmaznak vezérlő utasításokat és adatszerkezetek kezelését sem támogatják. Az utasítások csupán az adatbázisban tárolt adatok manipulálását, hozzáférését szolgálják. A legfontosabb művelet, amit egy ABKR az adatmanipulációk során használ az a //keresés.// Az egyik leggyakrabban alkalmazott, keresést támogató adatstruktúra a //B-fa.// Nevében a B betű a kiegyensúlyozott (balanced) szó angol megfelelőjére utal. Így a kereséshez minimális művelet szükséges. Az adatbázisokban a gyors keresést az **indexek** támogatják. Az adatbázis sémájánál meg kell adni, hogy mely mezők alapján kívánunk indexeket készíteni. Az index arra szolgál, hogy a keresési és rendezési műveleteket gyorsabbá tegye. De a beszúrás, törlés, módosítás műveleteknél inkább lassító hatása van, mivel ezeknél az index adatstruktúrát is aktualizálni kell. Használata olyan adatbázisoknál előnyös, amelyeknél kevés módosítás történik, viszont gyakran kell adatokat keresni. A korszerű ABKR-ek lehetőséget biztosítanak felhasználói felületek tervezésére és kivitelezésére. ** Képernyőtervező (screen generator).** Segítségével a felhasználó, vagy a programozó különböző űrlapokat, vagy beviteli képernyőket tervezhet és állíthat elő, melyekkel az adatbázis adatait lehet bővíteni, módosítani, törölni. **Jelentéstervező (report generator)** Az ABKR-ek rendelkeznek olyan modullal, amelynek segítségével nyomtatott jelentések tervezhetők. A jelentéstervezők speciális parancsokkal rendelkeznek, amelyekkel címeket, fejléceket, sorokat, oszlopokat, összegeket és más, jelentésben gyakran előforduló elemeket alakíthatunk ki. ABKR, amelyek segítségével gyorsan és kényelmesen fejleszthetünk adatbázis-alkalmazásokat //4GL (negyedik generációs nyelv)// rendszereknek hívjuk. A 4GL rendelkezik képernyőtervezővel, amivel az adatkarbantartás könnyen végezhető, rendelkezik jelentéstervezővel, amivel program készítése nélkül gyorsan lehet listákat készíteni. ===1.7. Adatintegritás=== **Adatintegritás** azt jelenti, hogy az adatok az adatbázisban mindig //korrekt, konzisztens és aktuális állapotban// legyenek. **Konzisztencia** – azt jelenti, hogy az AB-ban az összetartozó adatok módosítása együtt, a megfelelő sorrendben történjen. Ha vannak redundáns adatok, akkor azoknak nem szabad egymással ellentmondásban lenni. **Olvasási konzisztencia** – garantálja, hogy ha egy //tranzakció// (parancs) indulásakor az adatok nem ellentmondásosak, akkor azok a tranzakció (parancs) végén is ellentmondásmentesek maradnak. Legtöbbször már a séma definiálásakor megadhatók kritériumok, feltételek az egyes adatok tartalmára és formátumára vonatkozóan. Az adat bevitelekor az ABKR ellenőrzi, hogy az aktuális adat teljesíti-e ezeket a követelményeket. Amennyiben nem, az adatot nem fogadja el. Az adatbázisban a tényleges adatok mellett tárolódnak azok összefüggéseit, kapcsolatait is. **Hivatkozási integritás.** A hivatkozási integritás azt jelenti, hogy egy kapcsolatnál a hivatkozott adatnak létezni kell. A korszerű ABKR az adatmanipulációk során ellenőrzi, hogy a művelet nem sérti-e a hivatkozási integritást. Az adatok helyessége nemcsak az ABKR felelőssége, az alkalmazás fejlesztőjének is igyekeznie kell úgy megterveznie az adatbázist, hogy abban a lehető legkevesebb lehetőség legyen arra, hogy az adatok valamilyen szempontból helytelenek legyenek. Például tegyük fel, hogy egy alkalmazás adatbázisában magyarországi városok szerepelnek. Megtervezhetjük úgy az adatkarbantartást, hogy a felhasználónak kell mindig begépelnie a megfelelő város nevét. Ez azonban sok hibalehetőséget rejt magában. Az adatot felvivő személy hibát véthet a gépelés során, illetve előfordulhat – különösen hosszabb nevű városok esetén – hogy egyik alkalommal rövidített, más alkalommal teljes formában gépeli be az adatot. A számítógép számára azonban a különbözőképpen írt nevek különböző várost jelölnek. Ez problémákat okozhat abban az esetben, ha például városok szerint kell összesíteni, vagy rendezni adatokat. Megteheti azonban az alkalmazás fejlesztője, hogy már a fejlesztés során összegyűjti a lehetséges városok neveit, s azokat eltárolja az adatbázisban. Az adatbevitelkor, pedig csak választani kell közülük. Ezáltal a hibázás lehetősége jelentősen csökken. ===1.8. Adatvédelem=== Védelem az illegális hozzáféréssel szemben. Az adatokban bekövetkező hibák, sérülések kivédése, megakadályozása. Egy jó ABKR-nek gondoskodnia kell arról, hogy lehetőség legyen az adatok védelmére. Ha ezt nem lehetne megvalósítani, nagy bizalmatlanságot keltene a felhasználóban, és jelentősen korlátozná az adatbázis-alkalmazások elterjedését. A második problémát az adatbázisban bekövetkező esetleges sérülések jelentik. Ez több okból történhet. Előfordulhat hardware meghibásodás, de a szoftverekben is bekövetkezhet olyan hiba, amely az adatok károsodását eredményezheti. Akár egy-egy rendkívüli esemény, (egy áramszünet) is okozhat ilyen problémát. Az adatbiztonság megőrzésének egyik lehetséges technikája a **tranzakció vezérlés**. Ez azt jelenti, hogy a kritikus módosítások végrehajtása az adatbázisban nem közvetlen módon történik, hanem a műveletek során regisztrálásra kerül. Amikor a teljes művelet sikeresen befejeződik, csak akkor történnek meg a tényleges módosítások. Másik fontos technikája az adatvédelemnek a **biztonsági másolatok (backup copy)** készítése. Ezeket bizonyos időszakonként kell elkészíteni. A köztes időszakokban történő változtatásokat a tranzakció vezérléshez hasonlóan külön nyilvántarthatja az ABKR. A biztonsági másolatokra alkalmazva a nyilvántartásban szereplő módosításokat mindig helyreállítható az aktuális állapot, amennyiben meghibásodás történik. ===1.9. Adatbázisok megosztása=== Sok esetben fordul elő, hogy több felhasználó szeretne dolgozni ugyanazon az adatbázison. Ez történhet egyidejűleg, vagy különböző időpontokban is. Az egyidejűleg történő hozzáférés esetében az ABKR-nek biztosítani kell az adatbázis megosztását a felhasználók között, valamint ügyelnie kell arra, hogy a közös használatból adódó speciális helyzet ellenére az adatbázis konzisztens maradjon. Ez adott esetben nem olyan egyszerű feladat. **Példa** Tegyük fel, hogy egy bérszámfejtő rendszerben ketten dolgoznak. Az egyik felhasználó a fizetésemeléseket rögzíti, a másik felhasználó pedig éppen egy olyan alkalmazást futtat, ami újraszámolja az adókat. Feltételezzük, hogy a második program kiolvassa a régi fizetést egy adott személy esetén az adatbázisból, s miközben az adószámítási eljárás fut, az első program módosítja a fizetést és az adót is. A második eljárás azonban erről mit sem tud, tehát amikor kész van, visszaírja az adatbázisba az adót. Ez azonban még a régi fizetés adója, ami kevesebb, mint a tényleges adó. **Kizárólagos joggal való megnyitás** Több-felhasználós környezetben ez elterjedt megoldás. A kizárólagos jog vonatkozhat nagyobb egységekre (például egy táblára), ami akadályozhatja a feldolgozást, vagy kisebb egységekre (rekordokra). Ha több személy dolgozik egy rendszerben, célszerű azokat csoportokba sorolni. Az egyes csoportok különböző jogosultságokat kaphatnak az adatbázis egyes részeihez való hozzáféréshez.