Adatbázisok - 4. rész
Az adatbázisokról szóló sorozat első három cikkében áttekintettük az relációs adatbázisok alapját és azok legfontosabb
tulajdonságait. Ezek az információk szerves részét képezik annak anyagrésznek,
amelyet a mostani cikkünkben elkezdünk. Ez pedig nem
más, mint a relációs adatbázisok szabványosított lekérdező nyelve: az SQL
nyelv.
Egy kis történelem…
1970-ben Codd alkotta meg a relációs adatmodell
alapjait, és Ő volt az személy is, aki legelőször
javaslatot tett egy egységes, a relációs adatmodellen alapuló új programnyelv
létrehozására. A legelső, a relációs adatbázismodell koncepcióján alapuló
lekérdezőnyelv az ALPHA volt. Nagyon sok más nyelv is megszületett ebben az
időben, amelyek szintén az ALPHA filozófiáján alapultak (pl. SEQUEL, QUEL, SIDA
stb.), de ezek soha nem terjedtek el széles körben, és éppen emiatt soha nem is
váltak szabvánnyá. Sokan ekkor még kétkedésüknek adtak hangot, hogy a relációs
modellen alapuló adatbázisok valóban életképesek-e?
Az igazi áttörést az 1980-as évek elején megjelenő személyi számítógépek
(PC) és azok széles körben való elterjedése hozta magával. Ekkor született meg
a dBase, majd később a FoxBase,
Clipper és sok más, szintén PC-re írt relációs adatbáziskezelő nyelv. Az IBM cég által 1983-ban megjelentetett
DB2 adatbáziskezelő rendszer alapján 1986-ban az ANSI
(Amerikai Szabványügyi Hivatal), 1987-ben pedig az ISO
(Nemzetközi Szabványügyi Szervezet) is szabványosította az SQL (struktúrált lekérdező nyelv) nyelvet.
Hiba lenne azt gondolni, hogy ekkor az az SQL
szabványosítása itt véget ért. Nemsokára újabb szabványok is megszületettek
(Pl. SQL89, SQL92), amelyek már az időközben felmerült igényekből megszületett
fejlesztéseket, módosításokat vagy éppen kiegészítéseket is tartalmaztak.
Az SQL nyelvet alapul véve, több adatbáziskezelő
rendszer is létrejött az idők folyamán. Így született meg a MsSQL
Server, Oracle, Paradox csak, hogy a legjelentősebb
adatkezelő rendszereket említsem. Ezek általános jellemzője, hogy bár az SQL
nyelv szabványos elemeire épülnek, de a gyártók ennyivel nem elégedtek meg,
mert termékeikbe beépítettek kisebb-nagyobb kiegészítéseket, ezáltal növelve
meg az adott rendszer funkciókészletét. Így hoztak létre gyakorlatilag új
lekérdező programnyelveket. Pl. a Microsoft SQL Serverében ezt Transact SQL-nek, még az Oracle
rendszerében PL/SQL-nek nevezzük.
Joggal tehetjük fel most a
következő kérdést:
Mennyire szabványosak, vagy éppen mennyire kompatibilisek egymással ezek a
rendszerek? Erre egy kicsit bonyult helyes választ
adni. Általánosságban azt mondhatjuk, hogy ameddig a szabvány SQL lekérdező
nyelvet használják a relációs adatkezelő műveletekhez, valamint az adattáblák
felépítése is a szabványosított SQL-ben lefektetett megállapodások szerint épül
fel, addig gond nélkül lehet adatokat egyik rendszerből a másikba importálni,
adatokat cserélni az egyes adatbázisok között.
Mihelyst azonban az egyes rendszerek sajátosságainak megfelelően, vagyis az
SQL szabványtól eltérő módon szeretnénk adatműveleteket végrehajtani, problémák
adódhatnak az egyes adatbáziskezelő rendszerek
között.
Minden relációs adatbáziskezelő nyelvre jellemző, hogy az adatokat logikai
táblaként értelmezik.
(Az, hogy az adatokat a háttértárolón vagy éppen a memóriában fizikailag
hogyan tárolják, az ebből a szempontból számunkra nem lényeges.) Minden
relációs adatbáziskezelő nyelvben éppen ezért mindig
az eső lépés a relációk (vagyis a táblák) szerkezetének a pontos meghatározása,
valamint az ebben szereplő attribútumok (tulajdonságok) megfogalmazása. Ez azt
jelenti, hogy pontosan definiáljuk az egyes tulajdonságok típusát és méretét
(hasonlóan a programozási nyelvek változóinak deklarációjához), meghatározva
ezzel azt, hogy a későbbiekben milyen értékeket tárolhatnak.
Bár az adattípusok az egyes rendszerekben nagyon eltérőek is lehetnek,
mégis minden rendszer tartalmazza a következő attribútom-típusokat:
·
numerikus
egész
·
decimális
·
karakteres
·
dátum
·
logikai
(Később pontosan is bemutatásra kerülnek majd az egyes adatbázisrendszerek
saját típusai.)
Kétféle adatbáziskezelő nyelv létezik. Az egyik
az ún. host (befogadó) típusú nyelv,
amely csak egy másik programnyelvvel együtt képes működni. Ez igaz a relációs
adatkezelő rendszerekre is. Aki programozott már PHP-ben,
vagy éppen ASP-ben az tudja, hogy adatkezelő
műveleteknél csak az SQL szabványban meghatározott parancsokat használhatjuk.
Ilyenkor a HTML és PHP/ASP kódba szúrjuk bele az SQL parancsokat, és ezen programnyelvek parancsértelmezője hajtja végre az SQL
utasításokat. Hasonlóképpen pl. a Pascal nyelvben is
használhatunk SQL parancsokat.
Az adatbáziskezelő nyelvek másik típusa, ún. önálló
programnyelv. Ez azt jelenti, hogy magában a programozási nyelvben is találunk
adatkezelő utasításokat a hagyományos programozási utasítások (ciklus- és feltétel kezelés, Input/Output utasítások stb.) mellett.
Ilyen önálló adatkezelő nyelv pl. a dBase nyelv.
Mi azonban ebben a cikksorozatban nem foglalkozunk az önálló programozási
nyelvekkel, csak megemlítettük, hogy ilyen is létezik.
Nézzük inkább meg az SQL parancsok csoportosítását.
Általánosságban az SQL parancsokat három csoportba sorolhatjuk.
Az első csoportba tartoznak az ún. adatdefiníciós SQL parancsok. Ezeknek a
parancsoknak a segítségével hozunk létre adatbázisokat és adattáblákat,
valamint ugyanezen utasítások segítségével tudjuk a táblákat adatokkal
feltölteni, a táblákat/adatokat módosítani, vagy éppen törölni.
A második csoportba tartoznak a lekérdező parancsok. (Valójában ebből
csak egy parancs létezik az SQL nyelvben, de később látni fogjuk, hogy ennek az
egy parancsnak a használatával hányféle lekérdezést fogunk tudni megvalósítani.
Ezért is használom tudatosan a többes számot.)
Végül, de nem utolsó sorban vannak vezérlő parancsok
amelyekkel pl. fájlok megnyitását/lezárását, kurzorok létrehozását tudjuk
vezérelni.
A következő cikkünkben részletesen is megismerkedünk az SQL parancsokkal.
Kiszely Gábor - kg@kgb.hu