Az adatbáziskezelés alapfogalmai

Információ és adat fogalmai A számítástechnika fejlődésének egyik fontos jellemzője, hogy egyre több felhasználó egyre több, számítógépen tárolt adatot használ fel. Az egyre növekvő információmennyiség egyre szélesebb körben válik elérhetővé. Az információ-hozzáférés így jelentkező demokratizálódásának hatása teljes joggal mérhető a könyvnyomtatás jelentőségéhez, ezért szokás ezt a jelenséget elektronikus Gutenberg forradalomnak is nevezni. Az elektronikus Gutenberg forradalom legfontosabb jellemzője, hogy - egyre nagyobb információmennyiség - egyre szélesebb tömegek számára - egyre demokratikusabban válik elérhetővé - a számítógép használatával. Az elkészített és alkalmazott számítógépi programrendszereknek növekvő adatmennyiséggel kell megbírkózniuk. A hétköznapjainkban is egyre gyakrabban találkozhatunk a számítógépes információs rendszerek alkalmazásával. Számítógépes információs rendszer fut az üzemekben, gyárakban a termelés irányítására, a pénzügyi, személyzeti, raktári, anyaggazdálkodási feladatok elvégzésére. Néhány hasonló alkalmazási terület az élet szinte minden területéről megemlíthető: - kereskedelem: raktári készlet és megrendelések nyilvántartása, - kultúra, oktatás: könyvtári információs rendszerek, hallgatói adminisztráció - közigazgatás: adónyilvántartások - közlekedés: jegyhelyfoglalási rendszerek - egészségügy: beteg nyilvántartás - tudomány: szakadatbázisok - posta: ügyfelek, számlák nyilvántartása - vállalat: termelés irányítási rendszerek - mérnöki munka: tervezői rendszerek. A példákat még hosszan lehetne sorolni. A felsorolásban gyakran találkozhattunk két, egymással igen rokonértelmű szóval e rendszerek jellemzésében, az információ és az adat fogalmaival. Az információt és adatot gyakran használják azonos értelemben, pedig e két fogalom között létezik jelentésbeli különbség, melyre oda kell figyelni, s célszerű tudatosítani magunkban e fogalmak pontos jelentését. Az információt jelsorozathoz kapcsolódó új jelentésnek, hasznos közlésnek tekinthetjük. Az információ fogalma alapfogalomnak tekinthető, értelmezésére is igen sokféle megközelítés létezik, melyek közül az egyik az általunk előbb megadott értelmezés. Az információ egyik fontos eleme az újdonság. Információ lehet pl. egy újsághír a minket érintő törvényváltozásokról. Nagyon sokféle módon, sokféle információhoz jutunk nap mind nap. Az információhoz szorosan kapcsolódik a - hordozó közeg, jel (hanghullám, fény,..) - jelentés és a - feldolgozó (pl. én magam, aki értelmezem a megkapott jelet) Az információ tehát mindig szubjektív fogalom, függ a feldolgozótól. Az információt igen sok oldalról lehet vizsgálni és elemezni. Az infdormációnak van - statisztikai - szintaktikai - szemantikai - pragmatikai oldalai. A szematikai oldal az információt hordozó jelek előfordulási gyakoriságait vizsgálja. E terület elméletének kidolgozása Shannon nevéhez kötődik. Statisztikai értelmében egy jelsorozat információtartalma a jelsorozat előfordulási valószínűségének reciprokával arányos. Erre egy szemléletes példa, hogy az nem hír, ha egy kutya megharapja a postást, de az már hírnek számít, ha egy postás harapja meg a kutyát. A szintaktikai oldal a jelsorozatok formális azonosságait vizsgálja, mely alapján a 'Jani szereti a sört' mondat hasonló felépítésű a 'Jani szereti Marit' mondattal. Az adatok viszont a feldolgozás során nyernek értelmet, s ekkor már a két mondat egészen más hatást válthat ki. Az adatok ezen rejtett tartalma a szemantikai oldal, mely a jelsorozat mögött húzódó jelentést, lényeget hangsúlyozza. A pragmatika a jelentés gyakorlati hasznosságát emeli ki. Egy elméletileg hasznos információ nem alkalmazható, ha felhasználásához nagyon hosszú idő szükséges, vagy ha az elérhető haszon elhanyagolhatóan kicsi. Majd a későbbi modellezési fázisokban közvetlenebbül is tapasztalhatjuk a különböző oldalak fontosságát. Az információ fontosságát, lényegét mutatja, hogy az információ is a világegyetem alapfogalmai közé tartozik, hasonlóan az energia, anyag fogalmaihoz. E fogalmak egyenrangúságát mutatja a Maxwell démon gondolatkisérlete. Ebben szerepel egy súlyzó alakú gáztartály, melynek közepén van egy kis kapu, melyen át a gázmolekulák a két féltér között vándorolhatnak. A gázmolekulák dinamikus egyensúlyban vannak a két féltér között, egyenlő a nyomás a két oldalon. Ha egy kis démont képzelünk el a kapunál, mely nem engedi át a gyors részecskéket baloldalról a jobboldalra, és nem engedi át a lassú részecskéket a jobboldalról a baloldalra, az ablak mozgatásával, akkor a baloldal felmelegszik, a jobboldal lehűl. Ezáltal megnő a rendszer összenergiája. Az energianövekedést a démon a gázmolekulákra vonatkozó információ birtokában érhette el, az információ rovására. Tehát az információ átalakult energiává, ami az energia és az információ ekvivalenciáját szemlélteti. Az információknak a társadalomban betöltött szerepét mutatja, hogy az energia pénzt, hatalmat is jelent. A kellő időben megszerzett információ felhasználható előny szerzésére. Az információ elvesztése pedig ennek megfelelően hatalmas károkat okozhat. Az információ, mind szubjektív fogalom, szorosan kötődik hordozó közegéhez, mely már objektív jelenségnek tekinthető. Az információ hordozóját adatnak nevezzük, vagyis az adat a tények, fogalmak, feldolgozásra alkalmas reprezentációja. Az adat objektív, feldolgozótól független. A témánkból eredően, mi az adat fogalmát egy kicsit szűkebben, a számítógépen tárolt adatokra értelmezzük. Az adat számunkra a számítógépben tárolt jelsorozatot jelenti, melyből a feldolgozás során nyerhetünk információt. Az adat a számítógépben viszont még információ nélküli jelsorozatként tárolódik. Az információ feldolgozására készített számítógépes programok az adatokat különböző strukturáltságban kerülnek letárolásra. Az adatok lehetnek egy lazább szerkezetben, és egy szigorúbb, finomabb struktúrában letárolva. Ennek megfelelően beszélhetünk: - szövegszerű rendszerekről - adatszerű, finoman struktúrált rendszerekről. A szövegszerű tárolásnál a dokumentumok, könyvek, cikkek alkotják a legkissebb elérési egységet, s a dokumentum belső struktúra nélkül, ömlesztve tartalmazza az információt. Az adatszerű tárolásnál sokkal kisebb adatelemek, egyedek tulajdonságai is elérhetők és kezelhetők. Ekkor rákérdezhetünk pl. egy ember nevére, lakcímére, azaz minden egyedi tulajdonságára is. A feldolgozandó témáink az adatszerű, strukturált adattároláshoz fognak csatlakozni. Az információs rendszerek követelményei A bevezetőben is említett információs rendszerek egyik fontos jellemzője, hogy nagy adathalmazt kezelnek, s az adatok között is bonyolultabb kapcsolatok állhatnak fenn, s ezen adatokat, kapcsolatokat hosszabb időszakon át is meg kell őrizni. Ma már több tucat olyan információs rendszer létezik a világon, amlyek több terrabyte nagyságrendű adatot tartalmaz. Természtesen az információs rendszerek döntő többsége ettől jóval kisebb méretű. A Gartner Group elemzése alapján 1997-ben a 200-400 Gbyte-tól nagyobb méretű adatrendszereket tekintik nagyon nagy adatrendszereknek. E rendszereket a VLDB (Very Large Data Bases) rövidítéssel is szokták jelölni. A nagy és bonyolult adatrendszer mellett egy sor más egyedi sajátossággal, követelmény rendszerrel lrendelkeznek ezen információs rendszerek, melyeket a rendszer fejlesztői kénytelenek számításba venni, hogy jól működő, az igényeket kielégítő termékkel álljanak elő. A következőkben összefoglaljuk mindazon követelményeket, melyeket egy, a vállalat működése szempontjából fontos információs rendszernek feltétlenül teljesítenie kell. - Nagymennyiségű adatok hatékony kezelése. A felhasználónak elfogadható időn belül kell választ kapnia a feltett kérdéseire, a kiadott utasításoknak sem szabad szokatlanul sokáig tartaniuk. A hatékonyság tehát egyrészt jelent egyfajta időbeli hatékonyságot, másrészt az adatok helyszükségleteinek sem szabad feleslegesen megnőni, úgymond kerülni kell a felesleges redundanciát, azaz egyazon adatelem többszöri, felesleges megismétlését. Mind majd később látható a redundancia teljes megszűnése nem mindig kívánatos, más a helytakarékossággal szemben álló egyéb szempontok miatt, pl. a éppen az időbeli hatékonyság, vagy az adatbiztonság miatt. A fejlesztőnek meg kell találnia a hatékonyság különböző szempontjainak helyes súlyozását, optimalizálnia kell, hiszen ezek a szempontok gyakran egymással ellentétes lépéseket követelnek. - Konkurens hozzáférés támogatása. A nyilvántartó és információs rendszerek rendszerint nem személyi rendszerek, nem PC-n futnak. Természetes használati módjuk, hogy egyidejűleg több felhasználó is használja, dolgozik vele. Ez a lehetőség viszont különös elővigyázatosságot igényel, hiszen a párhuzamos változtatások, műveletek, ha nincsenek összehangolva, akkor torz eredményeket szülhetnek, egymás hatásait kiolthatják vagy elferdíthetik. Ennek egyik szemléletes példája, az ún. lost update jelensége, vagyis amikor az egyik alkalmazásban végrehajtott adatérték-módosítás hatását törli egy másik alkalmazásban elvégzett módosítás (1. ábra). Ekkor úgymond elveszik az első módosítás. Ez igen kényes hatással is járhat, ha mindez mondjuk egy bérügyi nyilvántartó rendszerben zajlik le, s az első alkalmazás a rendkívüli fizetésemelést, a másik meg a rendszeres fizetésemelést végzi el. Senki sem örülne az elveszett fizetésemelésnek. Az osztott erőforráshasználat problémája egyébként nemcsak itt keletkezik, hasonló nehézséggel találkozhattunk az operációs rendszerek területén is. Megoldásához nyilván kell tartani az elvégzett műveleteket, s gondoskodni kell a műveletek szabályozott sorrendben történő végrehajtásáról is.



Ábra 1. - Integritásőrzés. A modellezett, programba leképezett valóság mindig rendelkezik belső törvényszerűségekkel, egy ilyen szabály lehet pl. hogy minden embernek van születési ideje, vagy pl. az ember életkora nem lehet negatív. A letárolt adatok helyessége, integritása alatt azt értjük, hogy az adatok minden megadott belső szabálynak megfelelnek. Az előbbi példát véve ismét, nem fordulhat elő, hogy egy életkor -13 év legyen. Természetesen a szabályok a példánál megadottaknál sokkal bonyolultabbak is lehetnek, amikor adatok közötti kapcsolatokat is vizsgálni kell. Erre vehetjük példaként, hogy egy kereskedő csak akkor szállít, ha a kért áruból legalább egy x mennyiség a raktáron marad és a rendelő minden előző számláját már kiegyenlítette. Az integritás megőrzéséhez a rendszernek először is nyilván kell tartania a szabályokat valamilyen hatékonyan kezelhető formában, majd minden művelet alkalmával ellenőriznie kell, hogy a kapott adathalmaz megfelel-e a letárolt szabályoknak. Mindezt olyan hatékonysággal, hogy a végrehajtási idő még az elviselhetőség határán belül maradjon. - Védelem. A számítógépes információs vagy irányítási rendszereket a felhasználó a manuális tevékenységek kiváltására használja, hiszen ha mindent duplázva, kézzel és számítógéppel is végig kell vinni, akkor a munka hatékonysága nemhogy növekedne inkább csökken. Ez azt is jelenti, hogy a felhasználó rábízza magát, azaz összes adatát a számítógépes rendszerre vagyis a legtöbb adat csak ott tárolódik. A tárolt adatok elvesztése szinte pótolhatatlan veszteséget okozhatnak. Ezért a rendszernek fel kell készülnie, amennyire csak lehet a veszélyekre, mint az adathordozó megsérülése, az operációs rendszer vagy a program összeomlására. Az adatvesztés elkerülésének fontosságát, az elveszett adatok visszaszerzésére irányuló igényt jól mutatja a Kürt cég sikertörténete is, mely sérült adathordozók helyreállítására specializálódott. Az adatsérülés mellett a felhasználóra leselkedő másik veszélytipus, az adatok illetéktelen személyekhez történő kerülése. Bizonyára akadnak olyanok, akik nagyon kíváncsiak lennének egy gyár termelési adtaira, a technológiára, vagy éppen mások adataira, esetleg egy légvédelmi rendszer részleteire. A rendszernek tehát, ismét hasonlóan az operációs rendszerekhez, szabályoznia és ellenőriznie kell a hozzáféréseket, különbséget kell tennie az egyes felhasználók között a elvégezhető műveletek tekintetében. Ehhez a viszont nyilván kell tartani a jogosult felhasználókat, azok jogait és minden műveleti igény kiadásakor ellenőrizni kell, hogy elvégezhető-e a művelet. Ennek egyik ismert megoldása a hozzáférés monitoring rendszer, mely ellenőrzi és naplózza is az erőforrás-hozzáféréseket. A hozzáférési védelem egyik másik elterjedt módszere a titkosítás. A kódolandó adatokat áttranszformálják kódolt adatokra, ahol a kódolás folyamata rendszerint egy vagy több paramétertől is függ, ezeket szokás a kódolás kulcsainak is nevezni. - Hatékony programfejlesztés A rendszer kifejlesztési idejének lerövidítésére több oldalról is jelentkező nyomás hat. Egyrészt a szoftverpiacon folyó versenyben a rövidebb határidő előnyhöz juttathatja a versengőket, hiszen a felhasználó minél előbb szeretné kihasználni a rendszer által nyújtott előnyöket. Másrészről a gyorsaság bizonyos értelemben alapkövetelmény is, hiszen a rendszer mindig a valóság egy modelljének felel meg, s a modellezett valóság elég gyakran változik, pl. megváltoznak a szabályozók, a törvények. Egyik felhasználó sem kíván olyan rendszert megrendelni, mely használhatatlan lesz mire elkészül. A modellezett valóság változásai azonban előbb vagy utóbb mindenképpen kisebb vagy nagyobb mértékben bekövetkeznek. Viszont ezek a rendszerek már elég drágák ahhoz hogy minden kisebb változtatás után a felhasználó egy újabb rendszert rendeljen meg. A rendszernek tehát elég rugalmasnak kell lennie a kisebb változtatások elvégzésére. A rugalmasság és a gyorsaság igényei hatékony fejlesztő eszközök használatát teszik szükségessé a programfejlesztés során. A futtató környezetek sokfélesége felveti a szabványosság kérdését is. A szabványos eszközök használata ugyanis megkönnyíti az alkalmazások új platformra történő átültetését, és a fejlesztők egymás közötti kommunikációját, a fejlesztő rendszer elsajátítását is hatékonyabbá teszi. Az előzőekben felsorolt szempontok és problémák tükrében talán már érzékelhető, hogy nem kis feladat pl. egy jó nyilvántartó rendszert kifejleszteni. Ha a rendszer adatkezelő részét emeljük csak ki, akkor is hatalmas munka lenne az igényeket kielégítő alkalmazás kifejlesztése az eddigiekben megismert programfejlesztő rendszerekkel, mint pl. a C programozási nyelvvel. Vegyük egy kicsit részletesebben, miként is járhatnánk el az adatrendszer C nyelvvel történő kifejlesztésénél, ezzel egy rövid áttekintést adva az adatkezelés legfontosabb alapfogalmairól is. Áttekintés az adattárolás struktúrájáról Az alapvető tárolási mechanizmusok áttekintése során számos olyan fogalmat frissítünk fel, melyekre a későbbiekben, az adatbázisok tárgyalása során is szükség lesz. A felelevenítés mellett e áttekintés arra is rá kíván viágítani, hogy milyen összetett és aprólékos feladat az adatok hatékony tárolási mechanizmusának megvalósítása. Az adatkezelő rendszereknél a permanens adatok állnak az adatkezelés központjában, tehát azok az adatok, melyekre hosszú ideig, az alkalmazásból történő kilépés után is szükség van. A permanens adatok tárolására a háttértárolók szolgálnak, ahol az adatok file-okba szervezetten helyezkednek el. A nagy adatmennyiségből eredően minden pillanatban az adatoknak csak egy töredéke fér el fizikailag a központi memóriában. Ha a file-on belüli tárolás kérdését vizsgáljuk, akkor meg kell ismerni a lehetséges fileszervezési módszereket és azok hatékonyságait az olyan alapvető műveleteknél, mint az - adatelemek megkeresése, lekérdezése - adatelemek bővítése, módosítása, törlése - segédinformációk tárolása. A leggyakoribb művelet a felsoroltak közül a lekérdezés. Természetesen lehetnek olyan alkalmazások, ahol ez nem teljesül, mert pl. csak archiválni kell, és csak nagy ritkán van szükség visszakeresésre. Nézzük tehát milyen fizikai tárolási struktúrát válasszuk, ha a hatékony lekérdezésre koncentrálunk. A hatékonyságnövelési lehetőségek keresését valójában már az adathordozó szintjén el kell kezdeni, hiszen mágneslemezt véve, mint leggyakoribb adathordozót, az adatelem beolvasása a címének ismeretében három fő lépésből áll, melyek különböző időszükséglet rendelhető: - fejmozgatás: a fejet a lemez megfelelő sávjára, cilinderére kell mozgatni. - fejkiválasztás: lemezcsomag esetén a megfelelő lemez kijelölése - forgatás: az adott sávon belül a megfelelő szektor, blokk mozgatása a fej alá. Ebből a három elemből a fejmozgatás igényli a legtöbb időt, átlagosan a teljes idő mintegy 80 százalékát. A fejmozgatáshoz szükséges idő azonban lényegesen függ attól, hogy hol helyezkedik a sáv, mi volt az előzőleg felkeresett sáv. Minden sávváltás időszükséglettel jár, mégpedig minél nagyobb volt a távolság, annál több idő szükséges. Ebből két számunkra fontos megállapítás is levonható: - az egymásután, együtt olvasott adatokat célszerű ugyanazon vagy szomszédos sávokra elhelyezni - egy adatelemnek, más programok véletlenszerű sávpozícióit feltételezve, az optimális elhelyezkedése a középső sávokban található. Ha van befolyásunk az adatelemek elhelyezésére, akkor a fentiek figyelembe vételével kell dönteni. A következő lépcsőfok a megfelelő fileszervezés kiválasztása. A fileokon belül az adatok blokkokban tárolódnak, ahol egy blokk egy adatátviteli egységnek fogható fel, azaz egy írás vagy olvasás művelete minimum egy blokk adatmennyiséget mozgat az adathordozó és a központi egység között. A filehoz tartozó és egymás után következő blokkok nyilvántartására is több különböző módszer létezik: - blokkok láncolása, azaz minden blokkban van egy mutató a következő blokkra. Az első blokk címének ismeretében sorban felkereshető az összes többi blokk. - blokk címlista, azaz minden filehoz létezik egy lista, amely a hozzá tartozó blokkok címeit tartalmazza. Ez a lista lehet egyszerű, összefüggő, de lehet bonyolultabb felépítésű is. A blokkok a file-ok fizikai szerkezetét mutatják, de emellett a file egy belső logikai struktúrával is rendelkezik. A logikai fileszerkezet alapvetően lehet - stream jellegű vagy - rekord jellegű. A stream filetipusnál a file egy belső struktúra nélküli byte vagy karakter sorozatból áll. A karaktersorozatot a felhasználó programm értelmezi saját igénye szerint. Ugyanazt a filet a különböző programok másképp értelmezhetik. A rekord jellegű szerkezetnél feltesszük, hogy a file felbontható logikai részelemekre, úgynevezett rekordokra. A rekord egy logikailag összetartozó adatelemek, mezők összessége. Egy rekord jelentheti pl. egy alkalmazott összes adatát, és egy mező egy adatelem, mint pl. a név, beosztás vagy a fizetés. A rekord és a blokk viszonya alapján beszélhetünk - spanned rekordokról, amikor egy rekord több blokkra is kiterjedhet, és - unspanned rekordokról, amikor egy rekord csak egy blokkhoz tartozhat. A rekord jellegű állományokban a rekordok lehetnek - fix hosszúak, vagy - változó hosszúságú. Változó hosszúságú rekordok esetén a rekordok elhelyezkedését jelezheti - rekordvég karakter - mutató a következő rekord elejére - blokklista a rekordokra hivatkozó mutatókkal Ha az adatelemek gyors elérését kívánjuk elérni, akkor a belső struktúra nélküli stream filekezelés nem megfelelő, hiszen ebben az esetben csak a file soros átolvasásával találhatjuk meg a keresett elemet, ami azt is jelenti, hogy átlagosan a file felét át kell olvasni egy elem megtalálásához. A rekordjelllegű megközelítés esetében is megvalósítható ez a számunkra nem előnyös felépítés, ugyanis a rekordjellegű file szerkezeteknek az alábbi típusai ismertek: - soros elérés - szekvenciális elérés - indexelt elérés - random, hashing elérés. Az egyes elérési, szervezési módok közötti különbség megértéséhez szükség van egy újabb fogalom a rekordkulcs megismerésére. A rekord mint már említettük, egy egyed több tulajdonságát tartalmazhatja. Ezen tulajdonságok között vannak olyanok, melyek több egyednél is ugyanazt azt értéket vehetik fel. Az dolgozók adatait leíró rekordban például a születési hely, vagy a fizetés több dolgozónál, azaz több rekordban is lehet ugyanaz az érték. Vannak azonban olyan mezők, azaz az egyed olyan tulajdonságai, melyeknek egyedieknek kell lenniük. Ilyen tulajdonság lehet pl. a dolgozó törzsszáma, személyi száma. Az ilyen tulajdonságot, vagy tulajdonságcsoportot, mely egyedisége révén alkalmas az egyed, azaz a rekord egyértelmű azonosítására, rekordkulcsnak vagy röviden kulcsnak nevezzük. Az adatelemek keresésénél kiemelt fontosságúak lesznek azok az esetek, amikor a keresés a kulcsra vonatkozik, mivel ez a rekordok egy természetes keresési módját jelenti. Tehát nem a pozícó alapján keresünk, mint ahogy az a tömbök esetében megszokott volt. Ez alapján az egyes fileszervezési módok az alábbiakban foglalhatók össze: - Soros elérés. A rekordok a fileban tetszőleges sorrendben, pl. a felvitel sorrendjében helyezkednek el, azaz nincs kapcsolat a rekord kulcsértéke és a rekord file-on belüli pozíciója között. Mivel ekkor egy adott kulcsértékű rekord bárhol elhelyezkedhet a fileban, a kereséskor a file minden rekordját át kell nézni egymásután a file elejétől kezdve, amíg meg nem találjuk a keresett rekordot. Ez átlagosan a file-ban tárolt rekordok felének átnézését igényli, ezért az egyedi keresések szempontjából nem tekinthető hatékony módszernek. Természetesen ha minden filehozzáférésnél szükség van összes rekordra, akkor ez a fileszervezés lesz a leghatékonyabb. - Szekvenciális elérés A rekordok a fileban a kulcsértékeik alapján sorba rendezve helyezkednek el, pontosabban a rekordok a fileban a kulcsértékeik növekvő vagy csökkenő sorrendjében érhetők el. A szekvencia előnye, hogy nem szükséges a teljes file-t végignézni adott kulcsértékű rekord keresésekor, mivel a sorrendbe rendezés miatt egy adott kulcstól jobbra csak tőle nagyobb (növekvő rendezést feltételezve) kulcsértékű elemek helyezkedhetnek el. Ez a sorrendbe rendezés megvalósítható fizikai szekvenciával vagy logikai, láncolt szekvenciával. A fizikai szekvenciánál a rekordok fizikai helye megfelel a sorrendben elfoglalt helyének. Ezáltal gyors lesz az egymást követő rekordok elérése, de egy új rekord beszúrása esetén át kell rendezni a rekordokat a file-on belül, egyes rekordokat át kellvinni más blokkokba, hogy helyet biztosítsunk a beszúrandó rekordnak. Gyakran változó file esetén tehát nem javasolt ez a módszer. A logikai szekvencia esetén a rekordok a bevitelük sorrendjében helyezkednek el fizikailag a fileban, s a sorrendbe rendezettséget mutatók segítségével valósítják meg, azaz minden rekord tartalmaz egy mutatót a sorrendben őt követő rekordra. Így beszúráskor csak a mutatókat kell átrendezni, a rekordok fizikai pozíciója ugyanaz marad. Mivel mind a két esetben továbbra is a file elejéről kiindulva, az egymást követő elemek ellenőrzésével lehet keresni, ez a módszer sem igazán hatékony számunkra. - Indexelt struktúra. A keresés meggyorsítható lenne, ha nem kellene minden, a keresett rekordot megelőző rekordot fizikailag is átolvasni. Valójában a keresett rekordot megelőző rekordokból csak azok kulcsértékei fontosak számunkra, a rekord többi mezője lényegtelen. Mivel rendszerint a kulcsmező nagysága csak egy töredéke a teljes rekord méretének, ezért ezen redukált adatokat sokkal gyorsabban át lehetne olvasni, sőt egy minőségi javulást hozna, ha az átolvasandó sor elhelyezhető lenne a memóriában, ugyanis ekkor az egymásutáni elembeolvasások helyett egy sokkal gyorsabb keresési módszer, a bináris keresés is alkalmazható lenne. Mindennek megvalósítása az index szerkezet, mely egy külön listában tartalmazza a rekordok kulcsait és az elérésükhöz szükséges mutatókat. A legegyszerűbb indexszerkezet egy indexlista, mely az összes rekord kulcsát tartalmazza egy listában, ahol a kulcsértékek rendezetten helyezkednek el. Mivel nagy fileméreteknél az indexlista is olyan hosszú lehet, hogy már nem fér egyszerre a memóriába, a lista kezelhetővé tételére új megoldásokat kerestek. Ennek egyik módszere az indexszekvenciális fileszerkezet, az ISAM szerkezet, melyben a rekordok fizikailag is rendezetten helyezkednek el a fileban, mint a szekvenciális állományoknál, így az indexlistának nem szükséges minden elemet tartalmaznia, csak bizonyos jelző rekordokat, mondjuk minden k.-kat, s rekord keresését a file-ban a hozzá legközelebb eső, tőle kisebb kulcsértékű jelzőrekordtól kell csak kezdeni. Az állományban történő szekvenciális keresés sem tarthat sokáig, hiszen maximum k rekordot kell egymásután átnézni. Az ISAM fejlettebb módozatainál külön van cilinder (sáv) és blokk index, mely a fejmozgás csökkentése érdekében ugyanazon cilinderen helyezkedik el mint a blokk, a rekord. Ez a megoldás igazán akkor hatékony, ha a cilinder index a központi memóriában helyezkedhet el. A másik lehetséges, elterjedt módszer a többszintű, hierarchikus indexstruktúra bevezetése, melyben a felül elhelyezkedő listából nem közvetlenül a rekordokra, hanem újabb indexlistákra történik hivatkozás. A hierarchikus index listák között kiemelkedő szerepet játszik a B+ fa (2. ábra). A B+ fa előnye, hogy minden, közvetlenül a rekordokra mutató listája a fa (a levél listák) , a hierarchia azonos szintjén helyezkedik el. Ez azt is jelenti, hogy minden rekordot közel azonos idő alatt érhetünk el, azaz az indexszerkezet kiegyensúlyozottnak mondható. Az indexlisták kihasználtsága is jónak mondható, hiszen minden lista, az elsőt kivéve, kapacitásának legalább a felét kihasználja. A keresés elve megfelel a keresőfák megszokott algoritmusának. A fa új elemek beszúrásakor sajátosan, lentről felfelé bővül. Előbb megkeresik azt a levél listát, ahol lenni kellene a bejegyzésnek. Ha van még itt hely, beszúrják ide a bejegyzést a sorrend szerinti helyre. Ha nincs hely, akkor megkeresik a helyét, majd a középső elemet kiemelik ebből a levélből, feltolják a szülő listába, majd létrehoznak egy újabb levelet, melybe a túlcsordult levélből a kiemelt elemtől nagyobb kulcsbejegyzések kerülnek át, s a túlcsordult levélbe csak a kiemelt elemtől kisebb bejegyzések maradnak meg. Mivel a szülő lista is túlcsordulhat ez a művelet egy rekurzív folyamatot eredményez. A listaméretet úgy választják meg, hogy az még beleférjen a memóriába. Mivel így rendszerint sok bejegyzés van egy listában, a fa mélysége, a szintek száma, alacsonyan tartható, így néhány blokk olvasása elegendő a rekord megtaláláshoz. A szintek száma egyébként csak logaritmikusan nő a rekordszám függvényében. Ez az indexelési módszer tekinthető az egyik leghatékonyabb módszernek. Az indexelés feladatát még annyi bonyolíthatja, hogy esetleg több mező szerint kívánunk indexelni, vagy éppen nem kulcs mező szerint kívánjuk az indexelést elvégezni a lekérdezések jellegét figyelembe véve. Ha egy mezőnél egy érték több rekordban is előfordul, akkor nem szokás minden ilyen értéket külön felvenni az indexlistába, hanem csak egyet, az első előfordulást, s a többi rekord ebből a rekordból kiinduló láncolt listán keresztül érhető el.



Ábra 2 Ha több mező szerint kívánunk indexelni, s az egyes indexeket valamilyen módon szeretnénk összevonni, illeszteni, akkor kapjuk a többdimenziós indexszerkezeteket. Ennek egyik lehetséges megvalósítása többdimenziós indexfa, melyben az egyes szintek ciklikusan az egyes mezőkhöz vannak rendelve. A keresés elve pedig megegyezik az egydimenziós keresőfa elvével, azzal a különbséggel, hogy minden szinten más-más mező szerint történik az elágazás. - Hashing Az indexszerkezetek révén nagyon gyorsan meghatározható a rekordok pozicója, csupán az indexlistákat kell átolvasni. Még jobb lenne, ha sikerülne még ezt a munkát is megspórolni. Erre irányulnak a hashing elérési módszerek, amikor a rekord pozícióját közvetlenül a rekord kulcsértékéből határozzák meg, tehát csak egy blokkolvasásra van szükség a rekord eléréséhez. Sajnos azonban nem mindig igaz, hogy egy blokkolvasás elég, ez csak ideális esetben valósul meg. A hash elérési módszer alapelve, hogy a kulcs értékéből valamilyen egyszerűbb eljárással, a h() hash függvénnyel meghatároznak egy pozíciót. Numerikus kulcsok esetén a h(x) = x mod n egyszokásos hash függvény, ahol x a kulcs érték és n hash tábla rekeszeinek a darabszáma. A h(x) megadja, hogy mely rekeszbe tegyük le az x kulcsú elemet. Mivel a hatékony kezelhetőség végett a lehetséges pozíciók darabszáma lényegesen kisebb a lehetséges kulcs értékek darabszámánál, így szükségszerűen több kulcsérték is ugyanazon címre fog leképződni. Egy címhez rendelt tárterületet szokás bucket-nak is nevezni, mely lemez esetében rendszerint egy blokknak felel meg. Ha több rekord kerül egy címre, mint amennyi egy bucketban elfér, akkor lép fel a túlcsordulás jelensége, amikor is egy újabb blokkot, területet kell a címhez hozzákötni. Tehát egy címhez több különálló terület is tartozhat, melyeket láncolással kötnek össze.



Ebben az esetben a rekord kereséséhez több blokkot is át kell nézni, amely lényegesen csökkenti a hash elérési módszer hatékonyságát. A túlcsordulás mellett a hash módszer másik hátránya, hogy csak nagyon körülményesen lehet vele megvalósítani a rekordok kulcs szerint rendezett listájának előállítását, hiszen a hash módszer az egymást követő rekordokat tetszőlegesen szétszórhatja a címtartományon a kiválasztott hash függvénytől függően. A jó hash függvény a túlcsordulást rekordok egyenletes elosztásával tudja kivédeni. Mivel a rekordokhoz rendelt címek eloszlása nagyban függ a kulcsértékek eloszlásától, a túlcsordulás soha sem védhető ki teljesen. A fileszerkezetek rövid áttekintése is világosan érzékelteti, hogy mennyi mindent kell figyelembe venni és milyen összetett lehet az optimális szerkezet megválasztása. Pedig ez a rész csak egy kis töredéke az optimális adatkezelő program tervezése során felmerülő problémák közül, hiszen nem említettük a többi komoly kérdést, mint pl. a konkurens hozzáférés, védelem, integritásőrzés. Talán érzékelhető, hogy milyen reménytelen vállalkozásnak tűnik, megfelelő fejlesztőkapacitás és idő hiányában, a minden igényt kielégítő információs, adatfeldolgozó rendszerek nulláról induló, hagyományos, pl. C nyelven történő kifejlesztése. Ez olyan mennyiségű munka, amit csak a legnagyobb szoftverfejlesztő cégek tudnak elvégezni. Mi marad hát a többieknek? Adatbázisrendszerek, adatbázis és adatbáziskezelő fogalmai A világon nagyon sok és egymástól nagyon különbözően működő információs rendszer létezik. A különbözőség ellenére azonban az is észrevehető, hogy mindegyikben az adatok kezelése szinte ugyanolyan módon, funkciókkal zajlik. A szokásos funkciók közé tartozik az adatok felvitele, törlése, módosítás és lekérdezése. Az adatok formálisan azonos kezelése tette azt lehetővé, hogy a nagyobb cégek előállítsanak olyan keretrendszert, amelyek beépíthetők a legkülönbözőbb információs rendszerekbe az adatok karbantartására. A nagytömegű adatok feltételeknek eleget tévő kezelését biztosító rendszereket adatbáziskezelő rendszereknek nevezik. Maga az adatbáziskezelés fogalma sem egy egzaktul definiált fogalom, így a mostani értelmezést egy bevezető értelmezésnek teinthetjük, melyet a későbbiekben még pontosítanifogunk. Az adatbáziskezelő rendszerek piaca pedig igen tekintélyes piac, s a jövője is igen ígéretesnek mutatkozik. Az adatbáziskezelő rendszerek forgalma az előrejelzések szerint ezen évtizedben öt év alatt megduplázódik, s a fejlesztő eszközök piacán a teljes forgalom mintegy 37 százalékát birtokolja. A legnagyobb adatbáziskezelő rendszert gyártó cég, az Oracle az előkelő harmadik helyet foglalja el a szoftverértékesítés piacán. Az Oracle jelentése szerint a cég árbevétele 1997-ban a fantasztikusnak tűnő 37%-kal növekedett. Mindez azt mutatja, hogy az adatbázisok iránti igény egyre fokozódik. Ezzel összecseng az a tapasztalat is, hogy a programozói álláskínálatokban egyre többször igényelnek relációs adatbáziskezelési, SQL ismereteket. Természetesen az adatbáziskezelő rendszerek sem hirtelen, minden előzmény jelentek meg a piacon, a köztudatban. A számítógépeket megjelenésük után a tárak kis kapacitása miatt elsősorban numerikus számítások elvégzésére használták. Később a technológia fejlődésével mind nagyobb mennyiségű információ tárolására váltak alkalmassá, s megjelentek a kimondottan a nagymennyiségű adatok hatékony kezelésére készült rendszerek is. Az első szekvenciális fileok még az 1940-es évek végén jelentek meg. Az első nem szekvenciális hozzáférést biztosító filerendszert 1959-ben fejlesztették ki az IBM-nél. Az 1960-as években egy sor új, harmadik generációsnak nevezett programozási nyelv jelent meg, mint a Fortran, Basic, PLI, melyek között volt egy, mely kimondottan adatkezelés orientált céllal jött létre, a Cobol. Egyes statisztikák szerint még pár évvel ezelőtt is az alkalmazások többsége ezen a nyelven készült, megelőzve a C, C++ nyelvet is, melyet inkább rendszerfejlesztésre használnak. Nemsokkal ezután megjelentek az első adatbáziskezelő rendszerek is. Az 1961-es évben dolgozták ki a hálós adatmodell alapjait, majd nemsokkal rá megjelent a hierarchikus adatmodell is. Az első hálózatos, konkurens hozzáférést biztosító adatbank 1965-ben jelent meg az IBM-nél, s a SABRE nevet kapta. Az adatbáziskezelő rendszerek maguk is jelentős fejlődésen mentek keresztül azóta, jelentősen megváltozott használati módjuk, az általuk támogatott adatmodell jellege. Az induló időszak hierarchikus, majd hálós adatmodelljei után az 1970-es években indult el hódító útjára a ma legelterjedtebb adatbáziskezelő típus, a relációs adatbáziskezelés. Az adatbázisokkal kapcsolatos elméleti kutatások is megszaporodtak, az 1970- es években indultak be a VLDB és a SIGMOD konferenciák. Az 1980-as években a relációs adatbáziskezelők SQL kezelő felülete is szabvánnyá vált, s megjelentek a relációs adatbázist kezelő alkalmazások hatékony fejlesztését szolgáló negyedik generációs, 4GL rendszerek is. Évtizedünkben az adatbáziskezelés területén is tért hódítanak az új elvek, mint az objektum orientáltság vagy a logikai programozás, s a hálózatok elterjedésével az osztott adatbáziskezelők szerepe is egyre nő. Emellett napjainkban egyre nagyobb szerepet kapnak az ismertetett adatszerű információkezeléstől eltérő felépítésű és funkciójú, szövegszerű kezelést megvalósító információs rendszerek is, melyek tágabb értelemben kapcsolhatók az adatbáziskezelés területéhez.



3. ábra E rövid kis történelmi áttekintés után nézzük meg most már pontosabban mit értük adatbáziskezelés alatt és mik az ide csatlakozó legfontosabb fogalmak. Első alapvető fogalmunk az adatbázis fogalma. A fogalom definícióját az adatbázisokhoz rendelhető legfontosabb tulajdonságok megadásával írhatjuk le. Ha az irodalomban utánanézünk, hamar rájövünk azonban, hogy nincs egy egységesen elfogadott definíció az adatbázis fogalmára, úgymond mindenki szabadon értelmezheti, hogy mit érez fontosnak az adatbázis fogalmára. Ezek a definíciók szerencsére, néhány kivételtől eltekintve, nem mondanak ellent egymásnak, inkább más-más aspektust hangsúlyoznak. A sokszínűség bemutatására előbb következzék néhány válogatás a lehetséges, megadott definíciókból, majd megadjuk a saját definíciónkat is, ezzel is bővítve a rendelkezésre álló választékot. Elsőként egy olyan példa következzék, melyet nem ajánlok elfogadásra, annak túl általános volta miatt: - Az adatbank rekordok összessége ('Eine Datenbank ist eine Sammlung von Datensaetzen', részlet egy Works leírásból). Ez a definíció nem tesz különbséget a normál file és egy adatbázis között, pedig nem minden file tekinthető adatbázisnak. A Oxford értelmező szótár megfogalmazása sem igazán elfogadható számunkra: - Adatbázis: Általában és szigorúan véve olyan adatállomány (data file), amely egy adatbáziskezelő rendszerrel hozható létre és érhető el. Ez lényegében áttolja a definíciót az adatbáziskezelőre, másrészt ebből úgy tűnhet, hogy minden file külön adatbázis, pedig mint látjuk ez nem igaz, több file együtt fog sok esetben egy adatbázist jelenteni. A következőkben már tankönyvekből vett definíciókat olvashatunk. - Adatbázis összetartozó és kapcsolódó adatok rendszere. (Elmasri - Navathe) A fenti definíció túl általánosan fogalmaz, így átöleli az adatkezelés szinte teljes területét, ezért önmagában nem fogadható el. A szerzők maguk is pontosítják az értelmezést a definíció után egy tulajdonságlistájával. A definíció viszont jó példa arra, hogy megmutassa, hogy az adatbázis magja az adatok és a közöttük fennálló kapcsolatok együttes tárolása. - Adatbázisokon voltaképpen adatoknak kapcsolataikkal együtt való ábrázolását, tárolását értjük. (Horváth Katalin - Dr. Szelezsán János) Itt már láthatóan nem a formai megjelenést emelték ki, hanem a helyesen a belső tartalmi vonatkozás kerül előtérbe. Számunkra leglényegesebb mondanivalója ennek a definíciónak, hogy a valóság modellezésénél nem elegendő pusztán csak az egyedeket letárolni, hanem az egyedek között fennálló kapcsolatok nyilvántartása is fontos. Mit érne egy olyan rendőrségi nyilvántartás, melyben mind az autók, mind az állampolgárok adatai benne vannak, de a rendszer nem tárolná, hogy melyik autó kinek a tulajdona. A kapcsolatok a valóságmodell szerves részei, és az adatbázisnak ezen kapcsolatokat is tárolnia kell. Még egy kicsit többet mond a következő definíció: - Az adatbázis véges számú egyed-előfordulásnak, azok egyenként is véges számú tulajdonságértékének és kapcsolat-előfordulásainak az adatmodell szerint szervezett együttese. (Dr. Halassy Béla) E megfogalmazás lényeges és új eleme, hogy az adatok azért nem tetszőleges formátumban tárolódnak, hanem minden adatbázisnak van egy belső logikai struktúrája, melybe be kell illeszkedni minden tárolt adatnak. Ilyen struktúrára, vagy adatmodellre több példát is láttunk a történelmi áttekintésben, pl. a relációs adatmodell is szerepelt. Mind majd később látni fogjuk ez nem fizikai struktúrát jelent első sorban, hanem logikait. A következő definíció a neves amerikai szakértőtől származik: - Az adatbázis a felhasználók által rugalmasan kezelhető adatok rendszere. (C.J. Date) A definíció lényeges mondanivalója, hogy az adatbázisban tárolt adatok többen, viszonylag rugalmas keretek között, tehát nem csak megszabott módon, használhatják. Végül az utolsó példa is hasonló elemeket emel ki: - Az adatbázis összetartozó adatok azon rendszere, mely megosztott több felhasználó között, és az elérést egy központi vezérlő program szabályozza, és a felhasználónak nem kell ismernie az adatok fizikai tárolási mechanizmusát. (J. G. Hughes) Itt is történik utalás a logikai modell és a fizikai tárolás különbségére, valamint a konkurens hozzáférésre. Az előző példák és a bevezetőben említettek alapján felállíthatunk egy összesítő definíciót az adatbázis fogalmára. Mindenekelőtt nézzük meg mit kell tárolni az adatbázisban. Nyilvánvaló, hogy a modellezett valóságban szereplő egyedeknek és kapcsolataiknak szerepelniük kell. A felhasználó ezekkel az adatokkal fog dolgozni, ezen adatok kezelésére készülnek a különböző felhasználói programok. Ezeket az adatokat szokás tényleges, elsődleges adatoknak is nevezni. Az adatkezeléssel szemben felállított követelmények kielégítéséhez ezen adatok önmagukban nem elegendőek, gondoljunk csak arra, hogy a hatékony adatkeresés vagy indexstruktúrát vagy hash szerkezetet igényel, vagy például az adatvédelem biztosításához szükség van a hozzáférési jogok tárolására és az adatmásolatok megőrzésére. Ezek a szerkezetek az elsődleges adatokra vonatkozó információkat tárolnak, ezért nevezik ezen adatokat metaadatoknak is, tehát adatokra vonatkozó adatoknak. Következzék tehát a definíció: Adatbázis: egy olyan integrált adatszerkezet, mely több különböző objektum előfordulási adatait adatmodell szerint szervezetten perzisztens módon tárolja olyan segédinformációkkal, ún. metaadatakkal együtt, melyek a hatékonyság, integritásőrzés, adatvédelem biztosítását szolgálják. Az adatbázis szó rövidítésére gyakran használják az angol rövidítését, a DB-t. Az adatbázisok elvileg tetszőleges méretűek lehetnek. Az elsődleges adatok száma a nullától, az üres adatbázistól a végtelen értékig terjedhet. Az elméletileg végtelen kapacitást a gyakorlatban a rendelkezésre álló hely, vagy éppen a belső tárolási struktúra korlátozza. Az adatbázis mint a fentiekből kitűnik, egy összetett adatstruktúrának tekinthető. Az adatstruktúra viszont az alkalmazások passzív elemit jelentik, s kell egy algoritmus, egy program mellyel felhasználhatók ezek az adatok, életre kelthetők az információk. Így az adatbázishoz kapcsolódnia kell egy kezelő programnak, amit adatbáziskezelőnek neveznek. Az adatbáziskezelő rendszer értelmezése jóval egységesebb, mint az adatbázis értelmezése volt. Egy általánosan elfogadott definíciónak tekinthető a Coad által megadott értelmezés, mely szerint az adatbáziskezelő rendszer az a program, mely az adatbázishoz történő mindennemű hozzáférés kezelésére szolgál. Forsthuber anyagában egy részletesebb felsorolás is található, hogy milyen feladatok elvégzésre szolgál az adatbáziskezelő rendszer, nevezetesen - adatbázisok létrehozására - adatbázisok tartalmának definiálására - adatok letárolására - adatok lekérdezésére - adatok védelmére - adatok titkosítására - hozzáférési jogok kezelésére - fizikai adatszerkezet szervezésére A felsorolás alapján érzékelhető, hogy a hozzáférés nem egy egyszerű írási vagy olvasási műveletet jelent, hiszen az adatbáziskezelő rendszernek kell gondoskodnia a már korábban említett integritási, hatékonysági és védelmi feltételek megőrzéséről. Az adatbáziskezelő rendszer emiatt egy bonyolult programrendszernek tekinthető, mely sok funkcióját, összetettségét tekintve leginkább az operációs rendszerekhez hasonlítható. Az integritási, hatékonysági és védelmi feltételek ellenőrzését és betartatását az adatbáziskezelő rendszer a háttérben végzi el, mintegy a felhasználó közvetlen parancsa vagy éppen tudta nélkül. Mindez azért történik így, hogy a felhasználó véletlenül vagy szándékosan se tudja elrontani az adatbázist. Az adatbázis helyességének megőrzésének fontossága miatt definíciónkban külön kiemeljük az adatbáziskezelő rendszer ezen tulajdonságát: Adatbáziskezelő rendszer: Az a programrendszer, melynek feladata az adatbázishoz történő hozzáférések biztosítása és az adatbázis belső karbantartási funkcióinak végrehajtása. Az adatbáziskezelő rendszer rövidítése az angol elnevezés alapján: DBMS. A DBMS és az operációs rendszer hasonlata annyiban is helytálló, hogy mindkettő egy alsó szoftverréteget valósít meg, a felhasználó nem közvetlenül, hanem segédprogramokon keresztül éri el. Az adatbáziskezelés esetében is a felhasználó nem közvetlenül a DBMS-t kezeli, hanem egyéb segéd- és alkalmazói programokat futtat, melyek majd a DBMS-en keresztül érik el az adatbázisban tárolt adatokat. Maguk a DBMS rendszereket forgalmazó cégek is készítenek ilyen segédprogramokat, de egyedi fejlesztéssel is létrehozhatunk adatbázisbeli adatokat kezelő programokat. A DBMS-hez integráltan tartozó segédprogramok angol rövidítése UIT (User Interface Tools). Ezek alapján egy hatékony adatkezelő rendszernek tartalmaznia kell egy adatbáziskezelőt, egy adatbáziskezelő rendszert, valamint alkalmazói és segédprogramot. Az adatbáziskezelő, az adatbáziskezelő rendszer, valamint alkalmazói és segédprogramok együttesét adatbázisrendszernek neveznik, melynek rövidítésére a DBS használják. A DBS-en belül az alkalmazói és a segédprogramok állnak legközelebb a felhasználóhoz. A felhasználó ezzel a komponenssel kommunikál. A kiadott utasítások értelmezése után az adatkezelésre vonatkozó részlépéseket a program a DBMS felé továbbítja. Ezekután a DBMS elvégzi a megfelelő adatbázis módosításokat vagy adatbázis olvasási műveleteket, s az eredményt továbbítja az alkalmazói program felé. Ezen munkamegosztáson alapuló hierarchiát szemlélteti a 4. ábra is.



4. ábra A segédprogramok között kiemelt helyen szerepelnek a felhasználók egy szűk, kiemelt csoportjának készült programok. Ez a csoport annyiban játszik kiemelt szerepet, hogy az ő feladatuk az adatbázis menedzselése. Ehhez kiemelt jogosultságokkal rendelkeznek, s csak ezen jogosultságokkal lehet számos adminisztrációs műveletet elvégezni, mint pl. a fizikai tárolási struktúra szabályozása, jogosultságok kezelése. Ezen funkciók elvégzésére alkalmas segédprogramok természetesen megfelelő módon, pl. jelszóval védettek a jogosulatlan hozzáférés ellen. Ezen jogokkal felruházott felhasználókat nevezik adatbázis adminisztrátoroknak (rövidítése DBA). Az adminisztrátorok mellett dolgoznak az operátorok, feladatuk a rutinszerű rendszertevékenységek elvégzése, mint pl. a mentések, rendszerindítások vagy zárások végrehajtása. A felhasználóknak egy tágabb csoportja az alkalmazásfejlesztők köre. A fejlesztőknek a DB oldaláról ismernie kell az adatbázis adatmodelljét, a metaadatok megadásának módját, az alkalmazói programok fejlesztésének lehetőségeit, hogy csak a legfontosabb követelményeket említsük. A fejlesztők egyik csoportja az adatbázis tervezésével foglalkozik, míg a másik csoportjának a felhasználói programok megírása, tesztelése a feladata. A felhasználók legnépesebb csoportja az alkalmazók köre, akik az elkészült alkalmazásokat használják, számukra az adatbázis azon adatokat jelenti, amelyekkel az alkalmazások során találkoznak, az adatbázis vagy a DBMS létezéséről, vagy netán belső működéséről semmilyen ismerettel sem kell rendelkezniük. Az adatbázisrendszer mellett az adatkezelés másik fő variánsa a hagyományos file kezelő rendszer. Ez a fajta adatkezelési technikai is elterjedt, használata bizonyos esetekben előnyösebbnek bizonyul a DBS alkalmazásánál. A rendszerfejlesztő egyik fontos feladata a megfelelő adatkezelési módszer kiválasztása, annak eldöntése, hogy mikor érdemes DBS-t és mikor file kezelő rendszert használni. A döntés helyes meghozatalához ismerni kell mindkét rendszer előnyeit és hátrányait is. A DBS-t illetően részben az előzőekben ismertetett fogalmakon alapulva az alábbi előnyök emelhetők ki: - Az egyedtulajdonságok, kapcsolatok és metaadatok egységes tárolási rendszere. Az adatbázis nem egy speciális alkalmazói programhoz készült, hanem tetszőlegesen sokfajta alkalmazói program is futhat rajta, több alkalmazói program adatait is összefogja. Ezért szokás az adatbázisban tárolt adatokat integrált adatoknak is nevezni. A normál filekezelésnél ezzel szemben rendszerint minden alkalmazói programhoz el kell készíteni a saját adatrendszerét. - Adatfüggetlenség Az adatfüggetlenség kérdése az egyik legfontosabb jellemzője az adatkezelés fejlődésének. A 1950-es évek elején megírt adatkezelő programok egyik jellemzője volt, hogy a programkód teljes mértékben tükrözte az adatok tárolásának szerkezetét, hiszen a program szinte közvetlenül elérhette az adatokat. Ezt a fejlettségi szintet nevezik a teljes adatfüggőség korának. Ezt azt is jelentette, hogy ha megváltozott a fizikai struktúra, akkor át kellett írni a programot is. Mivel a hardware gyors fejlődése miatt erre gyakran szükség volt, a fejlődés következő lépcsőjében beépült egy filekezelő rendszer az operációs rendszerbe, s az alkalmazás már egy átdolgozott, áttranszformált képet kapott a fileszerkezetről. A programban egy logikai adatszerkezetet kell csak definiálni, a fizikai szerkezetre való leképzést a konverter végzi. A fizikai adatfüggetlenség azt jelenti, hogy a fizikai adatszerkezet, az elérési mód megváltoztatható anélkül, hogy a programot is módosítani kellene. A mai hagyományos filekezelésnél egy rekord szintű függetlenség valósul meg, hiszen a állományt sima rekordsorozatnak képzelhetjük el, pedig valójában nem az, ezzel szemben a rekord mezőit úgy kell megadni, ahogy azok fizikailag is megvalósulnak. Az adatfüggetlenség következő, az adatbázisokban megvalósuló szintje a mezőszintű fizikai adatfüggetlenség, hiszen az adatbázisban az egy rekordba tartozó mezők is fizikailag szétszórtan helyezkedhetnek el az adathordozón. Az adatfüggetlenség másik típusát logikai adatfüggetlenségnek nevezik, mely szintén megvalósul az adatbázisoknál. Ez alatt azt értjük, hogy a letárolt logikai adatmodell maga is bővíthető, illetve bizonyos mértékben módosítható, hogy az alkalmazói programokat módosítani kellene. Ha tehát egy objektumtípushoz egy újabb tulajdonságot kívánok letárolni, nem kell egyetlen egy meglévő alkalmazói programot sem módosítani. - Nagyobb adatabsztrakció A adatbáziskezelésnél az adatok a felhasználó szemszögéből tekintve adatmodellben tárolódnak, ezért a felhasználónak nem kell törődnie a fizikai tárolás részleteivel, s egy magasabb absztrakciós szinten értelmezheti az adatrendszert. A részletek rejtve maradnak a felhasználó és a programfejlesztő előtt is. - Adatmegosztás, párhuzamos hozzáférés A DBMS felkészült az integrált adatokhoz történő osztott hozzáférések kezelésére. A hagyományos filekezelő alkalmazásoknál csak igen nagy ráfordítással tudnánk biztosítani a DBMS-ben megvalósított konkurens hozzáférést támogató koncepciót. Az adatmegosztás révén a helyigény is csökkenthető, és így mindenki a legaktuálisabb adatokhoz férhet hozzá. - Ellenőrzött redundancia Mivel több alkalmazás is ugyanazt az adatbázist használja, ezért a felhasznált adatok is egy helyen, egykézben összpontosulnak. A hagyományos filekezelésnél ha több alkalmazásnak is szüksége volt egy adatra, akkor az adat több fileban is letárolásra került. Ez a redundancia számos hátránnyal járt, kezdve a felesleges helyfoglalástól a konzisztencia megőrzésének problémájáig. - Hozzáférési jogosultságellenőrzés, adatvédelem A DBMS az operációs rendszerekhez hasonlóan nyilvántartja a jogosult felhasználókat. Ennek során nyilvántartja az azonosító nevet, a jelszót, a tulajdonában lévő adatokat, az engedélyezett műveleteket. Az adatvesztés okozta károk minimalizálására mind statikus mind dinamikus védelem használható. A statikus védelem egyik eszköze a mentés, a dinamikus védelemhez pedig a naplózás tartozik. - Optimalizált fizikai adatszerkezetek A DBMS-ben implementálták mindazokat a hatékony adatstruktúrák kezelésére (mint hashing, indexelés, stb.) alkalmas algoritmusokat, melyekkel jelentősen javítható a műveletek hatékonysága, gyorsasága. Normál filekezelés esetén, nagyobb méretű adatszerkezetek esetén a programozónak kellene mindezen hatékonyabb adatstruktúrákat megvalósítania. - Integritási feltételek érvényesítése A DBS keretén belül magában az adatbázisban tárolhatjuk az adatok között fennálló integritási szabályok formájában. Az adatbázis módosításakor automatikusan ellenőrzi a DBMS, hogy nem-e sérült meg az integritási szabály. Ha megsérülne, akkor nem hajlandó elfogadni a változtatást. Mivel mindezt a DBMS végzi, nem a felhasználói programnak nem kell törődnie az integritási problémák teljességével. A hagyományos filekezelésnél a programozó vállán volt minden felelőség. - Szabványosság, hatékonyság, rugalmasság A szabványos adatmodellek és kezelő felületek, interfacek használatával az elkészült rendszer jobban érthetővé válik mások számára is, ezáltal későbbi fejlesztés, módosítások is könnyebbé válnak. A fejlesztő a DBMS-en keresztül jobban rákényszerül a szabványos eszközök használatára, mint a több szabadságot nyújtó normál filekezelésnél. Emellett az sem elhanyagolható, hogy a DBMS-ekhez számos fejlesztő eszköz áll rendelkezésre, jelentősen megnövelve a fejlesztés hatékonyságát. A szükséges változtatások gyorsabban végrehajthatók, nagyobb rugalmasságot biztosítva a rendszernek. A felsorolt előnyök ellenére vannak olyan esetek amikor célszerűbb a normál filekezelést választani. Ennek elsősorban az az oka, hogy a biztonságos, hatékony adatbáziskezelés biztosítását meg kell fizetni a felhasználónak, mely többlet időt és többlet költséget is jelent. Ezért nem célszerű adatbázist használni, ha - Az alkalmazás, az adatrendszer viszonylag egyszerű, s nem várhatók változtatások az adatrendszerben a jövőben sem. Ekkor felesleges beruházás a drágább DBMS beszerzése. - Az alkalmazás real-time követelményeket támaszt az adatrendszerrel szemben, azaz nagyon gyors adatkezelésre van szükség. Ez a DBMS összetettsége miatt nem biztosítható. - Egyfelhasználós adatrendszer esetén, amikor konkurens hozzáférés nem fordulhat elő. Ekkor maga az alkalmazás kézben tudja tartani az adatintegritás megőrzését, az adathozzáférés biztosítását. Ugyan nagyobb időráfordítással, de költségkímélőbben meg lehet oldani a feladatot a normál filekezeléssel. Ha a feltételek mérlegelésével megszületett a döntés, hogy DBS-t alkalmaznak, akkor kezdődhet el a DBS fejlesztésének igazán érdekes és izgalmas folyamata. Ennek során ki kell választani a megfelelő adatmodellt és DBMS-t, el kell készíteni a modellezett valóság megfelelő adatmodelljét, létre kell hozni az adatbázist és a szükséges alkalmazói programokat is. S a szakemberek hosszú együttes munkájának eredményeként megszülethet az igényelt adatbázis rendszer. Modellezés szerepe az adatbáziskezelésnél Az alkotó tevékenység során alapvető szerepet játszanak a különböző modellek a környező világ megértésében, leképzésében és átalakításában. A modellek teszik lehetővé a lényeg kiemelését és szemléltetését. A modell fogalma alatt rendszerint két különböző dolgot is szokás érteni: egyrészt olyan rendszert, amely a valóság egy vizsgált szeletével struktúrában vagy viselkedésben megegyezik vagy hasonló jelleget mutat fel és célja a vizsgálatán keresztül a valóság állapotára, viselkedésére vonatkozó következetések levonása. Másrészt a modell kifejezéssel jelöljük azon eszközrendszert is, amellyel az előző értelemben vett modell leírható megadható. Tehát a modell egyrészt egy jelölésrendszert, másrészt egy elkészült leírást is jelölhet. Sokféle és igen változatos modellekkel találkozhattunk már az eddigiekben. Magukat a programokat is egyfajta modellnek tekinthetjük, hiszen a vizsgált valóságot írják le a programozási nyelvek utasításainak, kifejezéseinek a segítségével. Amikor alkalmazást készítünk, több lépcsőn keresztül modellezük a feladatot. Előbb egy áttekintő leírást készítünk, melyben közérthetően, az emberi fogalmakhoz közel állóan vázoljuk fel a megoldást. Később ez alapján elkészítjük a programozási nyelv segítségével megadott leírást. Az adatbáziskezelés területén a modellezésnek még nagyobb a szerepe, mint a hagyományos programfejlesztési eszközöknél. Nézzük mi indokolja, miben jelenkezik a modellezés fontossága. A hagyományos alkalmazások egyfajta problématerületre készülnek, behatárolt funkciókkal és adatelemekkel. Egy könyvelési rendszer például nem alkalmazható könyvtár nyilvántartásra. Ezt úgy is kifejezhetjük, hogy az alkalmazásba beleégetődött a problématerület modellje. A modell megváltoztatásához újra kell írni az alkalmazás bizonyos részleteteit. Az adatbáziskezelő rendszerek ezzel szemben nemcsak egy problématerülethez készültek, hanem általános célúak. Az adatbáziskezelő rendszernek a modellezett területtől függetlenül biztosítania kell az adatbázisban tárolt adatok hatékony kezelését. Emiatt az adatbáziskezelőkbe nem lehet egyetlen egy fix modellt beégetni. A DBMS-nek nagyon sokféle különböző modell kezelésére alkalmasnak kell lennie. Ez pedig csak úgy oldható meg, ha a DBMS maga is rendelkezik egy felülettel, amelyen keresztül megadható, hogy milyen legyen az aktuálisan tárolandó adatrendszer struktúrája, modellje. Tehát a DBMS- ekhez mindíg csatlakozik egy leíró nyelv, egy modell. A hagyományos alkalmazásokhoz ezzel szemben nem rendelhető egy ilyen rugalmas modell (modell, mint leíró rendszer). A informatikában azon modelleket, amelyek az adatok struktúrájának leírására szolgálnak, adatmodelleknek nevezik. Mivel a DBMS-ekhez rendelt modell is ugyanazen célt szolgálja, ezért a DBMS-hez rendelt modell is adatmodellnek tekinthető. Az adatmodellek leírásával egy későbbi fejezetben fogunk részletesebben foglalkozni. Az adatmodellekről azonban már most is megjegyezhetjük, hogy központi szerepet játszanak az adatbáziskezelésben, hiszen ezen keresztül adhatjuk meg a megvalósítandó rendszer leírását az adatbáziskezelőnek. Ahhoz, hogy használni tudjuk az adatbáziskezelőt, ismernünk kell az adatbáziskezelőhöz tartozó adatmodellt. Mint várható, nemcsak egyféle adatmodell létezik. Az adatbáziskezelés fejlődésével újabb és újabb adatmodellek jöttek létre. A DBMS-ek egyik fő jellemzője, hogy mely adatmodellhez kapcsolódnak. A korábban már említett relációs, hierarchikus vagy hálós előtagok is az alkalmazott modellt azonosítják, azaz például a relációs DBMS a relációs adatmodellen nyugszik. Mivel az adatmodell egy jelölésrendszeren alapszik, ezért nem igényli feltétlenül egy DBMS létét, azaz vannak kolyan adatmodellek is, melyekhez nem létezik DBMS. Ennek ellenére ezen adatmodellek sem tekinthetők felesleges, selejt adatmodelleknek. Egyrészt ezen modellek rendszerint a végső DBMS adatmodell kialakításában segítenek, hiszen emlékszünk rá, hogy maga a programozás is egy többlépcsős modellezési folyamatként értelmezhető; másrészt ezek a modellek visszahatnak a DBMS-ek fejlesztésére is, s egyszer talán rajtuk alapuló DBMS-ek fognak megjelenni a piacon, mint ahogy ez a múltban már párszor megtörtént. Áttekintés az adatbázisrendszerek architektúrájáról Az előzőekben megismert alapfogalmakra építve most egy részletesebb ismertetést adunk az adatbázisrendszerek elvi felépítéséről, majd ezt követően az adatbázisok és az adatbáziskezelő alkalmazások fejlesztéséről esik szó. A bemutatandó fogalmak az adatbáziskezelés általános koncepciójának a megértését, elsajátítását szolgálják, s a gyakorlatban használatos ismeretek, részletek tárgyalására a későbbi fejezetekben kerül majd sor. Az adatbázisrendszerek belső architektúráját többféle szempont szerint is elemezhetjük. Az előző fejezetben bemutatott struktúra egy funkcionális elemzésre alapult. A három alapvető komponens, az - adatbázis - az adatbáziskezelő rendszer és - az alkalmazói vagy sedédprogramok mindegyike különböző feladatot látott el. A különbözőség a komponensek éles fizikai elkülönülésében is megnyilvánul. Az adathordozón más-más helyen, más-más azonosítóval szerepelnek, s kiemelten, külön-külön is mozgathatjuk, vagy módosíthatjuk őket. Az egyes komponensek létrehozásának idejei is elkülönülnek egymástól, és esetleg más-más helyről is szerezzük be őket. Elsőként a DBMS kiválasztása történik meg, majd ennek segítségével lehet létrehozni az adatbázist, majd az erre épülő alkalmazásokat. Személyileg is szétválnak az egyes komponensek kezelésével megbízott posztok, szükség van többek között rendszeradminisztrátorra, operátorra a DBMS kezeléséhez, a programozók és a felhasználók pedig az alkalmazásokhoz kötődnek. E szembetűnő, funkcionális szempontok szerint történő strukturálás mellett más módon is elemezhetjük az adatbázisrendszereket. A legismertebb, sőt szabványként is elfogadott strukturálás, az ANSI/SPARC architektúra néven ismert struktúra. Nevét onnan kapta, hogy az ANSI/SPARC Study Group on Data Base Manegement Systems bizottság dolgozta ki. A bizottságot az 1970- es évek elején hozták létre az ANSI szabványosítási hivatalkeretében, hogy meghatározza az adatbáziskezelés azon területeit, melyben lehetséges és célszerű a szabványosítás. A vizsgálat eredményeként megszületett egy általános DBS modell, melyben kiemelt hangsúlyt kaptak az egyes komponensek közötti interface-ek. Az ANSI/SPARC architektúra a adatbázis leírására három szintet tartalmaz: az külső (external), a koncepcionális (conceptual) és a fizikai (internal) szintet.



5. ábra Az egyes szintek az adatbázisrendszer, mint egység, különböző megvilágításainak, megközelítéséinek felelnek meg. Ezért a szinteket szokás nézeteknek (view) is nevezni. A külső szint foglalja magában mindazt, amit egy-egy felhasználó az adatbázisból lát, amit a felhasználó adatbázis alatt gondol, ami ő számára az adatbázist jelenti. Ez az egy egyedi látásmódok összessége. Mivel egy adatbázisrendszerhez több alkalmazó, felhasználó is kapcsolódhat, ezért több ilyen nézetet is tartalmazhat. Ezek a nézetek rendszerint különbözőek, hiszen a felhasználók a teljes adatbázis más-más részletét látják csak. Így például más adatokat kezel, más adatokhoz férhet hozzá a teljes vállalati adminisztrációs rendszeren belül egy pénzügyi vagy egy személyzeti adminisztrátor. Mivel az adatrendszer más elemeivel ők soha nem kerülnek kapcsolatba, ezért számukra ezek az adatok jelentik a teljes adatbázist, ők úgy látják, hogy az adatbázis csak azokat az adatokat tartalmazza, melyekkel kapcsolatba kerülnek. Az egyes nézetek különbözősége azonban nem zárja ki azt a lehetőséget, hogy egyes nézeteknek közös elemei is legyenek. Ugyan sok, különböző külső nézet létezik, de ezek mindegyike valójában ugyanannak az adatbázisnak a különböző részleteit tartalmazza. Ezért értelmezhető az a látásmód is, mely a teljes adatbázist tartalmazza. Egy ilyen nézettel kell rendelkeznie például a rendszeradminisztrátornak, vagy az adatbázistervezőnek is. Ezt a közösségi nézet a koncepcionális szinten helyezkedik el. A közösségi nézetből viszont csak egy van, s az összes külső nézet ennek egy szeletét jelenti. A felhasználó a külső nézetében a modellezett valóság egyedeit, egyedkapcsolatait látja, még az adatbázistervező a DBMS által támogatott adatmodellben, tehát egy absztraktabb leírásban gondolkodik, addig az adatbázis végül is fizikailag is létezik, valamilyen fizikai adatstruktúrában letárolva az adathordozón. Mint már láttuk, a kiválasztatott adatstruktúra is lényeges szerepet játszik az adatbázis hatékonyságánál, s az adatbázis adminisztrátor éppen egyik feladata a megfelelő fizikai struktúra kialakítása, hangolása. Tehát létezik egy, a fizikai tárolási szerkezethez közel álló nézet is, melyet adattárolási nézetnek neveznek, és ez a belső szinten helyezkedik el. Ez a három szint, mint láttuk, az adatbáziskép absztrakciós szintjében is különböznek egymástól. Erre az absztrakciós szintkülönbségre a számítástechnika más területeiről is hozhatunk példát. Amikor egy közgazdász egy termelésoptimálási programot használ, akkor abban a gépkapacitásokat például egy mátrixban letárolva látja maga előtt. A programozó számára az adatok egy tömbben letárolva jelennek meg. Fizikailag pedig azonos hosszú rekeszek sorozataként tárolódnak az adatok. Annyiban is használható ez a hasonlat, hogy az adattárolási nézet is egy folytonos tárolást tételez fel, s nem törődik az adatok blokkokba történő tördelésével, a blokkok láncolásával. Az egyes szinteken a nézetek megadása különböző adatmodellek segítségével történik. Ennek során meg szokták különböztetni magát a nézetet, vagyis azon adatokat amit látok, az adatok tárolási struktúrájától, az adatszerkezettől. Az adatszerkezet leírását sémának (schema) nevezik. Egy ház esetén a tervrajz mint szerkezeti leírás, séma szerepelhet, s maga a tervnek megfelelő szerkezettel elkészült ház lehet a nézet. A séma mondja meg például hogy van egy kút a kert sarkában. A megvalósulás pedig már egy konktét kútat tartalmaz. A különböző megvalósulásoknál a kút más és más alakban jelenhet meg. Mint ahogy több ház is felépülhet egy tervrajz alapján, ugyanúgy több nézet is létrejöhet egy séma alapján. Az adatbázis tervezésekor elsőként a sémákat kell létrehozni, s ez a váz töltődik fel a használat során adatokkal. A séma alapján felépülő konkrét adatrendszert séma megvalósulásnak, adat-előfordulásnak, angolul instance-nek nevezik. A sémák megadására valamilyen sémaleíró nyelvet. modellt lehet használni, s mivel a sémák elsődlegesen adatszerkezet definíciókként értelmezhetők, ezért, ezt a nyelvet adatdefiníciós nyelvnek is nevezik, s a DDL (Data Description Language) rövidítést használják a jelölésére. A hagyományos programozási nyelvekben is találkozhatunk DDL elemekkel, mint pl. az int, struct, array, stb. kulcsszavak, melyek többé vagy kevésbé helyileg is elkülönülnek a vezérlési nyelvelemektől. Az adatbáziskezelésnél, mint majd látni fogjuk ez az elkülönülés élesebb a hagyományos nyelveknél megszokottól. Mivel a séma csak váz, melyet majd adatokkal kell feltölteni, szükség van olyan eszközre is, mely lehetővé teszi az adatok kezelését. Az ilyen adatkezelési utasításokat végrehajtására szolgáló kifejezések alkotják az adatkezelő nyelvet, melynek rövidítése DML (Data Manipulation Language). A hagyományos programozási nyelveknél a jól megismert read, write stb. utasítások sorolhatók a DML-hez. A programok készítésénél szokásos vezérlési szerkezetek, mint ciklusszervezés vagy elágazások, létrehozására szolgáló nyelvi elemek is megtalálhatók a legtöbb DBMS-nél, habár ezek viszonylag lazábban kötődnek a DBMS-hez, annak elsődleges adatorientáltsága miatt. E laza kapcsolatot mutatja, hogy a számos DBMS nem is tartalmazott procedurális nyelvet, hanem csak egy adatkezelő, adatdefiníciós résznyelvet, melyet egy hagyományos programozási nyelvvel együtt lehetett az alkalmazások elkészítésére felhasználni. A hagyományos programozási nyelvet nevezték gazda (host) nyelvnek, s ebbe kellett beültetni az adatkezelő és adatdefiníciós utasításokat. A gazda nyelv és DB kezelő nyelv közötti kapcsolatot lazának nevezik, ha élesen elkülönül egymástól a két nyelv a programon belül, mint azt a következő példa is mutatja: if (a > 8) { EXEC SQL INSERT INTO A VALUES (3); b = 3; } Ebben rögtön látható, hogy van benne és hol DML utasítás. A szoros kapcsolat ezzel szemben azt jelenti, hogy az adatbázis DML utasításai közvetlenül nem érzékelhetők, minden adatkezelő utasítás megfelel a gazda nyelvben megadott szintaktikának. A szoros kapcsolatban rejlő nehézségek miatt napjainkban még csak a laza csatolás terjedt el. Az egyes nézetekben az adatok egyedekhez kötődve jelennek meg, ahol az adatbázis több előfordulását is tartalmazza egy egyedtipusnak. Itt az egyedtipus alatt az egyed leírására szolgáló sémát értjük, pl. egy könyv egyed esetén a könyvtári nyilvántartásban a séma egy címet, ISBN számot, egy leltári számot, kiadót, szerzőt tartalmazó rekordszerkezetként is elképzelhető. A rendszerben minden könyvet azonos szerkezettel, a könyvtipussal írunk le. Az egyes könyvek lesznek a könyv előfordulások. Az egyedelőforduláshoz tartozó adatokat szokás rekordnak is nevezni. Az ANSI/SPARC architektúra különböző szintjein egy egyed rekordjai más-más alakot ölthetnek. A külső szint rekordjai különbözhetnek egymástól az egyes nézetekben, illetve lehetnek ezen rekordoknak közös elemei is. A koncepcionális szinten létezik egy olyan koncepcionális rekord, mely az egyes külső rekordok mezőinek egyesítését tartalmazza. A fizikai szint rekordja szintén különbözhet a logikaitól, hiszen a koncepcionális rekord fikailag lehet partícionált vagy éppen tartalmazhat duplikált elemeket is. A rekord mindig egy egyedelőforduláshoz tartozik, miközben az adatbázis több előfordulást is tárolhat. Az adatbázis tehát tartalmazza az egyedeket, mint önálló egységeket, és az egyedösszességet, mint csoportot. Ebből eredően az egyedeket kezelhetjük csoportosan és egyénenként. Ezt a kétfajta megközelítést halmazorientált és rekordorientált megközelítésnek nevezik. A műveletek is lehetnek ennek megfelelően rekordorientáltak vagy halmazorientáltak. Egyes DBMS-ek különbözhetnek egymástól abban is, hogy mely megközelítést támogatják. A szintek sémáinak és nézeteinek különbözőségéből következik, hogy az egyes szintek kapcsolódásánál leképezést, illesztést kell végezni. Az egyes szintek között pedig igen intenzív kapcsolat áll fenn. Hiszen amikor egy alkalmazás, egy felhasználó kiad egy utasítást, akkor azt a saját külső sémájában fogalmazza meg. Egyidőben több ilyen utasítás keletkezhet, melyek mindegyike más-más külső sémát használhat. A műveletek összehangolására, vezérlésére minden utasítást le kell fordítani a koncepcionális szint sémájára. A fizikai szintű műveletek elvégzéséhez ismerni kell az adatok fizikai sémáját is, tehát szükség van a koncepcionális és a fizikai séma közötti leképzésre is. A fizikai művelet elvégzése után az eredmény visszajuttatásához ugyanígy el kell végezni a leképzéseket, csak most fordított irányban. A leképzések, melyek egyértelműen megnövelik a műveletek végrehajtási idejét, legfontosabb célja a már korábban említett függetlenség biztosítása. Maga a felvázolt ANSI/SPARC architektúra is az adatbáziskezelésben megvalósuló adatfüggetlenség megnyilvánulása is, hiszen a felhasználó, az alkalmazásfejlesztő függetlenítheti magát a többi alkalmazástól, a koncepcionális tervezés pedig függetlenítheti magát a fizikai, belső megvalósulástól. A leképzések elvégzése az elmondottakból következően csak a DBMS feladata lehet, hiszen az egyes alkalmazói programoknak nem kell ismerniük a teljes adatbázist, a koncepcionális sémát. A DBMS központi szerepe indokolja, hogy egy kicsit részletesebben is foglalkozzunk az általa elvégzett tevékenységekkel, belső struktúrájával. A DBMS, mint már említettük, mindkét másik DBS komponenssel, a DB-vel és az alkalmazói programokkal is kommunikál. Az adatbázishoz, mint a külső adathordozón letárolt fizikai adatszerkezethez történő hozzáféréshez a DBMS is felhasználhatja a hardware fölött elhelyezkedő operációsrendszer IO szolgáltatásait. Így a DBMS tehermentesíthető lesz az alacsony szintű IO műveletek végrehajtása alól, s egyszerűbbé válik a DBMS implementálása is. E feladat-átruházásból egyrészt az is következik, hogy a DBMS valójában nem közvetlenül a DB-vel, hanem az OS-sel áll kapcsolatban, másrészt az is érzékelhető, hogy a DBMS hatékonyságát az OS-hez történő illesztése is számottevően befolyásolja. A probléma fontosságát mutatja, hogy számos kutatási program témája a kapcsolódás hatékonyságának növelése, s már több javaslat is született a DBMS-OS kapcsolat javítására. Egy, ma még rendszerint meglévő gyenge pont a kétszintű tárolási architektúra (two levels storage) használata. Ebben az elnevezésben a kétszintűség arra utal, hogy a DBMS-nek nyilván kell tartania, hogy mely rekordjai, blokkjai találhatók meg a memóriában, s melyek vannak kint a lemezen, tehát különbséget tesz a belső és a külső tárolás között. Erre azért is szükség van mivel a DBMS az OS-től eltérő módon értelmezi az adatállományok belső struktúráját, a DBMS elemi tárolási egysége különbözik pl. az OS IO elemi egységétől, így a legtöbb DBMS saját file és bufferkezeléssel rendelkezik, melyek felhasználják az OS elemi IO szolgáltatásokat. Egy hatékonyabb megoldást jelent ezen a téren az egyszintű tárolás (single level storage) alkalmazása, melynek lényege, hogy a felhasználói processz elől elrejtsék a fizikailag meglévő tárolási struktúra megosztottságát, ami a memória és háttértár különböző kezelési módjából ered. Ebben az esetben a DBMS összes adata egyetlen egy hatalmas virtuális címtartományban helyezkedik el, ezzel egységessé válna az adatelemekre történő hivatkozás, függetlenül attól, hogy fizikailag hol helyezkedik el, nem a DBMS-nek kellene nyilvántartania, hogy a rekord most éppen benn van-e a memóriában vagy sem. Ezzel megszűnhetne az adatok dupla bufferezése is. Az IO rendszer mellett más, mind a DBMS-ben, mind az OS-ben előforduló egyéb területek is, mint pl. a védelem, vagy az osztott erőforrás-felhasználás, hasonló lehetőségeket adnak a DBMS további teljesítménynöveléséhez. A DBMS másik oldala az alkalmazói programok rétege. Természetesen nem minden program tud kommunikálni a DBMS-sel. Az alkalmazói programot fel kell készíteni az adatcserére. A kommunikáció ugyanis felügyelet alatt, megadott szabályok szerint megy végbe. Rendszerint mind a küldő, mind a fogadó oldalon létezik egy, a kommunikációra szolgáló komponens, az adatkommunikációs (DC) komponens, melyek megértik egymást, úgymond azonos nyelven beszélnek. Emellett szükség van még olyan komponensre is, mely a DBMS és az alkalmazói program között továbbítja az üzeneteket. Az üzenetküldés lehet egyszerű, ha például azonos processzen belül fut mindkét elem, de lehet összetettebb is, amikor a két oldal egy hálózat más-más csomópontján találhatók, tehát hálózati kommunikációs szoftver is szükség van. Ezen változó összetételű komponensekből felépülő, az alkalmazás és a DBMS között húzódó szoftver réteget szokás program interface-nek is nevezni. Abból a tényből, hogy a DBMS és az alkalmazói programok külön processzeket alkothatnak, következik, hogy egy általános DBS egy kliens- szerver architektúrájú rendszernek is tekinthető, hiszen van egy kliens oldal, az alkalmazói program, mely adatbáziskezelési igényekkel, utasításokkal lép fel az DBMS-sel szemben, amely az utasításokat, mint szerver végrehajtja. Ugyan a kliens és a szerver is elhelyezkedhet ugyanazon a gépen, de rendszerint amikor a kliens-szerver architektúrára gondolunk, sokunknak rögtön a hálózat jut eszünkbe, hiszen a klienst és a szervert a hálózat különböző csomópontjaihoz kötve szoktuk használni. Ennek az elrendezésnek is számos előnye van: - gyorsabb végrehajtás, több processzor dolgozik egyidejűleg - a szervert illeszteni lehet az adatbáziskezeléshez - a kliens gépet illeszteni lehet a felhasználói igényekhez - több kliens gép is csatlakozhat egy szerverhez - rugalmas kiépítés, fejlesztés Nézzük meg milyen globális folyamatok zajlanak le az adatbáziskezelő rendszeren belül. A DBMS egy sok-sok különböző egységből felépülő nagy gyárhoz hasonlítható, melyben az egységeknek összehangolt munkát kell végezniük, hogy biztosítsák a rendszer hatékony működését. A DBMS esetében a feladat összetettsége és bonyolultsága megköveteli, hogy részfeladatokat jelöljünk ki, s külön modulokat hozzunk létre az elkülöníthető tevékenységekhez. A már megismert funkcionális követelmények jó támpontot adnak a DBMS belső funkcionális felbontásához, csak néhány új fogalom szerepel majd a teljesebb leírás végett. A DBMS-ek legfontosabb komponenseinek vizsgálatánál a DBMS-t rendszerint két nagy struktúraegységre bontják, egy felhasználóhoz közeli rétegre (Data System), és egy a hardware-hez kapcsolódó rétegre (Storage System). Míg a Data System feladata az adatok adatmodell szerinti kezelése, a Storage System az adatok fizikai tárolási struktúrájával dolgozik. A DBMS-en belül a két réteg között intenzív kommunikáció folyik, mindkettő a felhasználó és az adatbázis közötti adatcsatorna szerves része. A Data System fogadja a felhasználó utasításait, majd értelmezi az utasítások végrehajthatóságát és meghatározza az utasításhoz tartozó fizikai műveletsort. Ez a műveletsor kerül át a Storage System-hez, amely saját IO rendszerében elvégzi a fizikai adatátviteli lépéseket, ügyelve a konkurens hozzáférésből és a védelmi szempontokból adódó feladatokra.



6. ábra Mindkét réteg tovább bontható funkcionális elemire. Elsőként vegyük a Data System legfontosabb komponenseit: - DC komponens, melyet már ismertettünk és melynek feladata az interface biztosítása a segédprogramok, a felhasználók felé - Utasításértelmező. E komponens feladata egyrészt az utasítások szintaktikai ellenőrzése, másrészt az utasítások tartalmi, végrehajthatósági vizsgálata. Ehhez az adott adatmodell, adatkezelő nyelv ismerete mellett szükség van a kezelt adatbázis adatbázismodelljének az ismeretére is. Itt most nem az adatok ismeretére gondolunk, hanem az adatstruktúrára illetve a védelmi és integritási feltételekre. Ezek az adatok pedig a már korábban említett metaadatok közé tartoznak. A DBMS az adatbázishoz tartozó metaadatokat az adatszótárban, Data Dictionary-ban tárolja. Az értelmezés feladatát, az eltérő jelleg miatt gyakran külön választják DDL és DML értelmezőkre. - Optimalizáló. Mivel a felhasználóktól összetett utasítások is érkezhetnek, és egyidejűleg több utasításcsoport is állhat végrehajtás alatt, nem lényegtelen az elemi utasítások végrehajtási sorrendje. Egy utasítás ugyanis rendszerint több elemi részlépésre bontható fel, több utasítás esetén a generált elemi utasítások végrehajtási sorrendje is tág határok között változhat, tehát egyazon feladatcsoporthoz több elemi utasítássorozat is tartozik, s ezen sorozatok mind helyigényben, mind gyorsaságban különbözhetnek egymástól. Emiatt a DBMS egyik lényeges feladata az optimális elemi utasítássorozat kiválasztása. - Végrehajtó. Az optimális elemi utasítássorozat végrehajtása történik ebben a modulban. Az utasítás-végrehajtás vezérlése mellett e komponens feladata az elemi utasítások végrehajtási kódjainak a tárolása, felhasználása is. Ebben a modulban is történik döntéshozatal, ugyan már sokkal szűkebb hatáskörben, mint az előző komponensnél, ugyanis bizonyos műveleteknél az algoritmusváltozat kiválasztása, csak az előző elemi lépés eredményének ismeretében történik meg. Az elemi utasítások végrehajtása során rekordszintű IO utasítások állnak elő, melyek feldolgozása már a Storage System feladata lesz. A Stotage System legfontosabb komponensei: - IO rendszer. Mint már említettük, a DBMS specifikus igényei miatt saját IO rendszert, bufferkezelést, helyfoglalási mechanizmust építenek be a legtöbb fejlettebb DBMS-be. Ez a rutinkönyvtár az OS IO kezelésénél magasabb szintű, a DBMS bufferhez kapcsolódó rutinokat tartalmaz. Ezek a rutinok már közvetlenül hívhatják az OS alacsony szintű IO rutinjait. - Konkurens hozzáférés vezérlés. Majd a későbbiekben látni fogjuk, hogy milyen eszközök állnak rendelkezésre a megosztott erőforrások kezelésére. E modul tartalmazza mindazon alacsony szintű adatstruktúrákon értelmezett módszereket, melyek az osztott hozzáférés vezérléséhez szükségesek. - Adatvédelmi rendszer. E modul feladata a különböző adatsérülések, rendszer leállások okozta veszteségek minimalizálása, az adatok megfelelő védelmének biztosítása. Ez a komponens is több olyan kisebb részből áll elő, mint pl. a rendszeres háttérmentés végzésére szolgáló rutin. Az előbbiekben felvázolt DBMS architektúrát összefoglalóan szemlélteti a következő ábra.



7. ábra A DBMS belső struktúrájával közvetlenül sem a felhasználó, sem az alkalmazás programozó nem fog találkozni, számukra rejtve maradnak a DBMS össz etettségének jelei. Ami egy felhasználót igazában érdekel, az a DBS felhasználói kapcsolattartása, azon segédprogramok rendszere, melyeken keresztül elérhetők az adatbázisban tárolt adatok. Az adatbáziskezelők segédprogramjai A DBMS fölött számtalan szoftvertermék foglal helyet, melyeket a felhasználói csoport alapján célszerű egymástól elkülöníteni, melyhez a felhasználók hármas tagolása ajánlott: - rendszermenedzser és operátor - alkalmazásfejlesztő és adatbázisfejlesztő programozók - felhasználók Az első csoport számára készültek azok segédprogramok, tools-ok, melyekkel az egész adatbázis működését érintő tevékenységek végezhetők el. Nézzük az ide sorolható legfontosabb programokat: - Adatbázis adminisztrátor monitor. Ezzel a segédprogrammal az adminisztrátori jogkörrel felruházott személy elvégezheti többek között az - az adatbázis indítását, leállítását - az adatbázis alapparamétereinek beállítását - az adatmentések elvégzését - DBMS hatékonyság és a felhasználói tevékenységek figyelését. - Loader. Külső szöveges vagy szekvenciális állományokban tárolt adatoknak az adatbázisba történő gyors betöltésére szolgál. Az adatátvitel során szűrőfeltételek adhatók meg és adatkonverziók is elvégezhetők. Az elvégzett műveletek naplózhatók is. Ezzel a segédprogram a különböző platformokon futó adatbázisok közötti adatcserére is jól használható. - Backup (Export, Import). Az adatbázis adatainak a lementésére és visszatöltésére szolgál. Bizonyos rendszereknél két külön program valósítja meg ezt a funkciót, az Export segédprogram végzi az adatok kimentését, míg az Import programmal lehet a lementett adatokat visszatölteni. A backup rendszer az adatok adathordozó sérüléséből vagy egyéb okokból eredő elvesztésének megelőzése mellett egyazon DBMS rendszer különböző verziószámú változatai közötti adatkonverzióhoz is felhasználható. A legtöbb DBMS-nél lehetőség van a szelektív mentésre, ahol a szelekció mind az adatok jellegére, mind az adatok aktualitására vonatkozhat. Ez utóbbi alatt azt értjük, hogy az adatbázisnak csak azon adatai kerülnek lementésre, melyek a legutolsó mentés óta módosultak, vagy azóta jöttek létre. A mentés során az adatbázis adatai bináris állományokba kerülnek le. A segédprogramok nagy része a következő csoportnak, az alkalmazás és adatbázis tervezőknek, fejlesztőknek készült. Az ide tartozó programok köre igen széles területet ölel fel, az interaktív eszközöktől kezdve a hagyományos programozási segédeszközökig. A szoftverfejlesztés rohamosan fejlődő területe egyre újabb módszereket, technikákat fejleszt ki, és az adatbázis- és alkalmazásfejlesztő rendszerek is követik és alkalmazzák ezen új eszközöket. Ez a gyors hatékonyságnövelő fejlődés magával hozza a fejlesztő rendszerek gyakori változását is, s a programozóknak is folyamatosan újabb és újabb paradigmákat, módszereket kell megtanulniuk. Habár a fejlesztő eszközök megjelenésükben, kezelésükben gyakran módosulnak, jellegük, céljuk azonos marad, s így behatárolható azon feladatok köre, melyek alapvető fontosságúak a fejlesztéshez. A legfontosabb segédeszközök: - Interaktív kezelő felület. Parancsorientált, vagy grafikus felületet biztosít a felhasználónak. A kiadott utasítások rögtön végrehajtásra kerülnek, s csak az eredmény kiírása után adható meg a következő utasítás. - Űrlapkészítő(Forms). Ez a modul nemcsak egy űrlap megtervezésére szolgál, hanem valójában egy alkalmazásgenerátort rejt magában, s mivel az adatbáziskezelő alkalmazások rendszerek űrlapokon keresztül jelenítik meg az adatokat, ezért nevezik ezt a komponenst űrlapkészítőnek is. A formai megjelenés mellett itt kell megadni az adatszerkezetet és a vezérlési algoritmust is. - Jelentéskészítő. Mivel az adatoknak a képernyőn, űrlapokban történő megjelenítése mellett, gyakran szükség van a nyomtatott listákra is, ezért külön komponens szolgál a nyomtatási listák gyors elkészítésére. Mind a jelentés, mind az űrlap formátumának meghatározásánál a fejlesztő rendszer felhasználja az adatbázisban tárolt metaadatokat is. - Menükészítő. Mivel egy összetett alkalmazás több elemi részfunkcióból épül fel, ahol az egyes részfunkciókhoz egy-egy űrlapot lehet megfeleltetni, ezért a részfunkciókat az áttekinthetőség és gyors elérhetőség végett menühierarchiába szervezik. A menükészítő alkalmazása esetén elegendő a menüszerkezet hierarchiáját egy egyszerű nyelvvel leírni, a hozzá tartozó kód ezután már automatikus generálódni fog. - Program interface. Mivel az űrlap és jelentéskészítő komponensek a tipikus alkalmazás felépítését követik, ezekhez igazítottak, ezért igen nehéz nem tipikus, speciális követelményekhez igazodó alkalmazások elkészítése ezen eszközökkel. A hagyományos programozási nyelvek sokkal nagyobb rugalmasságot biztosítanak ebben a tekintetben, ezek hátránya viszont, hogy a rendszerkönyvtáraik nem biztosítnak DBMS szintű adatkezelést. E probléma megoldására szolgálnak a DBMS-ek programinterface-i, melyek egy-egy programozási nyelvéhez tartozó függvény és eljáráskönyvtárban és előfordítókban testesülnek meg, és segítségükkel a normál programforrásszövegbe beszúrhatók a kapcsolódó DBMS adatkezelő utasításai is, tehát a programból elérhetővé válnak a DB-ben tárolt adatok is. - CASE eszközök. Az adatbázis megtervezéséhez nagyszámú feltételt és körülményt kell figyelembe venni. Az elemzés eredményét egy olyan adatmodellbe kell letárolni, mely közvetlenül felhasználható az adatbázis létrehozásához. A nagy adatmennyiség mellett, egy ebből fakadó másik problémát jelent, hogy a tervezés rendszerint nem egy ember munkája, hanem csapatmunka. Emiatt különös gondot kell fordítani a dokumentációk szabványosságára, a feladatok kiosztására. A CASE eszközök jelentős segítséget nyújtanak a tervezésben, a csoportmunka összehangolására. Legtöbb esetben a CASE komponens eredménye közvetlenül felhasználható az űrlapok és jelentések, menük generálásához. A felhasználók számára elkészült alkalmazói programok nagy része egyedi megrendelésre készült, az előbb említett fejlesztői eszközök segítségével. Vannak azonban olyan gyakrabban igényelt szolgáltatások, alkalmazások is, melyeket a szoftvergyártó cégek polcról levehetően árusítanak. Ezen cégekhez tartozik a DBMS gyártók mellett több független szoftverfejlesztő cég is. Mivel az alkalmazások elképesztően széles területet ölelnek át, a banki, gyártásirányítási rendszerektől kezdve a különböző szakértői rendszerekig terjedően. E terület teljes áttekintése helyett, mely helyigénye jóval meghaladná a rendelkezésre álló kereteket, ezért csak ízelítőt adunk e terület sokszínűségéről az egyik nagy DBMS gyártó cég, az Oracle ilyen irányú kínálatából merítve: - Dokumentum nyilvántartó rendszer. Különböző szöveges dokumentumokban letárolt információk karbantartására, visszakeresésére szolgál, ahol a keresést kulcsszavak megadásával lehet könnyíteni. A dokumentumok adatbázisokban és normál állományokban is tarthatók. A rendszer alkalmas a dokumentumok és a strukturált adatok kombinálására is, és a összekapcsolható a különböző fejlesztőrendszerekkel is. A program fejlettebb változataiban már hypertext és multimédia lehetőségek is beépítésre kerültek. - Office program. Ez egy hivatali, ügyviteli programcsomag, amely magában foglal többek között szövegszerkesztőt, levelezőrendszert, elektronikus naplót, egy kis személyi kalkulátort. A rendszer egy vállalat több egységét köti össze a helyi hálózaton keresztül. - Interaktív adatlekérdező. Programozói, adatbáziskezelői ismeretekkel nem rendelkező felhasználók részére biztosít, egy könnyen kezelhető felületet az adatbázis felé. Táblázatos formában, menü- vagy egérvezérelten kezelhető program, mellyel gyorsan végrehajthatók a lekérdezések, adatmódosításokat, adatfelviteleket. A rendszer egyszerűbb jelentések elkészítésére is alkalmas. - Adatvizualizáció. Ezen alkalmazással az adatbázisban letárolt adatok grafikus táblázatokban jeleníthetők meg, emellett lehetőség van képek, rajzok elkészítésére, letárolására is. A korszerűbb változatokkal már multimédia alkalmazások is futtathatók. A grafikus felület emellett monitor funkciókhoz kapcsolhatók, azaz, grafikusan is nyomonkövethetők az adatok értékeinek változása. - Vállalati nyilvántartó rendszer. A termék több, önállóan is használható részfunkciót foglal magába, melyek közül a legismertebbek a számlázó rendszer, a könyvelési rendszer, a pénzügyi és személyzeti rendszer, a rendelések és a raktárak nyilvántartása. - Termelés tervező rendszer. A rendszer az erőforrások és kapacitások nyilvántartása mellett az erőforrások kiosztásának megtervezésére is lehetőséget ad. A várható piaci igények elemzésével meghatározható a termelés ütemezése. - Gyártás ütemező és vezérlő rendszer. A költségtényezők és a technológiai megkötöttségek, kiválasztott ütemezési módszer alapján optimalizálható a gyártás, s felmérhetők a gyártási rendszer esetleges gyenge pontjai is. - Vezetői információs rendszerek. A vállalat felsőszintű vezetése számára biztosítja a szükséges összesített adatokat, lehetőséget adva bizonyos statisztikai kiértékelésekre. A rendszer felhasználható döntéshozatali segédeszközként is. A felsorolást még sokáig lehetne folytatni további alkalmazási területekkel, de talán már ebből is érzékelhető, hogy az adatbázisok alkalmazásának fő területeivé a vállalati nyilvántartási és termelésirányítási rendszerek, valamint az államigazgatási nyilvántartó rendszerek váltak. Az említett alkalamazásokban a DBMS központi szerepet tölt be, hiszen az összes többi komponens ráépül a DBMS-re, tehát az alkalmazásokban is a DBMS lehetőségei és jellege tükröződnek vissza. Így nemcsak az adatbázis menedzsernek, hanem az alkalmazásfejlesztő programozóknak is ismerniük kell a DBMS lehetőségeit és kezelő felületét. Mint már említettük, az idők folyamán több különböző DBMS-t fejlesztettek, nagyobb részük részleteiben kidolgozottan kutatási célból jöttek létre, de ma már számtalan DBMS a piacon is kapható. Nemárt, ha el tudunk igazodni a DBMS-ek sokszínű világában, tudjuk hogyan lehet a DBMS segítségével az adatbázishoz hozzáférni, ezért a következő fejezetben a DBMS-ek viselkedésével foglalkozunk, és bemutatjuk a külvilág, az alkalmazások felé nyíló megjelenését. Az adatbáziskezelő rendszerek osztályozása A DBMS-ek most megadandó osztályozása nem a belső felépítésen, hanem a DBMS-nek a fejlesztő, a felhasználó felé mutatott képén alapszik, melyhez az alábbi szempontok köthető: - adatmodell - felhasználók száma - DBMS csomópontok száma - támogatott hardware és OS típusok A kezelő nyelvet, a DBMS viselkedését tekintve a legalapvetőbb kritérium a DBMS-hez tartozó adatmodell, de ennek ismertetése előtt a többi, gyorsabban áttekinthető szempontot tekintjük át. A felhasználók száma alapján, hasonlóan az operációs rendszerekhez, megkülönböztetünk egyfelhasználós és többfelhasználós rendszereket. Ugyan korábban azt említettük, hogy az adatbáziskezelést elsődlegesen a többfelhasználós környezetre tervezték, de a hatékonyabb adatkezelés, az egyszerűség, olcsóság miatt, esetleg betanulási céllal sokan vásárolnak egyfelhasználós rendszereket is, melyek szinte kivétel nélkül az egyfelhasználós operációs rendszereken, pl. az MSDOS, Windows alatt futnak. A DBMS csomópontok száma alapján beszélhetünk egyedi DBMS-ről, amikor csak egy gépen fut a DBMS, és osztott DBMS-ről, amikor több csomóponton is fut egyidejűleg a DBMS. A támogatott hardware és OS megadása a felhasználó számára a termék kiválasztásakor válik fontossá, hiszen a meglévő és tervezett hardware és OS feltételek behatárolják a választási lehetőségeket. Az adatmodell, mint már említettük az adatok logikai tárolási formátumát határozza meg, egy olyan vázat ad meg, melybe az adatok majd beletölthetők lesznek. Az adatmodell megadása eszerint egy szerkezetleírást jelent, hasonlóan egy normál program struktúra deklarációjához. Ezt az elképzelést azonban meg kell még toldani annyival, hogy az adatrendszer ismerete nem csak az adatszerkezet ismeretét, hanem az adatok kezelési módjának az ismeretét is magában foglalja. Ezért az adatmodellbe a statikus szerkezet leírás mellett a dinamikus, az adatokon értelmezett műveleteket is beleértik. Az adatmodell megadásánál mind a szerkezet, mind a műveletek megadása logikai szinten, s nem fizikai szinten történik, ezért az adatmodell egy elvontabb absztraktabb, formálisabb leírást jelent. Összegezve tehát az adatmodell egy olyan matematikai formalizmus, mely az adatok és az adatokon értelmezett műveletek leírására szolgál. Az egyes adatmodellek a kiválasztott formalizmus jellegében különböznek egymástól, a deduktív adatbázisok például logikai formalizmust használnak fel. Ugyan több adatmodell is létezik, de ezekből négy terjedt el igazán a gyakorlati életben: a hierarchikus, a hálós, a relációs és az objektum orientált adatmodellek. Ezek közül a relációs adatmodell a legnépszerűbb ma, a hálós modell kezd háttérbe szorulni, míg a hierarchikus már inkább a múlté, míg az objektum orientált modell a jövőben válik csak igazán piacéretté. A hierarchikus adatmodell az adatokat egy hierarchikus faszerkezetben tárolja. E fa mindegyik csomópontja egy rekordtípusnak felel meg. A hierarchikus modell alapja, hogy a gyakorlati életben a szervezetek vagy éppen a struktúrák nagyon gyakran hierarchikus felépítésűek, gondoljunk csak a vállalati hierarchiára vagy egy gyártmány alkatrészeinek hierarchiájára. Emiatt természetesnek tűnik, hogy a modellezés megkönnyítésére a valóságban leggyakrabban használt, hierarchikus modellt hozzuk létre. Ez a modell a gyakorlati alkalmazások során fejlődött ki , ezért nincs olyan elméleti megalapozottsága mint a későbbi adatmodelleknek. A modellhez kapcsolódó DML nyelvek mind rekordorientált adatmegközelítést alkalmaztak. A bonyolultabb kapcsolatok ábrázolása csak kerülőutakon lehetséges. A modell előnye, hogy a hierarchikus szerkezet egyszerűen leírható és tárolása a mágnesszalagos tárolási formához is jól illeszkedik. A hálós adatmodell a hierarchikus modell továbbfejlesztése, mely jobban illeszkedik a bonyolultabb kapcsolatok ábrázolásához is. Ebben a modellben az egyedek között tetszőleges kapcsolatrendszer, egy kapcsolatháló alakítható ki. Az adatszerkezet leírása, mivel a háló tetszőleges nagy lehet, nem egy adategységgel, hanem több kisebb, hierarchikus felépítésű adategységgel történik. Ehhez a modellhez is rekordorientált adatmegközelítést alkalmaztak a DML kialakításakor. A hálós modellen alapuló DBMS igen elterjedtek a nagygépes környezetben, hiszen a hálós modell nagy adatmennyiségek viszonylag gyors feldolgozását teszi lehetővé. A kezelőnyelv bonyolultsága, viszonylag merevebb szerkezete gátolta szélesebb körben történő elterjedését. A relációs adatmodell sokkal rugalmasabb szerkezet biztosít az elődeihez viszonyítva. Az adatbázis azonos rekordtípusokat tartalmazó táblákból épül fel, ahol minden tábla teljesen egyenértékű, s nincs semmilyen az adatdefiníciókor véglegesen lerögzített kapcsolat, váz, mint ami az előző modelleknél előfordult. A relációs modellben az egyedek közötti kapcsolatok az adatértékeken keresztül valósulnak meg. A relációs modellben a táblákon értelmezett műveletek ugyan halmazorientáltak, de számos olyan implementáció létezik, melyben rekordorientált műveletek használhatók. A modell elterjedése az egyszerűségének és rugalmasságának köszönhető. Az objektum orientált modell célja az objektumorientáltság szemléletmódjának alkalmazásával minél valósághűbb adatmodellt megalkotása. Az egyedek ugyanis sokkal szemléletesebben írhatók le az objektumokkal, mint a relációs modellben szereplő rekordokkal. Az objektum orientáltság a megvalósult rendszerekben lehet teljes vagy részleges. A részleges OODBMS-ek rendszerint csak strukturálisan objektum objektum orientáltak, a funkcionális, aktív elemek csak a teljes OODBMS-ekben jelennek meg. Az OODBMS-ek elterjedését az egységes elméleti alapok hiánya és az implementációs nehézségek fékezik. Az egyes adatmodellek ismertetéséhez, bővebb leírásához szükség van bizonyos adatmodellezési alapfogalmak megismerésére, melyek szorosan kötődnek az adatbázisrendszerek tervezésének módszertanához, ezért a fenti modellek teljesebb bemutatására a későbbi fejezetekben fog sorra kerülni. Az adatbázisrendszerek tervezési lépései Az adatbázisrendszerek tervezésének vizsgálatakor abból a tényből kell kiindulni, hogy a DBS is egy számítógépen futó program, egy software termék, ezért az általános szoftverfejlesztési irányelvek itt is érvényesek. A szofverfejlesztés (SE Software Engineering) általános metodikája mellett természetesen a DBS-ek specifikumait is figyelembe kell venni. Az SE folyamatának egyik szemléletes megjelenítője az SE piramis, melyben



8. ábra A piramis a következő lépéseket foglalja magába: - követelmény analízis: a vizsgált problématerület elemzése, a a megoldandó feladatok, a követelmények meghatározása - rendszerelemzés: a problématerület modellezése, a belső struktúrák és működés feltárása több különböző szemszögből és különböző részletességgel - rendszertervezés: az elkészítendő szoftver belső struktúrájának, működésének több különböző szemszögből történő feltárása, különböző részletesség mellett - kódolás: az elkészült modell leírás átkonvertálása a számítógép által érthető formára, valamely programozási nyelvet felhasználva - tesztelés: az elkészült kód hibamentességének ellenőrzése - karbantartás: folyamatos ellenőrzés, módosítások, hibakijavítások sorozata Természetesen itt nem szabad elfelejteni, hogy a tervezés folyamata nem egy egyszerű szekvencia, mivel bizonyos elemek többször is megismétlődnek, s a tervezés egy ciklikus folyamattá alakul át, s a fenti felsorolás ennek a ciklusnak az elemeit sorolja fel egy kvázi, logikai sorrendben. Ha az egyes tevékenységek absztrakciós szintjeit vizsgáljuk, akkor látható, a piramisban fentről lefelé haladva egyre csökken a leírásmód elvontsága és egyre nagyobb szerepet kap a konkrétabb megfogalmazás. A szoftvertermék leírása a fejlesztés során fokozatosan alakul át az absztrakt, esetleg pármondatos köznapi leírásból a futtatható többezer soros gépi kódsorozatig. Ez az átalakulás a modellek sorozatán keresztül valósul meg. Előbb absztraktabb, majd később konkrétabb, részletekkel gazdagított modellek jelennek meg. A DBS rendszer sem tér el ettől fejlesztési metodikától, sajátossága, egyedisége leginkább a felhasznált modellekben rejlik. A DBS rendszerek jellegzetessége, hogy kiemelt helyen, elsődlegesen az adatrendszerre koncentrál. Különösen fontos tevékenység az adatbázis megtervezése, hiszen a DBS központjában a DB áll, s ennek hatékonysága, korrektsége az összes alkalmazás teljesítményére kihat. Az adatbázis tervezése kettős célt követ, egyrészt ki kell elégíteni a felhasználók információ-igényét, az információkat könnyen kezelhető struktúrába kell elhelyezni. Másrészt ügyelni kell az információfeldolgozás igényeire is, melyek többek között a végrehajtás sebességét, a helyigényt érintik. A DB tervezésékor is több modellen keresztül jutunk el a fizikai adatbázishoz, hiszen induláskor rendszereint csak igen informális ismereteink vannak a feladatról, a modellezett világról. Ezzel szemben az elkészített adatbázisrendszer egy igen szigorú, formális nyelvvel írható le. Több modell létezik, melyek különböző absztrakciós szinteken írják le a megvalósítandó adatbázist. Mivel ezek mindegyike az adatbázis leírására szolgál, mindegyikre használható az adatmodell kifejezés. Az adatmodelleket alapvetően két nagy csoportba szokás osztályozni, az egyik adatmodelltipus a szemantikai adatmodell (SDM) vagy koncepcionális (concepual) adatmodell, mely elvontabb szinten, részletek nélkül, emberközelien írja le az adatszerkezetet. Az SDM-ek alkalmasak az adatbázis lényegének a kiemelésére, a szerkezet megértésére. Egy adott adatbázis SDM ugyanaz marad akkor is, ha esetleg módosul a kiválasztott DBMS, hiszen a modellezett valóság is változatlan marad, s az SDM valóságközeli modell- leírás. A másik csoport a konkrétabb, DBMS közeli adatmodellek köre, melyekből már megemlítettük a relációs, hálós, hierarchikus és OO modelleket. Ezek a modellek a rugalmasságaik ellenére mégiscsak egyfajta korlátozást, keretet szabnak, melybe bele kell gyömöszölni a valóságot. A valóság tökéletes leírásához azonban a meglévőnél sokkal gazdagabb lehetőségekre lenne szükség, mint amit a hagyományos DBMS adatmodellek támogatnak. Mivel ezek a modellek túlságosan távol vannak a modellezett valóság közvetlen leírásától, ezért rendszerint felhasználják a szemantikai adatmodelleket is a tervezésnél, első lépcsőként, s az elkészült SDM-et konvertálják át DBMS adatmodellre. A modellek szerepének kiemelésével újrafogalmazhatjuk az adatbázis tervezésének főbb lépéseit: - Igényfelmérés és analízis - Koncepcionális adatbázismodell elkészítése - DBMS rendszer kiválasztása - A fogalmi modell átkonvertálása adatbázis adatmodellre - A fizikai adatmodell tervezése - Adatbázis implementálás Az egyes tervezési lépések módszereinek és eszközeinek részletes tárgyalására egy későbbi fejezet keretében fog sorkerülni.