HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

MS SQL adatbázis kezelés Delphi-ből


1. rész


Most induló cikksorozatunkban az MS SQL adatbázis kezelését vizsgálgatjuk teljesen az alapoktól indulva. Így a cikksorozatot bátran ajánljuk mindenkinek, azoknak is, akik eddig még csak paradox, vagy dbase adatbázissal foglalkoztak és azoknak is akik már esetleg használják a MS SQL-t.

A sorozat 32 része alatt igen részletesen, példaprogramokkal alátámasztva bemutatjuk, lépésről-lépésre leírva, hogy miként is használhatunk MS SQL adatbázisokat saját alkalmazásainkhoz.

A majdan mellékelt példákhoz az MS SQL 7-es verzióját használtuk, de a példák legnagyobb részénél ennél régebbi verzió is elegendő.

Bevezető - Előzmények

A hatvanas években adatokat nagy tömegben jellemzően mágneses háttértárakon tároltak. Az állományok fájlokat jelentettek, a fájlok rekordokból álltak, a rekordokat pedig igény szerint mezőkre lehetett osztani. Hogy egy ilyen adatállományon milyen alapműveleteket lehet elvégezni, azt először a CODASYL szabványosította 1969-ben, amikor leírta a COBOL nyelvet. Az első adatbázis-kezelő rendszert az IBM készítette el szintén 1969-ben (Information Management System, IMS). Ez a rendszer fastruktúrában tárolta az adatokat. A CODASYL szabvány később többször módosult, jelentős újításokat is hozott, voltak azonban problémái.

1972-ben mutatta be E. F. Codd a relációs adatmodellt. A modell a logikailag hasonló egyedeket táblába rendezi, az egyes egyedeket pedig bizonyos tulajdonságai alapján keresi vissza, és ezeket a tulajdonságokat kulcsoknak nevezi el. Az adatmodell elnevezése a matematikai halmazelmélettel való rokonságra utal. 1976-ban P. Chen továbbfejlesztette Codd modelljét, melynek neve ezek után Entity Relationship Model, ERM.

Ebben az évben Codd, Chen és C. Date az IBM-nél egy olyan adatbázisnyelv létrehozásán dolgoztak, amely szabványosítja mind az adatszerkezetek létrehozására, mind az adatok kezelésére vonatkozó utasításokat. 1976-ban az IBM be is jelentette a SEQUEL-t (Structured Query Language), aminek a neve a későbbiek folyamán SQL-re rövidült.

A nyolcvanas években több más cég is saját SQL változatot fejlesztett ki, az Oracle 1983-ban, illetve a Relational Co. 1984-ben. 1986-ban született meg az első ANSI szabvány, 1987-ben pedig az első ISO szabvány. Időközben új cégek jelentek meg a piacon, mint például a Sybase, és a Relational Co. kettéválásával az Informix és az Ingres. 1989-ben megszületett a második ISO szabvány. (ISO 9075:1989)

1989 után az objektum orientált programszemlélet és a hálózatok elterjedése újabb fejlesztéseket tett lehetővé és szükségessé. A harmadik, és máig utolsó szabvány az ISO 9075:1992, vagy röviden SQL92. A szabvány 3 fejlesztési szintet ismer el: entry level SQL92, intermediate level és full SQL92. A Microsoft SQL Server 7.0 az entry level SQL92-t valósítja meg.


Mire jó az SQL Server?

Az SQL Server Microsoft Windows platformra fejlesztett rugalmas és nagy teljesítményű, kliens-szerver (ügyfél-kiszolgáló) architektúrájú adatbázis-kezelő rendszer. Képes kezelni akár terabájtnyi méretű adatbázisokat is, ugyanakkor alkalmas kisvállalati és laptop adatbázisok támogatására. Méretezhető, vagyis Windows 95-öt vagy Windows 98-at futtató számítógépektől egészen a Windows NT Server Enterprise Editiont futtató többprocesszoros fürtökig mindegyik felületen ugyanaz a kód futtatható.

Az SQL Server automatikus finombeállítást és adatbázis adminisztrációt végez, telepítés után operátori finomhangolás nélkül is kiváló teljesítményt nyújt. Illeszkedik a Windows NT-hez, az Internet Information Serverhez és a Site Serverhez, így ideális felület elektronikus kereskedelmi alkalmazások fejlesztéséhez. Integrált OLAP szolgáltatásokat nyújt.


Az SQL Server részei

Az SQL Server kiszolgáló és ügyfél oldali komponensekből áll, valamint azokból az adatbázis objektumokból, amelyek az adatszerkezetek felépítését és az adatintegritási mechanizmusok megvalósítását támogatják.

Kiszolgáló oldali komponens az SQL Server szolgáltatás (SQL Server service), az SQL Server Agent szolgáltatás és a Distributed Transaction Coordinator (MS DTC). Az SQL Server szolgáltatás a rendszer legfontosabb komponense. Ő hajtja végre az ügyfél-alkalmazások által küldött SQL utasításokat és ő kezeli az adatbázisok összes állományát. Elosztja a rendelkezésre álló erőforrásokat egyidejű elérés esetén, felügyeli és megőrzi az adatbázisok integritását.

Az SQL Server Agent ütemezési és riasztási feladatokkal foglalkozik. A feladatok kötegekbe rendezhetők, és egy tetszőleges időpontban indíthatók, vagy akár bizonyos időközönként többször is végrehajthatók. A riasztások eseményhez kötöttek, ilyenkor üzenetet küldhetünk e-mailben vagy személyi hívóra, ütemezett feladatot indíthatunk.

Az MS DTC, vagyis elosztott tranzakció kezelő, ahogy neve is mutatja, olyan tranzakciók lebonyolításáért felelős, amelyek különböző helyeken lévő adatforrásokat használnak egyidejűleg. Az MS DTC felel azért, hogy a tranzakcióban előírt módosítások mindegyik adatforráson végrehajtásra kerüljenek, vagy hiba esetén sehol se történjen változás.

Az ügyfél oldali komponensek lehetőséget nyújtanak az adatbázisok megtervezésére, az adatok karbantartására és lekérdezésére, egyéb adminisztrációs feladatok elvégzésére. Legfontosabb eszközünk az SQL Enterprise Manager. Az SQL Server 7.0-ban az Enterpise Manager felülete a Microsoft Management Console (MMC). Az MMC a Microsoft egységes adminisztrációs felülete, része az operációs rendszernek, és az egyes programok csak snap-in modulokat mellékelnek hozzá. Egy ilyen MMC snap-in az Enterprise Manager is.

Nézzük meg, telepítés után milyen fontosabb ügyfél oldali programokat kapunk az Enterprise Manageren kívül.
  • Performance Monitor: A Windows NT Server saját Performance Monitorjához tartozó kiegészítés, az SQL Server működésének és teljesítményének átfogó monitorozását teszi lehetővé.
  • Profiler: A kiszolgáló működésének figyelésére és naplózására használható segédprogram.
  • Query Analyzer: Alapvetően lekérdezések futtatására szolgáló program, de lekérdezéseink optimalizálására is alkalmas.
  • Client Network Utility: Az ügyfél oldali programkomponensek konfigurációjának kezeléséhez használatos segédprogram.
  • Service Manager: A szolgáltatások (services) elindítására és leállítására szolgáló program.

Az előbb felsorolt grafikus felülettel rendelkező programok mellett meg kell említeni két fontos parancssori eszközt is. A bcp adatexportra és -importra használható. Paraméterekkel megadható formátumba írhatjuk ki (vagy éppen olvashatjuk be) az adattáblák tartalmát. Az osql-t SQL utasítások parancssori végrehajtására használhatjuk. Az SQL Serverrel ODBC-n keresztül kommunikál.

Az SQL Server adatbázisai jórészt táblákból épülnek fel. A táblák mellett azonban más adatbázis objektumok is szerepet játszanak. A legfontosabbak a következők (későbbi fejezetekben mindegyik elemről részletesen lesz szó):
  • Tábla: Az adatok tárolásának helye. Az egyed-előfordulásokat sorok reprezentálják, az egyedek tulajdonságait az oszlopok.
  • Adattípus: Az egyes oszlopok lehetséges adatértékeit határozza meg.
  • Constraint: Az oszlopok lehetséges értékeire szabályokat adhatunk meg, ezek a szabályok a constraint-ek.
  • Default: Ha egy oszlopban nem adunk meg értéket, az automatikusan a default értékét veszi fel.
  • Index: Az adatok gyorsabb elérését lehetővé tevő tárolási szerkezet.
  • View: Fizikailag különböző helyeken lévő adatokat logikailag egy táblába, view-ba rendezhetjük.
  • Stored procedure: SQL utasítások egy halmaza, egy rutin, ami meghívásakor egyszerre hajtódik végre.
  • Trigger: Bizonyos események bekövetkeztekor automatikusan végrehajtódó tárolt eljárás.



Az adatbáziskezelésről általában (SQL Server szemszögből)

A relációs adatbázisok alapelemei a táblázatok. Nevezzük egyednek azt a valamit, amit le akarunk írni, és hívjuk tulajdonságnak azokat a valamiket, amivel le akarjuk írni az egyedet. Az egyes egyed-előfordulások a táblázatban sorokba rendeződnek úgy, hogy azonos jellegű tulajdonságai oszlopokat alkotnak. Példaképpen álljon itt egy tábla az SQL Server példa adatbázisából.

Employees
EmployeeID LastName Title City BirthDate
1 Davolio Sales Representative Seattle 1948.12.08.
2 Fuller Vice President Tacoma 1952.02.19.

Ez a tábla a NorthWind cég alkalmazottait tartalmazza. Az előző nómenklatúra szerint Fuller egy egyed, aki az alkalmazott nevű egyedtípusba tartozik. Az egyedtípus tulajdonképpen egy absztrakt osztály, ahová az egyedek tartoznak. Példánkban az egyedek alkalmazottak, és nem katonák vagy mesehősök. Ugyanígy a tulajdonságok is tulajdonságtípusba tartoznak. Fuller egy tulajdonsága például, hogy 1952.02.19., ami tulajdonság a születési idő tulajdonság típusba tartozik.

Az SQL Serverben az egyes tábláknak egyedi nevük van, a neveket célszerű úgy megválasztani, hogy az utaljon a tárolt információ jellegére. A táblák sorokból és oszlopokból épülnek fel. A sorokat rekordoknak is nevezzük, az oszlopok a rekordokat mezőkre osztják. A sorok és oszlopok sorrendje közömbös. Egy táblán belül minden oszlop nevének egyedinek kell lennie. A táblanevek és oszlopnevek egyediségéről az SQL Server fizikai szinten gondoskodik.

A táblában található minden rekordnak is különbözőnek kell lennie. Erre a korlátozásra nincs direkt módon ellenőrzés, tehát elvileg kreálhatunk azonos egyedeket tartalmazó táblát. Ám ennek nem sok értelme van, hiszen így nem tudnánk eldönteni egy adott sorról, hogy az most melyik egyedre vonatkozik. Ezt a korlátozást egy speciális rendeltetésű oszlop vagy oszlopcsoport érvényesíti, az elsődleges kulcs. A kulcs értéke minden sorban különböző.

Léteznek oszlopszintű korlátozások is, ilyen például a Not Null vagy a Unique korlátozás. A Not Null korlátozás megköveteli, hogy az oszlopban legyen adat. Ha nincs ilyen korlátozás, az oszlop értéke lehet Null, ami gyakorlatilag azt jelenti, hogy nincs adat. Nem azonos a 0 vagy üres sztring adattal. A Unique korlát megakadályozza, hogy egy oszlop két azonos tulajdonságot tartalmazzon, vagyis garantálja, hogy a mezők értékei egyediek és nem ismétlődnek. Saját magunk is létrehozhatunk tetszőleges oszlop szintű korlátozást.

Elsődleges kulcs (primary key) az az oszlop vagy oszlopcsoport, melynek értékei egyértelműen azonosítják a tábla egyes sorait. Példánkban ez az EmployeeID mező. Ennek értéke minden egyedben más, ezzel biztosítjuk, hogy az egyedek minden körülmények között azonosíthatók legyenek. Minden táblában kell legyen elsődleges kulcs, de egy táblában csak egy elsődleges kulcs lehet definiálva. Az elsődleges kulcs értéke nem lehet Null érték.

Egy kicsit nehezebb fogalom az idegen kulcs fogalma. Idegen kulcs (foreign key) az a mező vagy mezőcsoport, melynek értéke azonos egy ún. kapcsolt tábla elsődleges kulcsának értékével. Egy elsődleges kulcs tehát nem csak a saját táblára vonatkozhat, hanem idegen kulcsa is lehet egy másik táblának. Az idegen kulcs haszna, hogy összekapcsolhatunk két (vagy akárhány) táblát. Az ilyen módon összekapcsolt táblák közti integritást az SQL Server biztosítja, vagyis garantálja, hogy az adatbázisba nem kerül olyan rekord, aminek egy foreign key mezeje nem szerepel a kapcsolódó tábla primary key mezejében.
Nézzünk erre egy példát.
publishers
----------
pub_id, PRIMARY KEY
pub_name
city

titles
------
title_id, PRIMARY KEY
title
pub_id, FOREIGN KEY
price
A példában két tábla szerepel. A kiadók (publishers) táblában szerepel a kiadó neve és a városa, a tábla elsődleges kulcsa a pub_id nevű mező. A címek táblában szerepel a cím és az ár, az elsődleges kulcsként funkcionáló title_id mező, és a pub_id idegen kulcs. Ez mutat a kiadók tábla pub_id mezejére, és az adott címhez hozzárendeli a kiadót. Világos, hogy a két pub_id mező azonos értékeket vehet csak fel, ellenkező esetben lenne olyan könyv, amihez nem tudunk kiadót párosítani. Az SQL Server gondoskodik arról, hogy ne lehessen kitörölni egy olyan kiadót, akihez ilyen módon könyvek tartoznak

Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2000 évkönyv 437. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |