You are on page 1of 328

A projekt az Eurpai Uni trsfinanszrozsval, az Eurpa terv keretben valsul meg.

Quittner Pl Baksa-Hask Gabriella

ADATBZISOK, ADATBZIS-KEZEL RENDSZEREK

DE ATC AVK 2007

HEFOP 3.3.1P.-2004-06-0071/1.0

Ez a kiadvny a Gyakorlatorientlt kpzsi rendszerek kialaktsa s minsgi fejlesztse az agrr-felsoktatsban cm program keretben kszlt

Quittner Pl Baksa-Hask Gabriella

ADATBZISOK, ADATBZIS-KEZEL RENDSZEREK

DE ATC AVK 2007

Szerz: Quittner Pl Budapesti Corvinus Egyetem Baksa-Hask Gabriella Budapesti Corvinus Egyetem Lektor: Kormos Jnos Debreceni Egyetem Mag Zsolt Debreceni Egyetem

DE ATC AVK 2007

ISBN xxx xxxx xx x Els kiads

A kiadvny szerzi jogvdelem alatt ll. A kiadvnyt, illetve annak rszeit msolni, reproduklni, adatrgzt rendszerben trolni brmilyen formban s brmilyen eszkzzel elektronikus ton vagy ms mdon a kiad s a szerzk elzetes rsbeli engedlye nlkl tilos.

Kiad: Debreceni Egyetem Agrrtudomnyi Centrum Agrrgazdasgi s Vidkfejlesztsi Kar Budapest, 2007. janur

TARTALOMJEGYZK
TARTALOMJEGYZK ............................................................................................................. i BEVEZETS ........................................................................................................................... vii 1. ADATBZIS-KEZEL RENDSZEREK ......................................................................1-1 1.1. Informcis rendszerek ...........................................................................................1-1 1.1.1. Adatok .............................................................................................................1-1 1.1.2. Hardver............................................................................................................1-2 1.1.3. Szoftver ...........................................................................................................1-2 1.1.4. Felhasznlk....................................................................................................1-4 1.2. Adatbzis architektra.............................................................................................1-6 1.2.1. Adatfggetlensg.............................................................................................1-7 1.2.2. Az architektra hrom szintje .........................................................................1-8 1.2.2.1. Plda a hromszint architektrra .........................................................1-8 1.2.2.2. Kls szint.............................................................................................1-12 1.2.2.3. Koncepcionlis szint .............................................................................1-12 1.2.2.4. Bels szint .............................................................................................1-12 1.3. Az adatbzis-kezel rendszer komponensei..........................................................1-13 1.3.1. Adatler s adatkezel nyelv .......................................................................1-13 1.3.1.1. Adatler nyelv......................................................................................1-13 1.3.1.2. Adatkezel nyelv...................................................................................1-14 1.3.1.3. Vezrlsellenrz nyelv ........................................................................1-14 1.3.1.4. Illeszts a programozsi nyelvekhez .....................................................1-14 1.3.2. Metaadatok ....................................................................................................1-15 1.3.3. Grafikus felhasznli interfsz......................................................................1-15 1.3.4. Szolgltat programok ..................................................................................1-16 1.4. Adat- s adatbzis-felgyel .................................................................................1-16 1.4.1. Adat-felgyel ...............................................................................................1-17 1.4.2. Adatbzis-felgyel ......................................................................................1-17 1.5. Az integrlt adatbzis elnyei (s nhny htrnya) .............................................1-18 1.5.1. Elnyk .........................................................................................................1-18 1.5.2. Nhny htrny .............................................................................................1-19 1.6. Adatbzis-kezel rendszerek csoportostsa .........................................................1-20 1.6.1. Egy felhasznls rendszerek .........................................................................1-20 1.6.2. Kliens-szerver architektra ...........................................................................1-21 1.6.3. Osztott adatbzisok .......................................................................................1-22 1.6.3.1. Osztott adatbzisok architektrja ........................................................1-24 1.6.3.2. Adat tbbszrzs .................................................................................1-25 1.6.3.3. Horizontlis adatmegoszts...................................................................1-25 1.6.3.4. Vertiklis adatmegoszts.......................................................................1-26 1.6.3.5. Kombinlt adatmegoszts .....................................................................1-26 1.6.3.6. Adatelosztsi stratgik.........................................................................1-27 1.7. Ellenrz krdsek ................................................................................................1-27 2. ADATTROLS S ADATSZERVEZS ...................................................................2-1 2.1. Adattrolk..............................................................................................................2-2 2.1.1. Trolsi szempontok .......................................................................................2-2 2.1.2. Lemeztrolk...................................................................................................2-3 2.1.2.1. A lemez felptse ...................................................................................2-3

2.1.2.2. Hozzfrsi id ........................................................................................2-5 2.2. Adatszervezsi s adatelrsi mdok ......................................................................2-7 2.3. Lineris trolsi struktrk......................................................................................2-8 2.3.1. Soros szervezs s elrs.................................................................................2-8 2.3.2. Szekvencilis szervezs s elrs....................................................................2-8 2.4. Kzvetlen elrs ....................................................................................................2-11 2.4.1. Indexels........................................................................................................2-11 2.4.1.1. Index tblzat ........................................................................................2-11 2.4.1.2. Szelektv indexek, a B+ fa......................................................................2-13 2.4.1.3. Nem szelektv indexek, bit-trkpes index ...........................................2-16 2.4.1.4. Join-index ..............................................................................................2-18 2.4.2. Hashing..........................................................................................................2-19 2.5. Adatszervezsi s elrsi mdok sszehasonltsa ...............................................2-21 2.5.1. Srsds ......................................................................................................2-21 2.5.2. Elrsi mdok sszehasonltsa ....................................................................2-22 2.6. Keress tbb kulcs szerint .....................................................................................2-24 2.7. Optimlis elrsi t meghatrozsa.......................................................................2-25 2.8. Adattmrts ........................................................................................................2-27 2.8.1. Vltoz hosszsg mezk ...........................................................................2-27 2.8.2. Kdtblzat....................................................................................................2-27 2.9. Rendezs................................................................................................................2-28 2.10. Ellenrz krdsek ............................................................................................2-29 3. ADATMODELLEK........................................................................................................3-1 3.1. Az adatmodellezs clja ..........................................................................................3-1 3.2. Az adatmodellek fejldse ......................................................................................3-2 3.3. Fbb modellezsi szempontok ................................................................................3-3 3.4. Egyedtpusok s tulajdonsgok ...............................................................................3-4 3.5. Kapcsolatok.............................................................................................................3-5 3.6. Egyedtpus kapcsolat (Entity Relationship) diagram ........................................3-6 3.7. Plda adatmodell ltrehozsra .............................................................................3-10 3.8. Ellenrz krdsek ................................................................................................3-13 4. RELCIS ADATBZIS-KEZEL RENDSZEREK..................................................4-1 4.1. A relcik tulajdonsgai..........................................................................................4-1 4.2. Plda relcikra .......................................................................................................4-3 4.3. Relcik az adatbzisban ........................................................................................4-5 4.4. Kulcsok....................................................................................................................4-6 4.4.1. Az adatbzis integritsa...................................................................................4-6 4.4.2. Elsdleges kulcs ..............................................................................................4-7 4.4.3. Relcik kzti kapcsolatok..............................................................................4-8 4.4.3.1. Idegen kulcs.............................................................................................4-8 4.4.3.2. Idegen kulcsot rint mveletek ...........................................................4-11 4.4.4. Tovbbi kulcsok ............................................................................................4-12 4.4.4.1. Elhelyezsi kulcs ...................................................................................4-12 4.4.4.2. Keressi kulcs........................................................................................4-13 4.5. Relcis mveletek ...............................................................................................4-13 4.5.1. A legfontosabb relcis mveletek ...............................................................4-13 4.5.2. tnevezs (RENAME)..................................................................................4-14 4.5.3. Korltozs (RESTRICT) ...............................................................................4-15 4.5.4. Vetlet (PROJECT).......................................................................................4-15 4.5.5. Kereszt-Descartes szorzat (TIMES)..............................................................4-16

ii

4.5.6. Egyests (JOIN) ...........................................................................................4-17 4.5.6.1. Termszetes join....................................................................................4-17 4.5.6.2. Kls join ..............................................................................................4-20 4.5.7. Uni (UNION) ..............................................................................................4-21 4.5.8. Metszet (INTERSECT) s klnbsg (DIFFERENCE) ...............................4-22 4.5.9. Bvts (EXTEND) .......................................................................................4-23 4.5.10. Csoportkpzs (SUMMARIZE)....................................................................4-23 4.5.11. Kijells ........................................................................................................4-24 4.6. Normalizls..........................................................................................................4-25 4.6.1. Fggsgek....................................................................................................4-26 4.6.2. Els norml forma (1NF) ..............................................................................4-28 4.6.3. Msodik norml forma (2NF) .......................................................................4-31 4.6.4. Harmadik norml forma (3NF) .....................................................................4-35 4.6.5. A dekomponls ms lehetsgei .................................................................4-38 4.6.6. Nzetek definilsa normalizlt relcikbl .................................................4-39 4.6.7. Magasabb norml formk..............................................................................4-40 4.6.7.1. Boyce-Codd norml forma....................................................................4-40 4.6.7.2. Negyedik norml forma ........................................................................4-42 4.6.8. A norml formk sszefoglalsa ...................................................................4-44 4.7. A relcis modellen alapul adatbzisok sszefoglalsa......................................4-44 4.7.1. Alapkvetelmnyek.......................................................................................4-45 4.7.2. Fbb lpsek..................................................................................................4-46 4.7.3. Egy adatbzis megtervezse..........................................................................4-46 4.7.3.1. Feladatlers ..........................................................................................4-47 4.7.3.2. A tervezsi feladat megoldsa...............................................................4-47 4.8. Ellenrz krdsek ................................................................................................4-52 5. AZ SQL NYELV ............................................................................................................5-1 5.1. SQL szabvny .........................................................................................................5-1 5.2. Szintaxis jells.......................................................................................................5-2 5.3. A nyelv elemei ........................................................................................................5-3 5.3.1. Fenntartott szavak ...........................................................................................5-4 5.3.2. Azonostk ......................................................................................................5-4 5.3.3. llandk (literlok) .........................................................................................5-6 5.3.4. Opertorok s felttelek ..................................................................................5-7 5.3.4.1. Aritmetikai opertorok ............................................................................5-7 5.3.4.2. sszehasonlt opertorok ......................................................................5-8 5.3.4.3. Logikai opertorok ................................................................................5-11 5.3.4.4. Halmaz opertorok ................................................................................5-12 5.3.4.5. Felttelek ...............................................................................................5-13 5.3.5. Hatrol jelek ................................................................................................5-13 5.3.6. Objektumok...................................................................................................5-13 5.3.6.1. Adatbzis (Database).............................................................................5-14 5.3.6.2. Sma (Schema)......................................................................................5-14 5.3.7. NULL rtk ...................................................................................................5-16 5.3.8. SQL kifejezsek ............................................................................................5-17 5.4. Adattpusok ...........................................................................................................5-18 5.4.1. Karakter adattpus .........................................................................................5-19 5.4.2. Numerikus adattpus......................................................................................5-20 5.4.3. Dtum/idpont adattpus (DATE/TIME) ......................................................5-21 5.4.4. Sorazonost (ROWID).................................................................................5-22

iii

5.4.5. Hossz adatok ...............................................................................................5-22 5.5. A legfontosabb SQL fggvnyek..........................................................................5-23 5.5.1. Csoport fggvnyek ......................................................................................5-23 5.5.2. Oszlop fggvnyek........................................................................................5-24 5.5.2.1. Karakter fggvnyek .............................................................................5-25 5.5.2.2. Numerikus fggvnyek .........................................................................5-25 5.5.2.3. Dtum/idpont fggvnyek...................................................................5-26 5.5.2.4. Konvertl fggvnyek .........................................................................5-26 5.5.2.5. Egyb fggvnyek.................................................................................5-27 5.6. SQL utastsok ......................................................................................................5-29 5.6.1. SQL utastsok sszefoglalsa ......................................................................5-29 5.6.2. Adatler utastsok.......................................................................................5-30 5.6.2.1. Objektumok ltrehozsa (CREATE )................................................5-30 5.6.2.2. Objektumok megszntetse (DROP ) ...............................................5-41 5.6.2.3. Objektumok mdostsa (ALTER ) ..................................................5-42 5.6.2.4. Jogosultsgok kezelse (GRANT, REVOKE) ......................................5-47 5.6.3. Adatkezel utastsok....................................................................................5-50 5.6.3.1. Az adatkezel utastsok kzs jellemzi .............................................5-50 5.6.3.2. Sorok kivlasztsa (SELECT)...............................................................5-51 5.6.3.3. Sorok trlse (DELETE).......................................................................5-64 5.6.3.4. Sorok mdostsa (UPDATE) ...............................................................5-65 5.6.3.5. Sorok bevitele (INSERT) ......................................................................5-68 5.6.4. Tranzakcivezrl utastsok (COMMIT, ROLLBACK) ............................5-71 5.7. SQL utastsok beptse programokba ................................................................5-73 5.7.1. SQL utastsok csoportostsa.......................................................................5-73 5.7.2. SQL programok elksztse ..........................................................................5-75 5.7.3. Host vltozk.................................................................................................5-79 5.7.4. Kurzor hasznlata..........................................................................................5-81 5.8. Ellenrz krdsek ................................................................................................5-86 6. ADATBZIS-KEZEL RENDSZEREK A GYAKORLATBAN ................................6-1 6.1. MS ACCESS ...........................................................................................................6-1 6.1.1. Szerkezet, fellet, kezels ...............................................................................6-1 6.1.2. Adatbzis tervezs...........................................................................................6-2 6.1.2.1. Tblk......................................................................................................6-3 6.1.2.2. Felttelek .................................................................................................6-8 6.1.2.3. Opertorok s fggvnyek ....................................................................6-11 6.1.2.4. Tblk importlsa ................................................................................6-13 6.1.2.5. Indexek ..................................................................................................6-14 6.1.2.6. Kapcsolatok...........................................................................................6-15 6.1.3. Adatkezels ...................................................................................................6-17 6.1.3.1. Adatbevitel ............................................................................................6-17 6.1.3.2. Adatmdosts.......................................................................................6-18 6.1.3.3. Trls.....................................................................................................6-18 6.1.3.4. Adatok megjelentse, formzs, rendezs, szrs ...............................6-18 6.1.4. Lekrdezsek.................................................................................................6-20 6.1.4.1. Vlaszt lekrdezsek ltrehozsa grafikusan ......................................6-21 6.1.4.2. Egyb lekrdezsek ltrehozsa grafikusan ..........................................6-28 6.1.4.3. ACCESS SQL .......................................................................................6-32 6.1.5. rlap..............................................................................................................6-34 6.1.5.1. rlap ksztse gyorsvarzslval ..........................................................6-35

iv

6.1.5.2. rlap ltrehozsa varzslval................................................................6-36 6.1.5.3. rlap tervnek mdostsa ....................................................................6-38 6.1.6. Jelents ..........................................................................................................6-40 6.1.7. Biztonsg, adatvdelem.................................................................................6-45 6.1.8. Tbb felhasznls kezels.............................................................................6-46 6.2. Internet-alap adatbzis-kezelsi technikk: PHP-MySQL..................................6-47 6.2.1. Nhny sz a PHP nyelvrl...........................................................................6-47 6.2.2. Adatbziskezels a PHP nyelvben ................................................................6-49 6.2.3. A mySQL nyelv sajtossgai ........................................................................6-50 6.2.4. Kurzor hasznlata PHP mySQL-ben.............................................................6-52 6.3. Ellenrz krdsek ................................................................................................6-53 7. KATALGUS, ADATSZTR....................................................................................7-1 7.1. Katalgus tblzatok ...............................................................................................7-1 7.1.1. Katalgus relcik az objektumokrl s sszetevikrl .................................7-2 7.1.1.1. Tblzat katalgus...................................................................................7-3 7.1.1.2. Oszlop katalgus .....................................................................................7-3 7.1.1.3. Index s indexkomponens katalgus.......................................................7-4 7.1.1.4. Objektumokkal kapcsolatos egyb katalgusok .....................................7-4 7.1.2. Katalgus a hozzfrsi jogokrl ....................................................................7-5 7.1.2.1. ltalnos rendszer jogosultsgok katalgusa..........................................7-5 7.1.2.2. Katalgus az objektumokra val jogosultsgokrl .................................7-5 7.1.2.3. Katalgus a programok hasznlati jogrl ..............................................7-6 7.1.3. Katalgus a fggsgekrl ..............................................................................7-6 7.2. Katalgus osztott adatbzisokban ...........................................................................7-7 7.3. Statisztikk ..............................................................................................................7-8 7.4. Ellenrz krdsek ..................................................................................................7-9 8. GYAKORLATI PROBLMK S MEGOLDSUK ..................................................8-1 8.1. Tranzakcik.............................................................................................................8-1 8.2. Problmk prhuzamos feldolgozsnl ...................................................................8-2 8.2.1. Elveszett mdosts .........................................................................................8-2 8.2.2. Nem vglegestett adatok feldolgozsa ...........................................................8-3 8.2.3. Munka inkonzisztens adatokkal ......................................................................8-3 8.3. Zrak........................................................................................................................8-4 8.3.1. A zrak mrete ................................................................................................8-4 8.3.2. A zrak erssge..............................................................................................8-5 8.3.3. A zrak idtartama ..........................................................................................8-6 8.3.4. A zr mechanizmus mkdse ........................................................................8-7 8.4. Patthelyzet ...............................................................................................................8-8 8.5. Problmk s megoldsuk .....................................................................................8-11 8.5.1. Be kellett a rcsos kaput zrni.......................................................................8-11 8.5.2. Utols pr, elre fuss! ...................................................................................8-13 8.5.3. Hlye-biztos programokkal csak hlyk dolgoznak .....................................8-13 8.5.4. Nincs optimlis optimalizl.........................................................................8-14 8.6. Ellenrz krdsek ................................................................................................8-15 9. ADATTRHZAK........................................................................................................9-1 9.1. Az adattrhz jellemzi. ..........................................................................................9-1 9.2. A hagyomnyos adatbzisok s az adattrhzak sszehasonltsa. ........................9-2 9.3. Adattrhz architektra ...........................................................................................9-3 9.4. Adatszerkezet ..........................................................................................................9-4 9.4.1. Csak berhat tblzatok .................................................................................9-5

9.4.2. Csillag elrendezs............................................................................................9-8 9.5. Adatbnyszat .......................................................................................................9-11 9.6. Ellenrz krdsek ................................................................................................9-11 10. IRODALOMJEGYZK............................................................................................10-1 11. TRGYMUTAT ....................................................................................................11-1

vi

BEVEZETS
Amita a Vzmvek felptette nll adatbzist, mr a vzcsapbl is adatbzis folyik. Sajt adatbzisbl szolgltatja a Kzponti Adatfeldolgoz s Nyilvntart Hivatal az llampolgrok, az APEH az adfizetk s nem fizetk adatait. Adatbzisukbl llaptjk meg az orvosok, hogy melyik betegket milyen tnetekkel, mely orvossgokkal s mennyi ideig kezeltk. Szerencss esetben ugyanebbl, rosszabb esetben egy msik adatbzisbl (!) ellenrzik az Orszgos Egszsggyi Pnztr szigor revizorai, hogy mindez mennyibe kerlt. St, Kovcs Pistike 1/b oszt. tan. is nneplyesen kijelentette apukja szmtgpe mellett llva, hogy mihelyst most mr buks nlkl olyan magas osztlyba fog jutni, ahol mr az j oktatsi trvny alapjn is osztlyzatokat kap, akkor egy adatbzisban fogja trolni a jegyeit. Igaz, tette hozz az rdekld jsgrk s rokonok krdseire vlaszolva, hogy az ahhoz val hozzfrst korltozni fogja. Szleinek csak a jeles s taln mg a j osztlyzatok megtekintst fogja engedlyezni. Valban annyira fontosak-e szmunkra az adatbzisok, annyira befolysoljk, megvltoztatjk letnket, ahogy azt a mdiban naponta megjelen szalagcmek s a sok tucatnyi kis sznes trtnet s hrads sugallja? j tudomnyos, technikai eredmny, mdszer, ami jelents hatssal br a jelennkre s a jvnkre? Vagy csak egy a mdia ltal flkapott divathbortok kzl, amelyik idvel lecseng s bekerl a tnyleges fontossgnak megfelel helyre? Lehet-e, hogy az adatbzisok rvn az Orwelli Nagy Testvr, az llam vagy ms szervezetek, szemlyek minden tevkenysgnkrl, minden tulajdonsgunkrl tudomst szerezhetnek? Kell-e, hogy ezrt szemlyisgi jogaink vdelmben ugyangy harcoljunk a nagy adatbzisok ltrehozsa ellen, ahogy a XIX. szzad elejn a vast ellenzi azt kveteltk, hogy a mozdony eltt mindig haladjon egy lovas ember, aki figyelmezteti az arra haladkat a kzelg veszlyre? Vagy ahogy napjaikban egyes krnyezetvdk minden eszkzt bevetnek az autplyk ptse vagy az olcs energia elltst biztost atomermvek ptse ellen. Az adatbzisok ltrehozsa, hasznlata a XX. szzad msodik felben lezajlott informcis forradalom, az informcis technolgia vilgmret elterjedsnek a kvetkezmnye. Mint szinte mindent, az adatbzisokat is lehet jl s rosszul, jra s rosszra is hasznlni. A tudsnak, mrnknek, trvnyhoznak nem az a feladata, hogy az adatbzisok elterjedst, szleskr alkalmazst gtolja, mert azok rossz clokra is felhasznlhatak. Az a ktelessgk, hogy segtsk a szablyozott mkdtetsket. Technikai s jogi eszkzkkel biztostsk, hogy a bennk lev informcik megszerzse s felhasznlsa csakis a jl megfogalmazott trvnyeknek megfelel mdon trtnhessen. A szemlyi szmtgpek szleskr elterjedse, s a klnbz szmtgpek tvkzlsi hlzattal val sszekapcsolsa lehetv tette a hztarts vezetshez szksges adatok otthoni szmtgpes trolstl kezdve az egsz vilgot tfog bankhlzatok egysges informcis rendszernek gyors s megbzhat elrst az arra jogosultak szmra. Knyvnk ifjabb olvasi el sem tudjk kpzelni, mit jelent a mai utaz szmra, aki a 70-es vek kzepn mg a hrom vente ignyelhet 70 dollros valuta keretbl gazdlkodhatott, hogy a PIN kdja megadsval Londonban vagy Prizsban azonnal flvehet a magyarorszgi bankkrtyjval akr 500 Eurt is (feltve persze, hogy van a szmljn annyi pnz vagy akkora hitelkeret). Az Internettel elrhet Web-es adatbzisok tovbb bvtettk az adatbzisokat hasznlk krt. A millinyi napi feladat megoldst ellt, gynevezett tranzakcis adatbzisok mellett egyre inkbb trt hdtanak a vezeti dntst tmogat adatbzisok, az adattrhzak is.

vii

Ebben a knyvben a korszer adatbzisok s adatbzis-kezel rendszerek jellemzit kvnjuk megmutatni. Tovbb azt, hogy miknt kell az adatokat trolni, milyen kapcsolatokat ltesthetnk kzttk, milyen szoftver mdszerek llnak a rendelkezsnkre, hogy az adatokat naprakszen tarthassuk, az adatbzisbl a kvnt informcikat gyorsan megkaphassuk, s ugyanakkor az adatok biztonsgt, ellentmonds mentessgt is szavatolni tudjuk. A tmt elssorban gyakorlati oldalrl, a felhasznlnak, az adatbzis ltrehozjnak s zemeltetjnek a szempontjbl trgyaljuk. Az 1. fejezetben ltalnos sszefoglalst adunk az adatbzisokrl, az adatbzis-kezel rendszerekrl, felhasznlsi lehetsgeikrl. A felhasznli kvetelmnyek meghatrozsa utn a 2. fejezetben ismertetjk, miknt lehet ezeket megvalstani a mai, modern adattrol eszkzkn. Kln hangslyt helyeznk arra, hogy ne csak az elvi lehetsgekrl kapjon tjkoztatst az olvas, hanem arrl is, miknt lehet az itt felsorolt mdszereket a gyakorlatban is hatkonyan megvalstani. Az let s a szmtgpes lekpezs kzti kapcsolatot az adatmodellek hatrozzk meg. (3. fejezet) Ezek kzl napjaink szinte egyeduralkodv vlt modelljt, a relcis modellt trgyaljuk bvebben a 4. fejezetben. Rszletesen ismertetjk az adatbzis-tervezsre szolgl Entity Relationship (Egyedtpus Kapcsolat) mdszert s a hozzkapcsold normalizcis eljrst. A szigor matematikai formalizmus helyett szemlletes lerst hasznlunk, mely lehetv teszi a mdszerek vilgos megrtst, s a gyakorlatban val alkalmazst is. Nagyon nagy hangslyt helyeznk az 5. fejezetben a ma mr szabvnynak tekintett adatbzis kezel nyelv, az SQL ismertetsre. Napjainkban minden adatbzis-kezel rendszer ezt, illetve ennek valamilyen rszhalmazt hasznlja. Az itt lertakat a gyakorlatban elfordul feladatok legnagyobb rszben minden adatbzis-kezel rendszerben egy az egyben alkalmazni lehet. Ezrt ezt a fejezetet gy lltottuk ssze, hogy a tanuls mellett kziknyvknt is hasznlhat legyen. A megrtst segti a referencia knyvknt hasznlhat szveg mellett a sok alkalmazsi plda. A 6. fejezetben is a gyakorlati felhasznlknak szeretnnk segtsget nyjtani. Kt Magyarorszgon is elterjedt rendszer, az ACCESS s a MySQL hasznlatt trgyaljuk olyan mlysgben, hogy annak alapjn az olvas kpes lesz nllan is dolgozni ezekkel a rendszerekkel. Az adatbzisnak az adatok mellett tartalmaznia kell az adatok definciit, kapcsolatait, trolsi s hasznlati mdjuknak a lerst is. Az erre szolgl adatsztrt, katalgust ismertetjk a 7. fejezetben. A relcis modell megvalstsakor szmos gyakorlati problmval kerlnk szembe. Ezek rszben tervezsi, rszben mkdtetsi, zemeltetsi problmk. Ezekre hvjuk fel a figyelmet s javasolunk megoldst a 8. fejezetben. Ez a tmakr az adatbzisokkal foglalkoz knyvekben gyakran csak elnagyolva szerepel, holott mindennapi munknkban gyakran szembekerlnk vele. A 9. fejezetben az elssorban dntstmogatsra kifejlesztett adattrhzak felptst s mkdsk alapjait foglaljuk ssze. A ma mkd adatbzisokat jellegk szerint kt nagy csoportba, ezeken bell az elst hrom alcsoportba oszthatjuk. A hagyomnyos adatbzisok elssorban a szervezet napi feladatait tmogatjk. A szervezet mkdshez szksges tranzakcik regisztrlst, folyamatos feldolgozst vgzik el. Ezeket hvjuk tranzakci orientlt adatbzisoknak. Ezeken bell megklnbztethetnk

viii

nll szemlyi szmtgpeken megvalstott egy szemly vagy egy csoport informcis ignyeit kielgt adatbzisokat, melyekhez egy idben csak egyetlen egy felhasznl frhet hozz, kzponti nagy szmtgpre teleptett centralizlt, integrlt adatbzisokat, melyekhez hlzaton keresztl tbben tbb helyrl is hozzfrhetnek s tbb szemly s csoport egymstl fggetlen sszetett ignyeit kell egy idben kielgtenik, nagy s/vagy szemlyi szmtgpek hlzatra alapozott tartalmban integrlt, de helyileg megosztott adatbzisokat, melyben a leginkbb helyileg ignyelt adatok a felhasznls helyn vannak trolva, ahol a hlzat brmelyik pontjrl brmikor elrhetek. A mindenki ltal hasznlt adatok trolsi helynek nyilvntartsa egysgesen trtnik. A vezeti dntsek tmogatsra szolgl igen nagy, statikus adatbzisok, az adattrhzak, melyeket lekrdezsek s elemzsek vgrehajtsra terveztek. Klnbz tranzakcis adatokbl szrmaztatott adatokat trolnak egysges formban idbeli vltozsuk s felhasznlsi terletk szerint csoportostva. A knyvben trgyalt pldk s mdszerek elssorban a centralizlt, integrlt adatbzisokra vonatkoznak. Ennek rszben az az oka, hogy a mkd adatbzisok zme ebbe a csoportba tartozik. A msik ok az, hogy az itteni megoldsok a tbbi tpusnl is alkalmazhatak. Az egy felhasznls rendszereknl knnyebb teszi a dolgunkat az, hogy az adatszerkezet, az adatok kzti kapcsolat ltalban egyszerbb, s az egyidej hozzfrsbl add problmkkal nem kell trdnnk. Az osztott adatbzisoknl figyelembe kell ugyan vennnk, hogy az informcik megtallshoz s sszelltshoz ignybe vesszk az adattviteli hlzatot is, de ez a megfelel szoftver kzbeiktatsval az adatbzis felhasznlja eltt rejtve marad. Az adattrhzakban is hasznlhatjuk a hagyomnyos adatbzisok teljes eszkztrt, ami mg nhny specilis eljrssal kiegszl, hogy az adatokbl kaphat rejtett informcikat is megtalljuk. Ezek a klnbsgek az adatbziskezelssel kapcsolatos feladataink lnyegt nem befolysoljk. A f hangslyt olyan adatbzisok tervezsnek, ltrehozsnak s mkdtetsnek az ismertetsre helyezzk, melyekben igen sok, akr tbb szz klnbz tpus rekord van, a klnbz tpus rekordok kztt igen sokfle kapcsolat ll fenn, a rekordok szma tbb millitl millirdokig is terjedhet, akr tbb ezer mveletet (lekrdezs, mdosts, bers, trls) is vgeznek rnknt az adatbzisban, egyszerre ezer terminlrl is elrhet s hasznlhat interaktvan az adatbzis, az adatok integritst, vdelmt, biztonsgt, helyrellthatsgt a rendszer biztostja. Termszetesen azok is hasznosan forgathatjk a knyvet, akik a fent felsoroltaknl kisebb mret, egyszerbb felpts adatbzisokkal dolgoznak. Legfljebb egyes problmkkal kevsb lesen vagy ksbb szembeslnek. Mindegy, hogy milyen gpen, milyen szoftverrel dolgozunk, ltalnos rvny szably, hogy bizonyos adatmennyisg s/vagy tranzakci gyakorisg alatt nem kell trdnnk a hatkonysggal. A rendszer mindenkppen hasznlhat. Egy bizonyos kszb fltt azonban nem rt, ha gondolunk r, egy mg magasabb szint fltt pedig mr okvetlenl trdnnk kell azzal, hogyan szervezzk az adatainkat, hogyan fogalmazzuk meg a feladatainkat, hogy a rendszer hatkonyan, vagy akr egyltalban mkdjn. Ne kelljen feleslegesen klnleges hardverre pnzt kiadnunk s mgis kell gyorsasggal kapjuk meg a krt informcikat. Az, hogy ezek a szintek 1 vagy 100 milli rekordnl, 10 vagy 100 tranzakci/percnl vannak, az a rendelkezsnkre ll hardver/szoftver kombinci mellett dnt mrtkben ix

fgg az adataink szervezstl, trolsi mdjtl. Hogy ezt jl tudjuk megvalstani, abban kvnunk ezzel a knyvvel segtsget nyjtani.

1. ADATBZIS-KEZEL RENDSZEREK
A htkznapi szhasznlatban adatbzison egy adatfeldolgozi krnyezetben hasznlt adatok sszessgt rtjk. Ez a megfogalmazs azonban tl ltalnos. Eszerint pldul a bartaink cmeit s telefonszmait tartalmaz fjlt ugyangy adatbzisnak tekinthetjk, mint egy vllalat teljes integrlt informcis rendszernek alapjul szolgl adatokat s a mkdtetst biztost szmtgpes szolgltatsokat. Mai rtelmezsnk szerint az adatbzis logikailag kapcsolatban ll adatok szervezett sszessge. Emellett azonban az adatokon kvl tartalmazza az adatok defincijt, rtelmezst, s a klnbz adatok kztt fennll sszefggseket is. Ezen kvl mkdni kell az adatbzison egy olyan adatbzis-kezel rendszernek, amely lehetv teszi az adatokbl a bennk trolt informci ellltst. A ksbbiekben az adatbzisnak ezt a defincijt mg tovbb fogjuk pontostani. 1.1. Informcis rendszerek Az informcis rendszerek, mint azt a nevk is mutatja, informcikat szolgltatnak. A korszer informcis technolgia, az informcis rendszerek alapjt az adatbzisok kpezik. Az informcis technolgia alapvet clja az, hogy nvelje a szervezetben dolgoz emberek teljestmnyt. Ebbe beletartozik, az egyes tranzakcik (pl. tutalsok, megrendelsek egyetemi vizsgk) regisztrlsa, a technikai folyamatok dokumentlsa s a dntsekhez szksges informcik szolgltatsa. Minden informcis rendszer ngy f rszbl tevdik ssze. Ezek az adatok, hardver (eszkzk, berendezsek), szoftverek, felhasznlk. A kztk lv kapcsolatot gy fogalmazhatjuk meg, hogy az informcis rendszer adatokat trol a hardveren, melybl az eszkzk s a szoftverek segtsgvel a felhasznlk informcikat kaphatnak. 1.1.1. Adatok Az informci s az adat szavakat gyakran szinonimaknt hasznljuk. Sokszor ez nem okoz problmt, de a pontos szmtstechnikai terminolgiban clszer klnbsget tennnk a kett kztt. Az informci valamely jelensgre vonatkoz rtelmes kzlst jelent, melynek ltalban az j (legalbbis akkor szmra j, vagy meglev ismeretet megerst) ismerettartalma fontos a felhasznl szmra. A szmtgpes rendszerekben azonban az informcikat nem kzvetlenl troljuk. Azok csak binris jelsorozatknt, rtkekknt jelennek meg. A szmtgpes brzolsmdnak az rtke az adat, hogy ez mit jelent, az az informci. A 07/04/2007 jelsorozat lehet egy ktszeres oszts (aminek rtke 0,00087), de lehet egy dtum is, ami egy angol szmra a 2007. v prilis hetedikt, mg egy amerikainak ugyanezen v jlius 4-t, a fggetlensg napjt jelenti. Hogy a fenti interpretcik kzl melyik az igazi (vagy egy negyedik rtelmezs a helyes), ahhoz tudnunk kell, hogy mit tartalmaz az adat (pl. dtumot) s azt is, hogy milyen formban. Ahhoz, hogy igazi informcit adjon, mg azt is tudnunk kell, hogy minek a dtuma. Az adaton s a hozzkapcsold informcin rgebben tnyeket rgzt rtkeket (pl. egy szemly neve, lakcme) rtettnk. A mai adatbzisok mr olyan objektumok trolsra is alkalmasak, mint pldul teljes dokumentumok, kpek, hang- s videofelvtelek. A

1-1

tovbbiakban az adat fogalmba ezeket is belertjk, br a pldinkban tbbnyire csak az egyszer elemi tnyadatok szerepelnek. Az adatok lehetnek elemi tnyadatok, adatknt tekinthet objektumok, elemi tnyadatokbl llltott szrmaztatott adatok, az adatok lerst, rtelmezst s formtumt tartalmaz metaadatok. Az elemi tnyadatok valami vagy valaki valamilyen jellemzjnek, tulajdonsgnak a konkrt rtkt adjk meg (Pl. Gipsz Jakab szletsi idpontja, hajszne, utols havi fizetse). A szrmaztatott adatok elemi tnyadatokbl vagy szrmaztatott adatokbl llthatk el klnfle mveletek segtsgvel. Szrmaztatott adat lehet pldul az nll elemi adatokknt trolt vezetknv s a keresztnv egybevonsval (konkatencijval) ellltott nv, a fizets s az egyb juttatsok sszegeknt ellltott teljes jvedelem. Kln csoportot kpeznek a szrmaztatott adatok kztt a klnbz csoportostsok eredmnyeknt ltrejv aggregtumok, mint pldul a naponknt eladott ruk sszrtke, vagy a tantrgyanknt vizsgzk szma s tlagosztlyzatuk. A napi mveleteket tmogat tranzakci orientlt adatbzisok a redundancia minimalizlsa rdekben (nhny, a hatkonysg rdekben tett kivteltl eltekintve) nem tartalmaznak szrmaztatott adatokat, mg a vezeti dntseket tmogat adattrhzakban (ld. 9. fejezet) igen sok szrmaztatott adat tallhat. Az adatbzisban a logikailag llandan sszetartoz adatokat nevezzk rekordnak. Ezek, mint azt az adatmodelleknl majd trgyalni fogjuk (ld. 3. fejezet) a vals vilg egyes egyedtpusait (pl. hallgatk, tantrgyak, bankfikok, tutalsok) brzoljk az adatbzisban. Ezeknek egyes tulajdonsgai az elemi (vagy szrmaztatott) adatok. Ezek a rekord mezi. Azt, hogy miknt brzoljuk az egyes adatokat, mi a jelentsk, az informci tartalmuk, azt az adatbzisban trolt metaadatok segtsgvel hatrozhatjuk meg. Ezeket az adatbzisnak egy nll rsze, az adatsztr, ms nevn a katalgus tartalmazza. A katalgust a 7. fejezetben ismertetjk rszletesen. 1.1.2. Hardver Minden adatbzis valamilyen konkrt hardveren valsul meg. Ennek fbb rszei a processzorok, amelyeken az adatokat feldolgozzuk, az operatv memria s a lemezek, melyeken troljuk, valamint a terminlok s a telekommunikcis rendszer. A hardverrel ezen knyvben csak rintlegesen foglalkozunk, mivel ez szinte teljesen rejtve marad a felhasznlk ell. Csupn az adatok trolsra szolgl lemezek felptst s mkdst ismertetjk a 2.1. alfejezetben, mivel ezek hatkonysgt nagymrtkben tudjuk befolysolni az adatszervezsi s adatelrsi mdok (ld. 2.2. alfejezet) helyes hasznlatval. 1.1.3. Szoftver A hardveren fizikailag trolt adatok s a felhasznl kzti kapcsolatot a szoftver hozza ltre. Ez hrom rtegbl ll. az opercis rendszer, az adatbzis-kezel rendszer, alkalmazsi programok. Az opercis rendszer vezrli s ellenrzi a szmtgpeken fut programok vgrehajtst s kezeli a perifrikat (lemezek, terminlok, adattviteli vonalak, stb.). Ebbl kifolylag az adatbzis-kezel rendszer is az opercis rendszer felgyelete alatt fut s az opercis rendszeren keresztl lp kapcsolatba a perifrikkal, hogy onnan adatokat hozzon be, vagy oda adatokat rjon ki. Ennek a sztvlasztsnak az az elnye is megvan, hogy az

1-2

adatbzis-kezel rendszernek nem kell az egyes perifrik specilis tulajdonsgaival egyedileg trdnie, elegend az input/output parancsokat az opercis rendszerek parancsainak szintjig rszletezni. Ez jelentsen lecskkenti az adatbzis-kezel rendszer elksztshez szksges munkt. Az alkalmazsi program hatrozza meg, hogy milyen adatokbl milyen informcikat kell sszelltani. Ennek logikja a konkrt alkalmazstl fgg, s gy kvl esik knyvnk tmakrn. Az adatbzissal val kapcsolattarts technikai megvalstst rszletesen ismertetjk az 5. fejezetben, az SQL nyelvnl. Az adatbzis-kezel rendszerekkel a felhasznlk az alkalmazsi programokon keresztl ktfle mdon lphetnek kapcsolatba. interaktvan, prbeszdes mdon, programba bepthet adatbzist kezel, ltrehoz s vezrl utastsokkal. Az interaktvan hasznlhat nll rendszereknek (self-contained systems) sajt, egyszeren elsajtthat nyelve van. A problma megoldst ezen a nyelven kell megfogalmazni. Ezek a nyelvek termszetesen jval szegnyesebbek, mint a magas szint programozsi nyelvek s ltalban tbb gpidt ignyl programokat hoznak ltre. Bonyolult feladatok megoldsra csak korltozottan alkalmazhatak. Hasznlatuk azonban sokkal egyszerbb s knyelmesebb, megtanulsuk is knnyebb. Nagy elnyk, hogy segtsgkkel nem csupn elre megrt programok eljrsai s eredmnyei hasznlhatk fel, hanem ad hoc ignyek is kielgthetk az ember-gp prbeszd rvn. A programba bepthet rendszerek (host language systems) nmagukban nem hasznlhatak. Csupn az adatbzis lersra, a beviteli-kiviteli (input-output) s egyb az adatbzissal kapcsolatos mveletek megfogalmazsra alkalmasak. Az adatokkal kapcsolatos tovbbi mveleteket valamilyen magas szint programozsi nyelven (pl. COBOL, Java, C++) kell megfogalmazni, melybl egy az SQL utasts ltal generlt szubrutinhvs hvja meg az adatbzis-kezel rendszert. Az adatbzis-kezel rendszer utastsainak programba val beptst az 5.7. alfejezetben trgyaljuk. A kereskedelmi forgalomban kaphat adatbzis-kezel rendszerek tbbsgnek ltezik nllan hasznlhat s programba bepthet vltozata is. Az alkalmazs ignyeitl fgg, hogy mikor melyikkel dolgozunk. Az adatbzis-kezel szoftver mkdsnek elve az 1.1. brn lthat. A plda egy adat beolvassnak folyamatt mutatja be. 1. Az A alkalmazsi program adato(ka)t kr az adatbzisbl. (Egyszerre tbb program is futhat, s ezek brmelyike fordulhat az adatbzis-kezel rendszerhez.) 2. Az adatbzis-kezel rendszer elemzi s rtelmezi az utastst. Megllaptja, hogy formailag (szintaktikailag) helyes-e, lteznek-e a program ltal krt objektumok s azok rszei, s hogy a felhasznlnak van-e jogosultsga az azokon krt mveletek elvgzsre. Ha az elemzs eredmnye pozitv, akkor az adatbzisra vonatkoz utastst talaktja az opercis rendszer ltal rtelmezhet parancsokk s tovbbtja ezeket az opercis rendszer fel. (3a g). Egy adatbzis-mvelet krs ltalban egy egsz parancssorozatot generl. Ha a krs brmilyen okbl nem hajthat vgre (az utasts szintaktikailag hibs, nem ltezik az adatbzisban olyan elem, amire az utasts vonatkozik, vagy a kr nem dolgozhat vele), akkor visszajelzst ad a felhasznl munka- s visszajelzsi terletre, megjellve a visszautasts okt is (3b g). Az opercis rendszer ltrehozza a kapcsolatot a kls trolval. (ha ez nem sikerl, visszajelzst ad).

3.

4.

1-3

5.

Az opercis rendszer a krt adato(ka)t behozza a rendszer munkaterletre (rendszer puffer).

1.1. bra: Az adatbzis-kezel szoftver mkdsnek elve. 6. Az opercis rendszer tadja a krt adato(ka)t a programnak. Jelzi a mvelet eredmnyessgt, vagy (rszleges) eredmnytelensgnek okt (pl. nincs az adatbzisban a krt adat), esetleg valamilyen klnleges esemnynek az szlelst. A felhasznli program tveszi az adato(ka)t, (ha kapott), rtkeli a visszajelzseket, s folytatja a feldolgozst.

7.

Lnyegben hasonl mdon trtnik egy j adat bersa, meglv trlse vagy mdostsa, vagy az adatbzissal kapcsolatos brmilyen ms mvelet vgrehajtsa is. Az egyszersg kedvrt feltteleztk, hogy az alkalmazsi program utastsai bent vannak a kzponti trolban. A gyakorlatban ez sokszor nem gy van. Lehet, hogy a program a felhasznl kliens-gpn van (ld. 1.6.2. pont), st, az utasts is ezen, interaktvan, a krs kiadsakor kszl el. Ekkor a kapcsolatba belp mg a telekommunikcis program is. Ez azonban a fent elmondottak lnyegt nem befolysolja. Knyvnk olvasi szempontjbl a legfontosabb szoftver komponens az adatbziskezel rendszer (Data Base Management System). Ezzel kln foglalkozunk az 1.3. alfejezetben. 1.1.4. Felhasznlk A felhasznls cljt tekintve az adatbzisokkal dolgozk kt nagy csoportjt klnbztetjk meg: adminisztratv cl felhasznlk dntsi informcikat kr felhasznlk.

1-4

Ezen bell mindkt csoport a felhasznls mdjtl fggen az albbi alcsoportokra bonthat: alkalmazsi programozk nem programoz alkalmazk men alapjn dolgoz felhasznlk. Az egyes csoportok s alcsoportok kztt az elklnls nem les. Ugyanaz a szemly, feladattl fggen egyszer az egyik, egyszer egy msik mdon hasznlja az adatbzist. A fentieken kvl vannak mg olyan szemlyek, akik az egsz adatbzis mkdtetst irnytjk, ellenrzik. Ezek feladatait az 1.4.2. pontban, az adatbzis felgyelnl ismertetjk. Az adminisztratv cl felhasznlkra ltalban jellemz, hogy nagyszm tranzakcit bonyoltanak le. A tranzakci jl definilt eljrs alapjn trtnik. A hatkonysg tbbkevsb jl mrhet az idegysg alatt vgrehajtott tranzakcik szmval, a feladat megvlaszolshoz szksges idvel s az ehhez szksges szmtgpes erforrsok mrtkvel. A dntsi informcikat ignyl felhasznlk csak ritkn bonyoltanak le elre definilhat tranzakcikat. Feladataik vltozatosak, gyakran ad hoc jellegek. A megolds mdja s az eredmnyek kirtkelse is sokfle lehet. Az adatbzisbl nyert informcik alapjn dntsek szletnek. A rendszer hatkonysgt azzal mrhetjk, hogy mennyire segtik a szervezet fejldst, mkdst ezek a dntsek. Ez persze sokkal kevsb pontosan definilhat, mint az elz csoportnl. Az alkalmazs mdja szerinti csoportostsnl az alkalmazsi programozk a sajt, vagy a vgfelhasznli ignyek alapjn ksztik el a konkrt feladatok megoldst biztost alkalmazsi programokat. Az adatbzis-kezel rendszert elssorban a megfelel adatoknak az adatbzisbl val kikeressre illetve az adatok vltoztatsra hasznljk fel. Ezeket a mveleteket ptik be az adatbzissal dolgoz felhasznli programokba. Az adatbzist ily mdon csak gyakorlott programoz tudja hasznlni. Az ltala elksztett programokkal dolgoz felhasznlnak mr nincs szksge klnleges szmtgpes ismeretekre. De az adatbzissal csak a programban meghatrozott mdon lphet kapcsolatba, csak az ott beprogramozott mdon hasznlhatja. Az ilyen programokat alkalmaz tevkenysge lnyegben ugyanaz, mint a kvetkez bekezdsben ismertetetend paramteres felhasznlk. A programksztsnl legtbbszr nem a program elksztsnek a gyorsasga, hanem a program rugalmassga, a menet kzben vltoz ignyekhez val adaptlhatsga s/vagy a futtats hatkonysga a dnt. A felhasznlk tbbsge azonban nem programoz. Semmifle, vagy csak minimlis szmtstechnikai ismeretekkel rendelkezik. Attl fggen, hogy ignyeik rgtnzttek-e, formjukat s tartalmukat mindig a pillanatnyi helyzetnek megfelelen kell megfogalmazni, s ezltal elre nem, vagy csak nagyon korltozottan programozhatk be, vagy pedig nhny jl meghatrozhat, elre programozhat tmakrre s krdscsoportra korltozdnak, megklnbztethetnk nem programoz alkalmazkat s menk alapjn dolgoz felhasznlkat. Az elbbieknek a feladataik megoldshoz egy ltalnos, adatkezelsre alkalmas, nem szmtgpes szakemberek ltal is knnyen megtanulhat nyelvre van szksgk, ami bepl egy nllan hasznlhat adatbzis-kezel rendszerbe. Ennek segtsgvel maguk definilhatjk az adatokat s az adatkapcsolatokat s az adatokkal elvgzend mveleteket. Egy ilyen rendszert, a Microsoft ACCESS-t a 6.1. alfejezetben trgyalunk rszletesen. A men-orientlt felhasznlknak mg egy ilyen egyszer szoftverre sincs szksgk. A szabvnyos, elre beprogramozott krdstpusok megvlaszolshoz szksges paramtereket egy kpernyn megjelentett menrendszer aktulis bemen adataiknt adjk meg. Ezekbl, az elre elksztett programok alapjn a rendszer szolgltatja 1-5

az informcikat. Tipikusan ezen alkalmazsok kz tartoznak a banki befizet/kifizet /tutal/lekrdez, vagy a replgpes helyfoglal rendszerek. A szmtstechnika elterjedse, a felhasznlbart rendszerek kifejlesztse eredmnyeknt egyre nvekszik azon nem informatikus szakemberek szma, akik sajt feladataikat, informcis ignyeiket meg tudjk gy fogalmazni, hogy azt az adatbzis-kezel rendszer segtsgvel kzvetlenl vgre is tudjk hajtatni. Az ilyen szakembereknek a kezdeti elindts utn mr nincs vagy csak nagyon ritkn van szksgk szmtgpes szakemberre, informatikusra a munkjukhoz, azon kvl, hogy azok a szksges informatikai infrastruktrt a rendelkezskre bocstjk s megbzhat mkdst biztostjk. Ez nagymrtkben megnveli az adatbzisok s az adatbzis-kezel rendszerek rendszeres felhasznlinak szmt s a felhasznlsok lehetsgt. 1.2. Adatbzis architektra Tgabb rtelemben vve ktfle adatbzis tpust klnbztetnk meg. A tny adatbzisok meghatrozott formban trolt adatokat tartalmaznak, melynek egyedei kztt klnfle kapcsolatok llnak fenn. Az adatbzis-kezel rendszer a formzott adatok jelentse, rtke s a kapcsolatok alapjn lltja el a kvnt informcikat. A tny adatbzisokon bell megklnbztetjk az elssorban a napi feladatok elvgzsre szolgl tranzakci orientlt adatbzisokat, melyek f clja nagyszm, elre pontosan meghatrozott feladat, tranzakci (pl. raktrkszlet folyamatos nyilvntartsa, brszmfejts) feldolgozsa, s a vezeti dntseket elsegt adattrhzakat. A msik nagy csoport, a szveges informcivisszakeres rendszerek dokumentumokrl tartalmaznak nem formzott, szveges (kpben, hangban) megadott informcit. A rendszer azokat a dokumentumokat szolgltatja, amelyekben egy adott szvegrsz (kp-, hangrszlet) meghatrozott krlmnyek kztt s formban elfordul. A hatrvonal a kt tpus kztt egyre inkbb elmosdik. Ma mr minden szveges informci-visszakeres rendszerben trolunk tny adatokat is, s minden tny adatbziskezel rendszerben lehet nem formzott adatokat, szvegmintkat keresni. Ezrt a tovbbiakban adatbzison a tny adatbzisokat rtjk, ezeken bell pedig a produkcis adatbzisokat, s ezekkel is foglalkozunk. Az adattrhzak specilis feladatait s jellemzit kln ismertetjk a 9. fejezetben. Az adatbzis-kezel rendszereknek biztostani kell klnfle felhasznli ignyek hatkony kielgtst, adatfggetlensget, az adatok kztti komplex kapcsolatok brzolst, redundancia mentessget, illetve annak ellenrzst, egyszer hasznlatot, az adatok vdelmt, nehogy illetktelenek hozzfrhessenek, az adatok integritst, hogy lehetleg a hozzfrsre jogosultak se ronthassk el az adatbzist, helyrellthatsgot, hogy brmilyen hiba esetn az eredeti llapotot vissza lehessen lltani, tbb felhasznls adatbzisnl az egyidej hozzfrst, osztott adatbzisnl az adatok fizikai sztosztst, logikai sszevonst s a dupliktumok konzisztencijt. A tovbbiakban ezen feladatok kzl azokat, melyek tartalma nem magtl rtetd rszletesen elemezzk. A fentiek mellett tudomsul kell vennnk, hogy brmifle informciszolgltatsnak csak akkor van rtelme, ha a kapott informci 1-6

pontos, kielgt rszletessg, rthet, idben rkezik meg, knnyen hozzfrhet, nem tl drga, felhasznlsra is kerl.

1.2.1. Adatfggetlensg Mivel ugyanazon adatokat tbb program s tbb felhasznl is hasznlhatja, az adatokat s a programokat, amennyire lehet, fggetlenteni kell egymstl. Ha pldul az egyik programban a feldolgozsi szempontok mdosulsa miatt a rekordokat egy j mezvel bvtjk, akkor ez a vltoztats lehetleg csak ennek az egy programnak a vltoztatst tegye szksgess. Az sszes tbbi program, amelyik ugyanezen rekordokat, vagy ezek egy rszt tovbbra is a vltozatlan formban hasznlja, vltozatlan maradjon. Ennek megvalstsa rdekben kln kell vlasztanunk az adatok fizikai lerst a programok ltal ltott adatszerkezettl. Ezzel azt is elrhetjk, hogy ugyanazon numerikus adatokkal az egyik programban binris, a msikban decimlis szmokknt dolgozhatunk, s ha az adatbzisban a bels brzolsmdot lebegpontosra mdostannk, akkor sem kellene egyik programban sem vltoztatni. Ugyangy lehetsges, hogy ugyanaz a dtum az egyik programban 2007.3.15, mg egy msikban MARCH-15-2007 formban jelenik meg s kerl felhasznlsra. J adatbzisoknl a nagy flelemmel vrt YEAR 2000 katasztrfa, a rgi, esetleg ktjegy vszmokrl val tlls nem okozott semmifle komolyabb problmt. A klnbz bels adatbrzolsi mdok kztti konverzit elvgezte az adatbzis-kezel rendszer. Egy rendszer fizikailag adatfggetlen, ha az adataival dolgoz felhasznli programok s a felhasznlk ad hoc informcikrsei gyakorlatilag fggetlenek az adatok trolsi s elrsi mdjtl. Ez azt jelenti, hogy ha pldul az adatokat egy rgebbi, lassabb mgneslemezrl thelyezik egy korszerbb, gyorsabb lemezre, akkor ebbl a felhasznlk semmit sem vesznek szre, hacsak azt nem, hogy az adatbzissal gyorsabban tudnak kommuniklni. A logikai adatfggetlensg viszont azt jelenti, hogy az adatbzis logikai szerkezetben ltrehozott vltozsok az adatbzist felhasznl programokat nem, vagy csak minimlis mrtkben befolysoljk, mint ezt az elbbi pldkkal illusztrltuk. A teljes adatfggetlensg a fizikai s a logikai adatfggetlensg egyttes megvalstsa. Egy rendszer teht akkor adatfggetlen, ha az adatbzisban trolt adatokat az adatbzis-kezel rendszer kzvettsvel felhasznl programok s ad hoc lekrdezsek gyakorlatilag fggetlenek mind az adatok trolsi s elrsi mdjtl, mind pedig a logikai adatszerkezettl. Termszetesen a tkletes adatfggetlensg nem valsthat meg. Ezrt szerepelnek a meghatrozsokban a gyakorlatilag illetve a minimlis szavak. Hiszen a hardver mdostsval, vagy az adatelrsi stratgia megvltoztatsval nagymrtkben befolysolhatjuk a rendszer mkdsi sebessgt. A felhasznl szintjn azonban ezek a vltozsok nem abban jelentkeznek, hogy j programokat kell rnia, mskppen kell a krdseit megfogalmaznia, hanem gy, hogy az eredmnyt, a vlaszt gyorsabban (vagy esetleg ms felhasznlk ignyeinek hatkonyabb kielgtse miatt ppensggel lassabban), drgbban vagy olcsbban fogja megkapni.

1-7

1.2.2. Az architektra hrom szintje Az adatmodell a vals vilg objektumait, azok tulajdonsgait s kapcsolatait rja le. Az adatmodell nem a konkrt adatokkal, azok rtkeivel foglalkozik, hanem azok tpusaival, kapcsolataival. A feladatmegolds els lpse a megfelel adatmodell kialaktsa. Ez a vals vilgot tkrzi hven, a kvnt rszletessggel, de emellett alkalmas arra, hogy az ltala reprezentlt adatszerkezeten a valsg mozgsai a rendelkezsre ll szmtstechnikai eszkzkkel nyomon kvethetk legyenek. Az adatmodelleket s elksztsket a 3. s 4. fejezetben ismertetjk rszletesen. Az adatfggetlensg biztostsa rdekben az adatmodell szerkezetileg az 1.2. brn lthat hrom szintre bomlik. Bels vagy ms nven fizikai szint, amely az adatoknak a troln val fizikai elhelyezst s fizikai elrsi lehetsgeit rja le. Kls vagy ms nven logikai szintek, melyek azt rjk le, miknt ltjk az egyes felhasznlk az adatbzist. Koncepcionlis szint, amely azt rja le, hogy logikailag egysgbe vonva hogyan nz ki tnylegesen a teljes adatbzis. Ennek ltjk klnbz vetleteit a kls szinteken a felhasznlk, s ez kpzdik le egyrtelmen trolsi struktraknt s elrsi mdokknt a bels szinten. Az adatfggetlensg teljes, ha a hrom szint egymstl teljesen fggetlen.

1.2. bra: Az adatbzis architektra hrom szintje. 1.2.2.1. Plda a hromszint architektrra Az adatmodell hromszint felptst egy egyszer pldn mutatjuk be. Ezt a pldt klnbz formban a knyv tovbbi rszeiben is rendszeresen hasznlni fogjuk. Modellnk egy egyszerstett hallgati nyilvntartst r le. A koncepcionlis szint az albbi egyedtpusokat (objektumokat) s ezeknek a kvetkez tulajdonsgait (jellemzit) tartalmazza:

1-8

HALLGAT: A hallgat vezetk- s keresztneve, egyetemi azonost kdja, szletsi idpontja, vfolyama. TANTRGY: A tantrgy azonost kdja, megnevezse, oktatja (csak egyet, a vezet oktatt adhatjuk meg), heti raszma, s hogy ktelez-e vizsgzni belle. MITHALLGAT: Ki, milyen tantrgyat vett fel. Ebbl hny gyakorlati pontot kapott s hogyan vizsgzott. A ki-t a hallgat egyetemi azonost kdja, a milyen tantrgyat a tantrgy azonost kdja hatrozza meg. A koncepcionlis szintbe mg azt is belevesszk, hogy a hallgatt s a tantrgyat is egyrtelmen azonostja az adatbzison bell a megfelel azonost kd, egy hallgat ugyanazt a trgyat csak egyszer veheti fel, nem lehet nem ltez tantrgyat felvenni, s nem hallgathat egy tantrgyat sem nem ltez hallgat. Ez azt jelenti, hogy az adatbzis-kezel rendszer automatikusan megakadlyozza, hogy kt azonos kd hallgatt vagy tantrgyat vegynk fel az adatbzisba, vagy egy MITHALLGAT adatrekordban nem ltez hallgat vagy tantrgykd szerepeljen, vagy egy hallgat tbbszr vegye fel ugyanazt a trgyat1. Felttelknt kiktjk mg azt is, hogy egy hallgat adatait csak akkor vesszk fel az adatbzisba, ha legalbb a hallgati azonost kdjt s vezetknevt ismerjk, egy tantrgyat, ha a tantrgyi kdjt s megnevezst ismerjk. Ugyancsak ismernnk kell egy MITHALLGAT rekord felvtelekor mind a hallgat, mind a tantrgy kdjt.2 A fizikai szint lershoz megadjuk, hogy a vezetknv, keresztnv, oktat, a tantrgy megnevezse 30 karakter, a hallgati azonost 5, a tantrgy azonost 4 karakter, az vfolyam, az raszm s az osztlyzat egyjegy szm, a gyakorlati pontszm hromjegy decimlis szm s a ktelez vizsgt az I, a nem ktelezt az N karakter jelenti. Ezen kvl azt is elrjuk, hogy a hallgatkat azonostjuk s nevk alapjn, a tantrgyakat azonostjuk, megnevezsk s oktatjuk alapjn azonnal meg akarjuk tallni, s ezrt az adatbzis-kezel rendszer hozza ltre az ennek megvalstshoz szksges adatszerkezetet (ld. 2.4.1. pont). Vgl ltalban az opercis rendszer kzvettsvel azt is meghatrozzuk, hogy az egyes objektumok adatai melyik lemez melyik terletn legyenek. A vgs adatmodellben mindig csak egy koncepcionlis s egy bels, fizikai szint 3 van. Ezzel szemben akrhny klnbz kls, logikai szint lehet, melyek kzl az egyik megfelelhet teljesen a koncepcionlis szintnek. Ugyanazzal a logikai szinttel tbb felhasznl is dolgozhat. Pldnkban kt felhasznl szmra definilunk nll kls szintet: 1. Felhasznl kls szintjnek egyedtpusai s tulajdonsgai: HALLGAT: Azonos a koncepcionlis szint HALLGAT objektumval

Termszetesen modellnk a valsgot kiss leegyszerstve brzolja, hiszen egy hallgat egy trgybl tbbszr is vizsgzhat (pl. megbukott), tbbszr is felveheti. Ezekkel a problmkkal most nem trdnk. Ha azt mondjuk, hogy a modell csak a legutols llapotot tkrzi, az elzmnyeket nem tartalmazza, akkor brzolsmdunk mr teljesen megfelel. 2 Ezek a felttelek azt jelentik, hogy egy j rekord felvtelekor nem kell annak minden elemt ismernnk. Elfogadunk hinyos rekordokat is (lehet olyan adat, amit a felvtelkor nem is tudhatunk, pldul tanv elejn az osztlyzat.) De megszabjuk, mi az a minimlis tartalom, ami szksges egy rekord bershoz. 3 Az, hogy egy adatbzisnak csak egy koncepcionlis s csak egy fizikai szintje lehet, nem jelenti azt, hogy ezek az ignyek vltozsval nem vltozhatnak. Az egyedisg mindig csupn egy adott idpontra vonatkozik.

1-9

MITOKTAT: Tartalmazza a koncepcionlis szint TANTRGY objektumbl a tantrgy megnevezst s az oktat nevt, de mindkettt 15 karakterre lervidtett formban Ez a felhasznl a koncepcionlis szint egyik egyedtpust (HALLGAT) teljes mrtkben, egy msiknak (TANTRGY) csak egy rszt lthatja. Az adatbzis bizonyos rszeihez egyltalban nem frhet hozz. gy pldul a vizsgaeredmnyekbl semmit sem lthat, st azt sem tudja, hogy az egyes hallgatk milyen tantrgyakat vettek fel. 2. Felhasznl kls szintjnek egyedtpusai s tulajdonsgai: VIZSGAEREDMNY: Tartalmazza a hallgat vezetk s keresztnevt egy tulajdonsgknt, nvknt sszevonva, a tantrgy kdjt s a hallgatnak ebbl a tantrgybl elrt osztlyzatt. A hallgat nevt az adatbzis-kezel rendszer llaptja meg. A MITHALLGAT minden tantrgykd - osztlyzat kettshez tartoz hallgati azonost kdhoz kikeresi HALLGAT-bl az ehhez a kd rtkhez tartoz nevet. Ez a felhasznl a hallgatk adataibl a neveken, s a tantrgyakbl elrt osztlyzataikon kvl semmit sem lthat. Az 1.3. brn bemutatjuk a pldban szerepl adatbzis koncepcionlis, az 1.4. brn a kls szintjeit. A klnbz objektumokra fennll feltteleket ezen az brn nem tntettk fel. Az 1.5. brn ugyanebben az adatbzisban az egyes egyedtpusok konkrt elfordulsai, az adatokkal feltlttt adatbzis egy rsze lthat.

1.3. bra: Hallgati adatbzis koncepcionlis szintje.

1-10

1.4. bra: Hallgati adatbzis kls szintjei.

1.5. bra: Hallgati adatbzis koncepcionlis szintjn trolt s a kls szintekrl lthat adatai.

1-11

1.2.2.2. Kls szint A kls, ms nven logikai szint az az brzolsi md, ahogyan az egyes felhasznlk ltjk az adatbzist. Lershoz ugyanazt az adatmodellt hasznljuk, mint a koncepcionlis szinthez. Egyedtpusait (objektumait) s azok tulajdonsgait a koncepcionlis szinten definilt egyedtpusokbl, azok tulajdonsgaibl s a kztk lv kapcsolatokbl definiljuk az adatler nyelv (ld. 1.3.1.1. pont) segtsgvel. A kls szint egyedtpusai megegyezhetnek a koncepcionlis szint egyedtpusaival s a bels szint rekordjaival, mint pldul az 1. felhasznl HALLGAT objektuma. De lehet annak csupn egy rsze, mint az 1. felhasznl MITOKTAT objektuma, vagy sszellhat tbb egyedtpus adatainak meghatrozott szempontok alapjn trtn sszevlogatsa alapjn is (2. felhasznlnl a VIZSGAEREDMNY). 1.2.2.3. Koncepcionlis szint A koncepcionlis szint rja le a teljes logikai adatszerkezetet. Miknt nznnek ki mindenki szmra az adatok, ha mindenki mindent lthatna bellk. Tartalmazza az sszes egyedtpust, ezek adatbzisbeli lekpezseinek, a rekordoknak a lerst. Pontosan meghatrozza minden egyedtpus tartalmi lerst, s tulajdonsgait. Pldul van egy HALLGAT egyedtpusunk (rekordtpusunk), annak van egy VEZETKNV tulajdonsga (oszlopa, mezje), melynek egy konkrt rtke egy meghatrozott hallgat vezetknevt jelenti. De az adatfggetlensg rdekben ezen a szinten kzvetlenl nem utalunk arra, hogy ez karaktereket tartalmaz 30 bjt hosszsgban, hol tallhatk ezek az adatok s hogyan frhetnk hozzjuk. Ezen informcikat az adatbzis szerkezett ler metaadatok, a katalgus tartalmazza, s a fizikai szinten hasznljuk fel ket. A koncepcionlis szinten rjuk le azt is, hogy milyen felttelek, kapcsolatok vannak az egyes rekordtpusokon bell s a klnbz rekordtpusok kztt, mint azt az 1.2.2.1. pont pldjban bemutattuk. Br elvileg nem tartozik az adatmodellhez, gyakorlatilag itt adjuk meg azt is, hogy a klnbz rekordtpusokhoz, vagy azok egyes rszeihez kik s milyen clbl frhetnek hozz. Itt hatrozzuk meg az adatbzis vdelmnek logikjt. 1.2.2.4. Bels szint A bels, fizikai szint lerja az adatok trolsnak, szervezsnek s elrsnek mdjt. A trolsi md megadja, melyik lemezeken, annak melyik cilinderein, mely svjaiban s blokkjaiban helyezkednek el az adott rekordtpus egyes rekordjai. Ezen bell hol vannak az egyes rekordok, a rekordokon bell azok mezi, milyen konverzit kell elvgezni a fizikailag trolt adatokon, hogy a felhasznlknak a megfelel formban lljanak rendelkezsre. A szervezsi md megadja, hogyan, milyen rendben helyezkednek el a rekordok, milyen struktrkat ptettnk fel rjuk, hogy lehetv tegyk egyszer s gyors elrsket. Az elrsi md az a tnyleges hozzfrsi t, ahogy az alkalmazsban a klnbz szervezsi mdok kzl kivlasztjuk azt, amelyikkel az adott esetben elrjk az adatokat. Tipikus szervezsi s elrsi mdok: A troln val elhelyezkedsnek megfelel fizikai sorrend. Valamelyik mez(k) rtkei szerinti logikai sorrend. Valamelyik mez(k) rtke szerint kzvetlen hozzfrs. A bels szinttel, miutn ennek meghatrozsa az adatbzis mkdst gyakorlati szempontbl igen ersen befolysolja a 2. fejezetben rszletesen foglalkozunk.

1-12

1.3. Az adatbzis-kezel rendszer komponensei Minden adatbzis-kezel rendszer tartalmaz egy vezrl programot, mely sszehangolja az egyes komponensek mkdst. Ennek rszei a kvetkezk: Kapcsolattart. Ez teszi lehetv, hogy az egyes alkalmazsok kapcsolatba tudjanak lpni az adatbzissal. Feladat tkonvertl. Az adatbzis-kezel rendszer nyelvn megfogalmazott utastsokat elemzi, rtelmezi, s ha vgrehajthatak, meghatrozza a vgrehajts vrhatan leghatkonyabb mdjt. Elrs meghatroz. Az adatok elrsre meghatrozott mdszert tfordtja az opercis rendszer ltal rtelmezhet parancsokk. Elindtja, majd rtkeli ezen parancsok vgrehajtst. A fenti komponensek egyttmkdst az 1.1.3. pontban ismertettk s az 1.1. brn mutattuk be. A korszer adatbzis-kezel rendszerektl megkveteljk, hogy az albbi szolgltatsokat nyjtsk: valamennyire tudjk hasznlni csekly szmtstechnikai, informatikai ismeretekkel rendelkezk is, legyen felhasznlbart nyelve az adatbzisban val mveletek elvgzsre, lehessen hasznlni prbeszdes (interaktv) zemmdban, egyszeren lehessen az adatbzis-kezel utastsokbl programnyelvi utastsokat generlni, biztostsa a rendszer meghatroz jellemzinek automatikus dokumentlst, ltezzen hozz grafikus interfsz, nagy adatmennyisgek rutin feldolgozshoz szolgltasson hatkony eljrsokat. A kereskedelmi forgalomban kaphat rendszerek tbb-kevsb teljestik a fenti kvetelmnyeket, br bizonyos esetekben ez csak kln szoftver termkek megvsrlsval biztosthat. 1.3.1. Adatler s adatkezel nyelv Napjainkban minden adatbzis-kezel rendszer az adatler, adatkezel s az adatbzissal kapcsolatos egyb feladatok megfogalmazsra az SQL nyelvet, illetve ennek valamely rszhalmazt hasznlja. A grafikus felleteken kommunikl rendszerek is erre a nyelvre fordtjk t a kijellt feladatokat. Az SQL nyelvet rszletesen ismertetjk az 5. fejezetben. 1.3.1.1. Adatler nyelv Az adatmodellnek a szmtgpes feldolgozs szmra alkalmas meghatrozst az adatler nyelven (Data Definition Language, DDL) fogalmazzuk meg. Ezzel definiljuk a koncepcionlis s a kls szintet s a fizikai struktrk s kapcsolatok lersa is rszben ezen a szinten trtnik. Az adatler nyelvnek hrom klnbz szinten kell lerni az adatbzis klnbz elemeit: A felhasznl szintjn, amely az adatbzis valamelyik logikai szintjt jelenti. Az adatbzis sszes egyedtpusnak, kapcsolatnak s tulajdonsgnak, az adatbzis rekordjainak s mezinek szintjn. Ez a koncepcionlis modell. A lers alapjn realizlt struktra maga az adatbzis.

1-13

Az adatok fizikai trolsnak s szervezsnek szintjn. Ez az egyes adatok fizikai trolsnak helyt, trolsi formjt, hozzfrsi lehetsgeit definilja. Az adatler nyelv az adatbzis objektumainak ltrehozsa mellett alkalmas meglv objektumok megszntetsre s mdostsra is. Ennek SQL nyelvi megvalstst az 5.6.2. pontban trgyaljuk. Az adatbzis felhasznli technikai ismereteiktl s az adatbzisban val jogosultsgaiktl fggen dolgozhatnak az adatler nyelv klnbz szintjeivel. Az tlagos felhasznl az els vagy legfljebb az els s msodik szintet hasznlhatja, mg a harmadik szinttel csaknem kizrlag az adatbzis-felgyel (ld. 1.4.2. pont) dolgozhat. 1.3.1.2. Adatkezel nyelv A feldolgozs cljaira szksgnk van egy adatkezel nyelvre (Data Manipulation Language, DML). Ennek segtsgvel a felhasznl az adatler nyelvvel definilt adatbzison mveleteket vgezhet. Ezek a mveletek az adatbzis adatait ltrehozhatjk, kivlaszthatjk, mdosthatjk, vagy trlhetik. Amennyiben a vltoztatsok olyan mezket is rintenek, melyhez a fizikai szinten valamilyen elrsi struktra is tartozik, akkor az adatbzis-kezel rendszer ennek aktualizlst is elvgzi. Az SQL nyelv adatkezel mveleteit az 5.6.3. pontban ismertetjk. A rgebbi adatbzis-kezel rendszerek adatler nyelve eljrs orientlt volt. A felhasznlnak le kellett rnia, hogyan, milyen ton akarja elrni a kvnt adatokat az adatbzisban. Ehhez jl kellett ismernie az adatbzis szerkezett, azt, hogy milyen mdon haladhat a kvnt cl fel a rekordok kzti kapcsolatok alapjn. Ezt gy mondtk annak idejn, hogy navigl az adatbzisban. Aki jl ismerte a klnbz utakat, hatkonyan naviglhatott. Aki viszont nem volt kell mrtkben tisztban ezekkel, az, ha nem is hajzta ktszer krbe a Fldet, bizony gyakran flslegesen vizsglt vgig tbb ezer rekordot, mg eljutott az gret Fldjre. Napjaink relcis adatbzis-kezel rendszereiben automatizltk az adatbzisban val tkeresst. A felhasznl csak azt mondja meg, mi a clja. Az ehhez vezet utat a rendszer hatrozza meg. Ezltal az adatbzis-kezel rendszerek hasznlata knnyebb vlt. Hatkony alkalmazsukhoz a gyakorlatban elfordul egyszerbb esetek tbbsgben nem kellenek komolyabb informatikai ismeretek. Tbbek kztt ez is oka volt annak, hogy a relcis rendszerek egyeduralkodv vltak. 1.3.1.3. Vezrlsellenrz nyelv Az adatbzisban trtn mveletek vezrlsre, ellenrzsre szolgl a vezrlsellenrz nyelv (Data Control Language, DCL).1 Ennek segtsgvel szablyozhat, hogy ki, min, milyen mveleteket vgezhet el, meddig lehet az elvgzett mveletek eredmnyeit hatlytalantani, az eredeti llapotot visszalltani, illetve mikortl vlnak azok vglegess, visszavonhatatlann. A hozzfrst szablyoz SQL utastsokat az 5.6.2.4. pontban, a mveletek eredmnyt vezrl utastsokat pedig az 5.6.4. pontban trgyaljuk. 1.3.1.4. Illeszts a programozsi nyelvekhez Az adatkezel s az adatler nyelvet hasznlhatjuk nllan, interaktv mdon (ld. 1.1.3. pont). Ekkor a felhasznl a terminljrl adja ki az utastsait, s itt kapja meg az eredmnyeket is. Az ilyen nyelvek mveleti lehetsgei korltozottak. Ha az adatokon
A Data Control Language-nek nincs elfogadott magyar megfelelje. Az ltalunk hasznlt vezrlsellenrz nyelv jobban kifejezi a nyelv funkcijt, mint a szszerinti adatellenrz vagy adatvezrl nyelv.
1

1-14

bonyolult algoritmus szerint kell mveleteket elvgezni, akkor ehhez az adatokat programbl kell kzvetlenl kezelni. Ezt teszik lehetv a programba bepthet adatbzis-kezel rendszerek. A programoz az adatbzis-kezel utastsokat ugyangy berhatja a programjba, mint a programnyelv tbbi utastst. Ezek vgrehajtsakor az adatbzis s a program kzti adatcsert az adatbzis-kezel rendszer vgzi el. A kvnt adatok bekerlnek a programba, ahol megtrtnhet a tovbbi feldolgozsuk, illetve a programban feldolgozott adatok kirdnak az adatbzisba. Az 5.7. alfejezetben ismertetjk, miknt lehet az SQL nyelv utastsait bepteni programokba. Az adatbzis-kezels programbl trtn megvalstsnak elnyei: Bonyolultabb, sszetett mveleteket is el lehet vgezni az adatokon. A programokat abban a nyelvben lehet rni, amelyik a legjobban illeszkedik a feladathoz, vagy amelyiket az installcinl ltalnosan hasznlnak, vagy amelyiket a programoz (legjobban) ismer. (Az els az elvileg helyes, a msik kett a gyakorlatban megvalsul megolds.) A programozknak csak az adatkezel (esetleg mg az adatler) nyelvet kell kln megtanulniuk az adatbzis hasznlathoz. A nagygpes adatbzis-kezel rendszereknek van prbeszdes s bepthet vltozata is. Az utbbiak bepthetk tbbek kztt COBOL-ba, JAVA-ba, PHP-ba, C s C++-ba is. 1.3.2. Metaadatok A metaadatok az adatbzis szerkezett, objektumainak, adatainak elnevezst, tulajdonsgait, szerkezett rjk le. Trolsuk az adatbzis egy nll rszben, a 7.fejezetben ismertetend katalgusban, ms nven adatsztrban trtnik. Az adatbzis felptsnek (nem a konkrt adatoknak!) brmilyen megvltozsa automatikusan aktualizlja a katalgust is. Ezltal a katalgus mindig naprakszen tkrzi az adatbzis llapott. Az adatsztr hasznlata nagymrtkben lecskkenti az adatbzis dokumentlsval kapcsolatos munkkat. Legegyszerbb formjban a katalgus az adat, rekord s objektum defincikat, a kztk fennll kapcsolatokat, a hozzfrsi s mveleti jogokat, az adatbzis architektra mindhrom szintjnek pontos, napraksz defincijt tartalmazza. Sok adatsztr tartalmaz informcikat olyan llomnyokrl, amelyek nem rszei kzvetlenl az adatbzisnak s a lefordtott programokrl is, melyek az adatbzissal dolgoznak. 1.3.3. Grafikus felhasznli interfsz Az adatbzissal kapcsolatos napi munkk egyik legkritikusabb eleme a tranzakcik vgrehajtshoz szksges adatok bevitele. Nagymrtkben megknnyti a felhasznlk munkjt, ha az adatokat egy jl megtervezett beviteli kpernyrl egyszeren lehet bevinni az adatbzisba. Az adatbzis-kezel rendszerhez tartoz, vagy kln kiegsztsknt megvsrolhat kperny tervezvel kijellhetjk a kpernyn, hov, milyen adatot kell berni, a bert adat plauzibilitst azonnal ellenrizhetjk, hiba esetn a bevitelt a hiba okra utal hibazenet ksretben visszautasthatjuk. Ha az adatbzisbl val lekrdezs eredmnye nem nhny sor, akkor azt clszer megfelelen formzott jelents (report) alakjban kiratni. Ez nem csak az egyes eredmnysorok szp elrendezst, fejlcet, lapvltst jelent, hanem csoportvlts beillesztst, kivlasztott numerikus adatokra csoport s totl sszegek kpzst, st akr mg grafikonok ksztst is. Klnsen fontosak ezek a jelentsksztk (report genertor) az adattrhzakbl nyert eredmnyek interpretlsnl.

1-15

Az adatbzis szleskr informatikai ismeretekkel rendelkez felhasznlinak is egyszerbb teszi a munkjt, ha a klnbz utastsok ktelez s vlaszthat paramtereit nem kell mindig egyenknt, betnknt lerva megadni, hanem egy listbl, egrrel vlaszthatjuk ki ket. Ilyen mdon gyorsabban, gyakorlatilag szintaktikai hibk nlkl tudjuk megfogalmazni utastsainkat. Klnsen hasznos a grafikus interfsz a lekrdezsek sszelltsban. Az igazsg kedvrt azonban hozz kell tennnk, hogy komplex, bonyolult lekrdezseket a grafikus interfszen keresztl nem tudunk megfogalmazni. Ilyenkor vissza kell trnnk az SQL utasts pontos formtumnak elemenknti megadsra. Az adatbzis-kezel rendszerek grafikus interfszre mutatunk be pldt a 6.1. alfejezetben. Ebben ismertetjk az ACCESS adatbziskezel-rendszer kperny tervezjt, Report Genertornak hasznlatt, grafikus interfszen keresztl val lekrdezsek megfogalmazst s adatbzis objektumok ltrehozst. 1.3.4. Szolgltat programok Az adatbzis-kezel rendszerek a rendszeresen elfordul, nagy tmeg adat rutinszer feldolgozsra specilis programokkal rendelkeznek. Ezeket szolgltat programoknak hvjuk. Leggyakoribb felhasznlsi terleteik: Formzott adatok betltse j adatbzis, vagy j adatbzis objektum ltrehozsakor, nagy tmeg adat bevitelekor, kimentett adatok helyrelltsakor. Adatbzis adatok formzott kimentse biztonsgi okokbl, vagy ms rendszerbe val tvitelhez. Adatbzis adatainak jraszervezse (kiments s adott sorrendben val visszatlts) az optimlis hatkonysgi szempontok ignybevtelvel. Flsleges adatok tmeges trlse. Tmeges, nem formzott kiments biztonsgi okokbl. Meghibsodott adatbzis(rsz) helyrelltsa biztonsgi mentsbl. Adatbzis trolkivonat ksztse, hogy az adatokat nem a formzott alakban, hanem tnyleges, fizikailag trolt formjukban lthassuk. Az optimlis elrsi utak meghatrozsra szolgl statisztikk ksztse az adatok aktulis elhelyezkedsrl. 1.4. Adat- s adatbzis-felgyel Az informcis technolgia bevezetse egy intzmnynl, vllalatnl maga utn vonja a szervezet s a szervezsi mdszerek megvltoztatst. Az adatbzis az intzmny kzs erforrsa, fejlesztst, mkdst kzpontilag kell biztostani. Ennek rdekben alakult ki a vllalati hierarchiban az informatikai munkkrt felels magas szinten lv vezeti pozci, akinek a munkjt kt szemly, az adat-felgyel s az adatbzis-felgyel segti.1 Nagyobb intzmnyeknl ezek ltalban egyegy erre a clra specializlt csoport munkatrsai s a felgyel ennek a csoportnak vezetje. Kisebb helyeken esetleg ugyanaz a szemly tltheti be mind a kt funkcit.

Az angol szakirodalom a Data Administrator s a Data Base Administrator szavakat hasznlja, aminek a magyar tkrfordtsa az adminisztrtor lenne. Ehhez a szhoz azonban a magyar nyelvben jval kisebb jelentsg funkci trsul, mint az angolban (ott pldul a kormnyzat is Administration). Ezrt clszerbb a magyar rtelmezshez kzelebb ll adat-felgyel s adatbzis-felgyel kifejezseket hasznlni.

1-16

1.4.1. Adat-felgyel Az adat-felgyel felgyeli az intzmny, vllalat informatikai erforrsait. Kivlan kell ismernie a vllalat bels szervezett, de azrt j szmtstechnikai szakember is. gy szt tud rteni az adatbzis-felgyelvel, aki viszont elsrend szmtstechnikai szakember az adatbzis-technolgia terletn. De jl ismeri a szervezet feladatait is, hogy megrtse s megfelelen meg is tudja valstani azt, amit partnere, az adat-felgyel szeretne. Az adat-felgyel f feladatai az intzmnyen, vllalaton bell: az informatikai politika kialaktsa, az adatbzis megtervezse, az adatbzis hasznlatnak beillesztse a krnyezetbe, a klnbz rszlegek ellenttes ignyeinek egyeztetse, a hozzfrsi jogok meghatrozsa, felhasznlk kikpzse, tovbbkpzse, az informatikai krnyezet fejlesztse. Ezen feladatok vgrehajtsakor szorosan egyttmkdik a felhasznlkkal, akiknek a gyakran megvalsthatatlan s/vagy egymssal ellenttes ignyeit kell megprblnia kielgteni, s az adatbzis- felgyelvel, aki a gyakorlatban implementlja az ltala kidolgozott terveket s feltteleket. A fent felsorolt feladatok kzl a knyv olvasi szmra legfontosabb az adatbzis megtervezse. Ezzel rszletesen foglalkozunk majd a 3.7. alfejezetben s a 4.7.3. pontban. 1.4.2. Adatbzis-felgyel Az adatbzis-felgyel elssorban a szmtgpes hardverrel s szoftverrel kapcsolatos technikai tevkenysgek irnytst s ellenrzst ltja el. Az adatbzis-kezel rendszerek lland fejldse nem vonja automatikusan maga utn az adatbzisokat hasznlk munkjnak javulst is. Ha az adatbzist egyszeren a mr meglv llomnyok egyestsvel hozzuk ltre, vagy hozzcsatolsval bvtjk, akkor a programozk s az interaktv felhasznlk ugyangy fogjk hasznlni a rgi, megszokott neveket a dupliklt adatokra, mint azeltt. gy lnyegben semmi sem vltozik azon kvl, hogy a korbbi, egyszerbb mdszerek helyett egy jelentsen bonyolultabb eljrst hasznlunk, melynek mind a hardver-konfigurcija, mind a gpid-ignye nagyobb. Az adatok szz szzalkosan redundancia-mentes trolsa nagymrtkben megnvelheti a hozzfrsi idt. De ugyanez bekvetkezhet redundns trolsnl is, ha a tbb helyen trolt adatok kzl nem a megfelelre hivatkozunk. Ugyancsak a hatkonysgot rontja, ha a folyamatos mdostsok kvetkeztben a fizikai adatszerkezet nem fog megfelelni az adatfeldolgozs logikjnak s ugyanazokat az adatokat csak sokkal tbb lpsben rhetjk el. A hatkony feldolgozshoz szksges felttelek kialaktst, a vltoztatsok konzisztens keresztlvitelt, az adatbzis tartalmnak rendszeres biztonsgi kimentst nem lehet az egyes felhasznlk knyre-kedvre bzni. Ezt a munkt vgzi el kzpontilag az adatbzis-felgyel. Az adatbzis-felgyel f feladatai a kvetkezk: Kzremkds az adatbzis megtervezsben, megszervezsben. Ez magban foglalja az adatmodell kialaktst, az adatbzis szintjeinek lerst, a definilt adatok elnevezst, a hozzfrsi jogok meghatrozst. Az adatbzis fizikai ltrehozsa. Ebbe beletartozik a fizikai, a koncepcionlis s a logikai szintek megvalstsa, a keressi stratgik megvlasztsa, a hozzfrsi jogok ellenrzsnek megvalstsa. Az adatbzis indul adatainak betltse. Nagy adatmennyisgek hozzadsa.

1-17

Az adatbzisba bevitt adatok integritsnak, ellentmonds mentessgnek ellenrzsre szolgl technikai felttelek megteremtse. Az adatbzis adatainak rendszeres kimentse, s esetleges hiba utn az eredeti llapot visszalltsa. Adatbzissal kapcsolatos munkk temezse. Az adatbzis hasznlathoz szksges szabvnyok kidolgozsa, azok betartatsa. Az adatbzis hasznlatnak lland figyelse. A hatkonysg jelents cskkense esetn az adatbzis jraszervezse. A felhasznlk ignyei alapjn az adatbzis szerkezetnek a mdostsa. Az adatbzissal dogoz felhasznlk segtse. Ahhoz, hogy az adatbzis-kezel rendszer ltal biztostott lehetsgekbl az sszes felhasznl fontossg s felhasznlsi gyakorisg szerint slyozott ignyeit figyelembe vev leghatkonyabb mdszert tudja kivlasztani, az adatbzis-felgyelnek jl kell ismernie nemcsak az adatbzis-kezel rendszert, hanem a felhasznli ignyeket is. Hiba a rendszert egy olyan feldolgozsra optimalizlni, amelyik havonta egyszer fut le, ha emiatt a naponta ismtld alkalmazsok lelassulnak. Hasonlkppen, ha egy vals idej irnyt rendszerben egy vlasznak egy adott idn bell meg kell rkeznie, akkor az adatokat gy kell szervezni, hogy ez mindenkppen megvalsuljon, akr ms feladatok feldolgozsi hatkonysgnak rovsra is. 1.5. Az integrlt adatbzis elnyei (s nhny htrnya) A fentieket sszefoglalva az adatbzisra s az adatbzis-kezel rendszerre a kvetkez meghatrozst adhatjuk: Az integrlt adatbzis olyan egymssal kapcsolatban ll adatok sszessge, melyeket klnfle felhasznlk klnbz csoportostsban hasznlhatnak. Az adatok fizikai elhelyezse, kzpontilag, redundancia mentesen, vagy minimlis, ellenrztt redundancival trtnik. Ugyancsak kzpontilag ellenrztt az adatok vdelme, j adatok bevitele s meglv adatok mdostsa is. Az adatbzis rsze az adatbzis elemeinek lerst, dokumentlst tartalmaz katalgus. Az adatbzison mkdik egy adatbzis-kezel rendszer. Ez lehetv teszi az arra jogosult felhasznlknak az adatbzishoz val hozzfrst gy, hogy a felhasznli programok s az adatok trolsi mdja egymstl fggetlen legyen. 1.5.1. Elnyk Az integrlt adatbzisok legfbb elnyeit az albbiakban foglalhatjuk ssze: Az adatbzist hasznl intzmny centralizltan ellenrizheti a mkdshez szksges sszes adatot. Az egysges tervezs kvetkeztben az adatok kzti logikai ellentmondsok jobban kiszrhetk. Az adatok tbbszrs trolsa, a redundancia megszntethet. Ezltal a klnbz helyeken hasznlt azonos tartalommal br adatok rtke minden alkalmazsban ugyanaz lesz. Nem fordulhat el, hogy a Humnpolitikai s a Br Osztly egymsnak ellentmond szemlyi adatokkal dolgozhasson. Ugyanannak a szemlynek a mindkt nyilvntartsban szerepl adatai mindig egyformk. Az adatok vdelme illetktelen hozzfrstl kzpontilag jobban megvalsthat. Az adatok kzpontilag szervezett mentse s hiba esetn a helyrelltsa jelentsen lecskkenti az zemkiess valsznsgt, illetve idtartamt. Az adatbzisba bepthet felttelek rvn nagymrtkben cskkenthetjk a hibalehetsgeket s a hibs adatok szmt. Olyan adat, amelyik nem felel meg az 1-18

adatbzisba beptett feltteleknek, semmikppen sem kerlhet be. Az ellenrzst nem kell minden alkalmazsba kln bepteni. Az adatbzisban lv adatlersoknak a programokba val ktelez beptsvel biztosthat az adatoknak az egysges felhasznlsa. Az adatok fizikai trolsnak megvltozsa nem befolysolja a felhasznli programokat. A klnbz krdseket klnbz formban lehet megfogalmazni, az egyes adatok kzti kapcsolatok jobban rtkelhetk. Az adatbzis-kezel rendszer sok olyan beptett segdeszkzt tartalmaz, amely megknnyti a felhasznli programok megrst. A teljes intzmny szempontjbl a feldolgozs hatkonyabb lehet. Azrt, hogy az adatbzis fent felsorolt elnyeit kihasznlhassuk, ltrehozst, karbantartst, az ignyekhez illeszked idnknti tszervezst, hasznlatnak szablyozst mind a fejleszti, mind az zemeltetsi krnyezetben kzpontilag irnytja az adatbzisfelgyel. 1.5.2. Nhny htrny Az eddigiekben kizrlag az adatbzisok s az adatbzis-kezel rendszerek hasznlatnak elnyeit ecseteltk. Nyilvnval azonban, hogy erre a terletre is igaz az eredetileg kzgazdszok ltal flfedezett alapigazsg, mely eredeti formjban gy hangzik: There are no free lunches. Ez htkznapi magyar nyelvre lefordtva azt jelenti: Nincs potya kaja. Az adatbzis hasznlatnak elnyeirt valamilyen ms mdon fizetnnk kell. Legfljebb azt mondhatjuk, hogy a gyakorlatban a legtbb esetben az elnyk kompenzljk a htrnyokat. Ezrt vgl rdemes az adatbzis hasznlata mellett dntennk. Az egysges adatbzis bevezetse s ktelez hasznlata ellen elssorban az szlhat, hogy nincs olyan szervezet, amelyik kpes lenne minden ltala hasznlt adatt egy integrlt vagy akr egy osztott adatbzisba sszehozni. Murphy trvnye alapjn, ha ltezne olyan adatbzis, amelyik egy (akrmilyen kicsi) vllalat sszes adatt s azok kapcsolatait tartalmazn, akkor annak kezelse olyan bonyolult lenne, hogy senki sem hasznln. Nem beszlve mg arrl a cseklysgrl, hogy egy ilyen adatbzisnak a megtervezse, l adatokkal val feltltse s naprakszen tartsa annyi pnzt, idt s emberi erforrst ignyelne, hogy az a szervezet, amelyik egyetlen egy adatbzisra pten sszes tevkenysgt rvid idn bell csdbe jutna. (A szerzk kiegsztse Murphy trvnyhez.) Mindig lesznek olyan helyi alkalmazsok, melyek sajt adatokkal, sajt fjlokkal, sajt kisebb, nll adatbzisokkal dolgoznak. Nem vletlen, hogy a legjabb adatbzis tpusokban, az adattrhzakban az adatbzisok adatainak tvtelekor az egyik legfontosabb lps az adatok helyessgnek ellenrzse s egysges formba val talaktsa (ld. 9.3. alfejezet). Az adatbzis-kezel rendszerek eleve azzal a cllal kszlnek, hogy klnfle adatstruktrkon, sokfle alkalmazsra lehessen ket felhasznlni. gy mindenkinek nyjtanak valamit. De ppen ltalnos jellegkbl kvetkezik, hogy kifejezetten egy feladat megoldsra kszlt, hagyomnyos fjlokkal, vagy az adott clra optimalizlt egyedi adatbzissal dolgoz clrendszerek hatkonyabbak lehetnek egyes feladatok elvgzsre. Ez tovbb ersti a ksrtst, hogy az integrlt adatbzistl fggetlenl dolgozzunk. Klnsen igaz ez akkor, ha nagy erforrs igny feladatrl van sz, mert ilyenkor a ltszlagos megtakarts nagy lehet. (Valjban, amit a rven nyernk, elvesztjk a vmon. Az adatok konzisztencijnak biztostsakor, a ksbbi, okvetlenl elvgzend mdostsokkor fellp problmk miatt ez az elny csaknem mindig idleges csupn.)

1-19

Tovbbi htrny, hogy az adatbzis mkdtetshez ahhoz rt, specilis szemlyzet szksges. Mivel ez a szakterlet rohamosan fejldik, vltozik, ezen emberek rendszeres tovbbkpzsrl is gondoskodni kell. Ma mr kevs olyan hely van, ahol nullrl indul az adatbzis ltrehozsa. Mgis gyakran elfordul, hogy a korbbi rendszerben ellentmondsmentesnek s hibtlannak bizonyult adatok kztt az j rendszer szigorbb kvetelmnyei s jobb ellenrzsi lehetsgei inkonzisztencikat, ellentmondsokat trnak fel. Ezeket ltalban egyedileg kell kijavtani. Ms adatbzis-kezel rendszerre val ttrskor gyakori, hogy a korbbi programokat jra kell rni, vagy legalbbis mdostani kell. Egy j adatbzisra, adatbziskezel rendszerre val tlls mindenkppen hosszabb ideig tart s kltsges. Az indul befektets (hardver, szoftver, emberek) mindenkppen magas. Mivel (szinte) minden informcit az adatbzisbl nyernk, rendkvl nagy gondot kell fordtanunk annak lland rendelkezsre llsra, zembiztos, megszakts nlkli mkdtetsre. Tovbbi gondot jelent, hogy a legtbb cg bizonyos konkrt feladatok megoldsra kszen vsrolt szoftvert hasznl. Nem biztos, hogy ez a szoftver kzvetlenl egytt tud mkdni az adatbzis-kezel rendszerrel. Ilyenkor esetleg egy drgbb, rosszabb paramterekkel rendelkez szoftvert vagyunk knytelenek vlasztani, vagy el kell ksztennk a kt rendszer kzti kompatibilitst biztost interfszt. Az integrlt rendszer nhny tovbbi htrnyt, melyek az osztott adatbzisok kialaktshoz vezettek az 1.6.3. pontban, az osztott adatbzisoknl trgyaljuk. 1.6. Adatbzis-kezel rendszerek csoportostsa Az adatbzis-kezel rendszereket csoportosthatjuk aszerint, hogy egy vagy tbb felhasznl dolgozhat-e vele egyidejleg, ugyanazon a gpen van-e az adatbzis s az adatbzis-kezel rendszer, az adatbzist egy vagy tbb gpen troljuk. 1.6.1. Egy felhasznls rendszerek Egy felhasznls adatbzis-kezel rendszerek ma mr kizrlag szemlyi szmtgpeken futnak. Ezek, az eddig ismertetett tbbfelhasznls rendszerektl az albbiakban klnbznek: ltalban csak egyszerbb adatszerkezetet tudnak kezelni. A relcis modell nyjtotta lehetsgeket csak rszben tmogatjk. Adatvdelmk lnyegesen gyengbb. Gyakran nincs is nll, vagy csak nagyon korltozott vdelme van az adatbzisnak magnak. Biztonsgi msolatok ksztse, helyrellts hiba esetn nem vagy csak nagyon korltozottan automatizlt. Igen j grafikus felhasznli interfsszel rendelkeznek. Egyidej hozzfrsekbl add problmkra jellegbl kifolylag nincs flkszlve. Ezrt az adatbzis tbbfelhasznls kibvtse gondot okozhat. Az adatbzis-kezel rendszer beszerzsnek s mkdtetsnek kltsgei nem csak abszolt rtelemben, hanem relatv, az egsz konfigurci, vagy a teljes szoftver kltsgeihez kpest is sokkal alacsonyabbak. Ennek oka, hogy egy bonyolult, sszetett, nagy rendszert kezel szoftvert esetleg csak nhny szz pldnyban lehet eladni, mg egy sikeres PC-s adatbzis-kezel rendszert akr szzezres pldnyszmban is rtkesthetnek.

1-20

Nem, vagy csak korltozottan kell figyelembe venni ms felhasznlk informatikai ignyeit. Legfljebb azzal kell trdnnk, hogy milyen adatokat vesznk t msoktl, s milyen adatokat ignyelnek tlnk. Igen nagy adatmennyisgek trolsra s feldolgozsra nem alkalmasak. (Ez a technikai hatr folyamatosan toldik flfel. A mai PC-k trolsi lehetsgei, mveleti sebessgk tbb nagysgrenddel meghaladjk a 70-es vek szuperszmtgpeinek hasonl jellemzit.)

1.6.2. Kliens-szerver architektra A 80-as vekig az adatbzis s az adatbzis-kezel rendszer ugyanazon a szmtgpen volt. Csupn a felhasznlval val kzvetlen kommunikci kerlt ki terminlokra, munkallomsokra, majd szemlyi szmtgpekre. Igen sok, rgrl itt maradt, nagy biztonsgot ignyl alkalmazs mg ma is gy mkdik. Termszetesen ezeknl a kzponti gp egy igen nagy teljestmny mainframe. A nagy rendszerek tbbsgben azonban, fleg az jabban ltrejttekben, a feldolgozs s az adatbzis helye elvlik egymstl. A kliens-szerver architektrban az adatbzis feldolgozsi munkkat az 1.6. brn lthat hrom szintre bontjuk. A megjelent szinten keresztl lpnk kzvetlen kapcsolatba az adatbzissal. Ezen keresztl rjuk be, illetve olvassuk ki az adatokat. Ehhez hozztartozik az input adatok formai ellenrzse s az eredmnyek formzott megjelentse is. A hardver ltalban a rendszer tbbi rszvel hlzaton keresztl kommunikl munkalloms vagy szemlyi szmtgp. Szoksos elnevezse kliens gp, vagy front-end processzor. Egy adatbzishoz nagyon sok kliens gp csatlakozhat. Az adatbzishoz kzvetlenl kapcsold utastsok, a fizikai mveletek vgrehajtsa egy nll gpen, az adatbzis szerveren, ms elnevezssel a back-end processzoron trtnik. (Gyakran ezt nevezik rviden szerver gpnek.) Ezen fut az adatbzis-kezel rendszer s ehhez a gphez kapcsoldik a lemezeken trolt adatbzis. Ez a trol kezelsi szint.

1.6. bra: Kliens-szerver feldolgozs szintjei. A feldolgozs rdemi rsze, a felhasznl azonostsa, az input adatok tartalmi ellenrzse, az alkalmazs logikjbl add mveletek vgrehajtsa, s az adatbzissal kapcsolatos mveletek meghatrozsa a feldolgozsi szinten trtnik. Ez megvalsulhat egy nll gpen, a feldolgoz szerveren (Application Server), vagy megosztva a kliens s az adatbzis szerver gp kztt. A megoszts mrtke a kliens s a szerver gpek teljestmnytl, a hlzat paramtereitl s/vagy a feldolgozs logikjtl fgg. Specilis formja a megosztsnak, amikor az adatbzis szerver gpen troljuk az adatbzis mveletet, de az ott trolt eljrst (stored procedure) a kliens gprl kiadott utastssal indtjuk el. Ez a mdszer megnveli az SQL mveletek hatkonysgt s lecskkenti az adatforgalmat. Osztott adatbzisokban (ld. 1.6.3. pont) tbb feldolgoz s adatbzis szerver van. 1-21

A hromszint kliens-szerver architektrt az 1.7. bra mutatja.

1.7. bra: A hromszint kliens-szerver architektra. A feladatoknak ez a sztosztsa lehetv teszi a kliens gpeknek a felhasznlval val kzvetlen kommunikcira, a szerver gpnek pedig az adatkezel mveletekre optimalizlst. A hrom klnbz szinten fut programokat egymstl fggetlenl vltoztathatjuk, ami nagyfok rugalmassgot eredmnyez a feldolgozsban. 1.6.3. Osztott adatbzisok Az integrlt adatbzisok szleskr elterjedse tbb problmt is kihozott. Ezek kzl nhnyat az 1.5.2. pontban ismertettnk. Az ott felsoroltakon kvl komoly gondokat okozott az hogy az integrlt adatbzisoknl a kzpont meghibsodsakor minden informciszolgltats lell, igen nagymrtkben megnvekszik az adattviteli vonalak terhelse, az adatoktl tvol lv felhasznlk kevsb rzik sajtjuknak a kzpontban trolt adatokat, kisebb erfesztseket tesznek azok lland napraksz llapotban val tartsra. Ezen problmk kikszblsre alaktottk ki az osztott adatbzisokat. Az osztott adatbzis egy olyan logikai adatbzis, amelyik fizikailag klnbz helyeken lv, egymssal adattviteli hlzattal sszekapcsolt helyi adatbzisokbl pl fel. Mindegyik adatbzis adatai brmelyik adatbzisbl elrhetek, dolgozni lehet velk. A felhasznlnak nem kell tudnia, hogy az egyes adatok melyik helyi adatbzisban vannak trolva. A helyi adatbzisokat nevezzk csompontoknak is. Ezek a legklnbzbb szmtgpeken lehetnek s klnbz adatbzis-kezel rendszerek alatt futhatnak. Irnytsuk, addig, amg csak a helyi adatokkal dolgoznak, megegyezik az eddig ismertetett mdokkal. A felhasznl szemszgbl nzve az osztott adatbzisoknak ngy fontos jellemzjt emeljk ki:

1-22

A felhasznl az adatkezel mveletekkel az osztott adatbzisban ugyangy dolgozhat, mint egy integrlt adatbzisban. Az adatoknak a klnbz helyekrl val sszeszedst az adatbzis-kezel szoftver automatikusan elvgzi helyette. Ezt hvjk helyfggetlensgnek (local transparency). Ha ugyanaz a rekord (adat) tbb pldnyban is megtallhat az adatbzisban, akkor a felhasznl szmra kzmbs, hogy melyik pldnnyal dolgozik. Ezt hvjk msolatfggetlensgnek (replication transparency). Termszetesen az adatbzis-kezel rendszernek mindig a legknnyebben elrhet pldnyt, ha van, akkor a helyi msolatot kell rendelkezsre bocstania. Az osztott adatbzis minden egyes csompontjban mkdik egy helyi adatbziskezel rendszer. Ha csupn a helyben trolt adatokkal kell dolgozni, akkor ez ugyangy mkdik, mint egy centralizlt rendszer. Mindegyik csompont azonos rtk abbl a szempontbl, hogy brmelyik brmelyikkel azonos mdon lphet kapcsolatba. Az osztott adatbzisok ltrehozsa az albbi elnykkel jr: Egy csompont meghibsodsa csak a kizrlagosan ott trolt adatokat teszi elrhetetlenn. A rendszer tbbi rsze mkdkpes marad. Jelentsen lecskken az adattviteli vonalak terhelse, miltal a kommunikcis kltsgek jval kisebbek lesznek. Az adatok a felhasznlk kzelben maradnak. Ezltal jobban motivltak azok naprakszen tartsban. A teljes adatbzis modulrisan pthet fel. Az egyes csompontok menet kzben cserlhetk, jelentsen mdosthatk, a rendszer lelltsa nlkl. Ugyanakkor nyilvnval, hogy szmolnunk kell bizonyos htrnyokkal, veszlyekkel, s felmerlnek jabb megoldsra vr krdsek is, mint A rendszer s adminisztrcija igen bonyolultt vlhat. Inhomogn adatbzisoknl adattvitelkor problmk addhatnak. Egyetlen csompont sem zrhat be kvetkezmnyek nlkl a tbbi eltt. Ha pldul a csompont egy raktr adatbzisa s ott lejrt a dolgozk munkaideje, a helyi adatbzist mgsem lehet bezrni. A tbbi felhasznlnak szksge lehet olyan adatokra, amelyeket csak ott trolnak. Ha minden adatot csak egy helyen trolunk, akkor megnvekszik a hibaveszly s az adatforgalom. Ha redundnsan, tbb helyi adatbzisban is troljuk, akkor meg kell oldanunk ezek vltoztatsnak szinkronizcijt, hogy a gyakorlatilag fontos esetekben mindenhol mindig ugyanaz az adat lljon mindenkinek a rendelkezsre. Ennek megfelel megoldsa az osztott adatbzisok egyik legnagyobb problmja. A gyakorlatban alkalmazott mdszerek: Az adatok tbbszrzse, tbb helyen val trolsa. Ez a replikci. Az egyedtpus egyes egyedeit klnbz helyeken trolhatjk, de egy egyedelforduls (egy rekord) minden eleme egy helyen tallhat. Ez a horizontlis adatmegoszts. Az egyedtpus egyes mezit klnbz helyeken troljk. A teljes (logikai) rekordot tbb helyi adatbzisbl kell sszelltani. Ez a vertiklis adatmegoszts. A fentiek valamilyen kombincija. Ezekkel az 1.6.3.2. - 1.6.3.5. alpontokban kln is foglalkozunk.

1-23

1.6.3.1. Osztott adatbzisok architektrja Minden csompont tartalmazza A helyi adatbzis-kezel rendszert, az osztott adatbzis-kezel rendszer egy helyi pldnyt, a teljes rendszer szerkezett ler globlis katalgus (ld. 7.2. alfejezet) egy helyi pldnyt, a helyi alkalmazsi programokat (melyek dolgozhatnak ms helyeken lv adatokkal is). Egy jl felptett osztott adatbzisban a hozzfordulsok zmben a felhasznl kizrlag a helyi adatbzis adataival dolgozik. Ha ms adatbzisban lv adat(ok)hoz kell hozzfrnie, akkor azok fizikai helyt a globlis katalgusbl (ld. 7.2. alfejezet) keresi ki a rendszer. Az ilyen tvoli hozzfrsnl (remote access) a helyi gp a tvoli adatbzis-gp klienseknt viselkedik. Az osztott adatbzisok leggyakoribb architektrjt az 1.8. brn lthatjuk.

1.8. bra: Osztott adatbzis architektrja.

1-24

1.6.3.2. Adat tbbszrzs Osztott adatbzist a legegyszerbben gy hozhatnnk ltre, hogy minden adatot tbbszrznk, mindent mindenhol trolunk. Mg ha a megnvekedett trol ignnyel meg is bklnnk, akkor is a mdostsoknak az sszes helyen idben val keresztlvezetse elviselhetetlen terhet rna a rendszerre. Az pedig megengedhetetlen, hogy a klnbz helyeken trolt, azonos jelentst tartalmaz adatoknak helyenknt ms legyen az rtke. Ezrt csak olyan adatokat trolunk minden, vagy tbb helyi adatbzis rendszerben melyek nlklzhetetlenek a gyors mkdshez. Ezek kz tartozik a globlis katalgus, s ide tartozhatnak egyes, az alkalmazsi programok ltal igen gyakran hasznlt adatok. melyek kritikusak a rendszer mkdse szempontjbl. Meghibsodsuk, idszakos elrhetetlensgk megbntan a rendszert. Ezeket biztonsgi okokbl tbb pldnyban, tbb helyen troljuk, hogy valamelyikkel mindig lehessen dolgozni. melyek igen ritkn vltoznak (pldul menetrendek, rukatalgusok, trzsvsrlk, adattrhzak adatai). A harmadik csoport adatainak konzisztencija viszonylag egyszeren biztosthat. Az ilyen adatok csak meghatrozott idkzkben mdosthatak. Ilyenkor a rgi pldnyokat minden helyen lecserlik az jra, vagy a mdostsokat minden pldnyon vgrehajtjk. Az els kt csoportban azonban gondokat okoz az adatok konzisztencija. Brmely, tbb pldnyban trolt adat brmelyiknek megvltoztatsa maga utn vonja az sszes dupliktum megvltoztatst is. Amg a helyi dupliktumok aktualizlsa nem zajlik le, addig ezekhez nem, vagy csak korltozottan lehet hozzfrni. Errl, valamint ugyanazon rekordoknak, adatoknak tbb helyrl indtott mdostsainak koordinlsrl az osztott adatbzis-kezel rendszer gondoskodik klnfle zr-mechanizmusok segtsgvel (ld. 8.3. alfejezet). Mivel az elzrsi idk a mdostsoknak az adattviteli hlzaton val thaladsi ideje miatt lnyegesen hosszabbak, mint a centralizlt rendszereknl, ezrt a gyakran vltoz adatoknl a tbbszrsen trolt, mdosthat adatok szma nem lehet tl nagy. 1.6.3.3. Horizontlis adatmegoszts Horizontlis adatmegosztsnl egy egyedtpus (tblzat) bizonyos rekordjait (sorait) az egyik helyen, ms rekordjait egy msik helyen troljuk. Azt, hogy melyik rekordot hol, melyik adatbzisban troljuk, a rekord valamely mezjnek (mezinek) rtke hatrozza meg. Plda a horizontlis adatmegosztsra egy bank, melynek sok orszgban (vrosban) vannak fikjai. Mindegyik orszg/vros nll adatbzissal dolgozik, melyek egy osztott adatbzis rszei. Az egyes szmlatulajdonosok adatait, megbzsait csak egyszer, a szmlavezet bank helyi adatbzisban troljuk, mivel a tulajdonos felteheten legtbbszr innen kezdemnyezi banki mveleteit. gy ezek ott, helyileg kezelhetk. A szmlaszm egyrtelmen utal a szmlavezet fikra s azon keresztl az adatbzis helyre. Ezrt ennek rtke szabja meg a rekordok trolsi helyt. Ha a feladathoz jl illeszked horizontlis adatmegosztst alaktunk ki, akkor az adathozzfrsek zme helyileg lebonyolthat. Ez lnyegesen gyorsabb feldolgozst biztost, mintha tvoli adatbzisokban is kellene keresni. A fenti pldnl maradva, ha a bank csak trvnytelen mdon szerzett, piszkos pnzekkel foglalkozna, s ezrt a nyomon kvets megneheztse rdekben mindenki egy msik orszgbl intzn az gyeit, akkor ezzel a megosztssal semmit sem javtannk a feldolgozson, st, knnyen lehet, hogy rontannk rajta.

1-25

1.6.3.4. Vertiklis adatmegoszts Vertiklis adatmegosztsnl az adat tulajdonsga, a rekord mezjnek a neve (s nem a mez tartalma!) hatrozza meg, hogy hol troljuk az rtkt. Tiszta vertiklis megosztsnl a tblzat minden sort troljuk mindenhol, ahol az helyi adatokat tartalmaz.. De a soroknak csak azok az oszlopai, a rekordoknak azok a mezi troldnak helyileg, melyekre a helyi feldolgozsban szksg van. A teljes (logikai) rekordot a klnbz helyeken trolt rekordmezkbl a minden helyen trolt, a rekordot egyrtelmen azonost elsdleges kulcs segtsgvel kapcsolhatjuk ssze. A teljes rekord sszelltsa lnyegesen idignyesebb, mint a horizontlis megosztsnl. Egyszer plda a vertiklis adatmegosztsra egy olyan gyrt-rust cg, amelyiknek klnbz helyen van a gyrt s az rtkest rszlege. A gyrt helyen lv adatbzisban troljuk az egyes termkekre vonatkoz sszes gyrtsi, az rtkestsi kzpontban az sszes rtkestsi adatot. A kett kzti kapcsolatot az egyrtelmen azonost termkszm biztostja. 1.6.3.5. Kombinlt adatmegoszts Bizonyos esetekben clszer az elz pontokban ismertetett adatmegosztsok kombincijval dolgozni. Az elz pontban bemutatott cgnek Budapesten van az rtkestsi, Pcsett a gyrtsi kzpontja s ezen kt vroson kvl mg Debrecenben s Szegeden is vannak ruhzai. Az osztott adatbzis a ngy vros helyi adatbzisbl pl fel. Ebben az esetben clszer lehet az ruhzakban trolt ruknak az eladshoz szksges adatait horizontlisan megosztani mind a ngy vros kztt. A termkek rtkestsvel kapcsolatos gyviteli adatokat csak Budapesten, a gyrtsi adatokat csak Pcsett, vertiklisan megosztva troljuk. Miutn mindenhol szksg van r, s csak ritkn vltozik, periodikusan aktualizlhat az rukatalgus s az rlista, ezeket mindegyik helyen, tbbszrsen troljuk. A kombinlt adatmegosztst az 1.9. bra mutatja.

1.9. bra: Kombinlt adatmegoszts 1-26

1.6.3.6. Adatelosztsi stratgik Az osztott adatbzisok hatkonysgt dnten befolysolja, miknt duplikljuk, s miknt osztjuk szt az adatokat a helyi adatbzisokban. Az els szempont az, hogy az adatokat ott troljuk, ahol azokat a leggyakrabban hasznljk. A msodik az, hogy trolhatjuk mg ott is, ahol rendszeresen szksg van rjuk. Az optimlis adatmegoszts rdekben figyelembe kell vennnk: Hol hasznljk a legtbbet az rintett rekordot, adatot. A vizsglatnak a hasznlat mdjra is ki kell terjednie, legfkppen arra, hogy az adott csompontban a krdses adatot csak olvassk, vagy ltrehozzk, trlik, mdostjk is. Ha tbb hely jhet szmtsba, s a rekordbl, adatbl csak egy pldny van, akkor azt ltalban clszerbb a legintenzvebb vltoztatsi helyen trolni. (Gondoljunk arra, hogy az A helyen lv raktrbl, B-bl s C-bl rustunk. Az osztott adatbzis a hrom helyi adatbzisbl pl fel. Els ltsra gy tnik, hogy mivel a kirtkelsre s az sszegzsre az adatoknak vgl A-ba kell eljutniuk, azokat ott a legclszerbb trolni. Ha azonban elg sok elads esik egy kirtkelsre, sszegzsre, akkor valsznleg hasznosabb a raktrkszlet adatait B-ben s valsznleg C-ben is elhelyezni. Az rintett adat mennyire nlklzhetetlen az adatbzis rendszeres hasznlathoz. A nlklzhetetlen adatokat nlklzhetsgk foktl fggen rdemes tbb pldnyban, esetleg akr minden helyi adatbzisban trolni. Statikus, vagy csak meghatrozott karbantartsi idpontokban vltoz adatok tbbszrzse gyakran tbb hasznot hoz az elrsi id megrvidlse rvn, mint amennyi htrnyt a megnvekedett trol igny s a msolatok idszakos felfrisstse jelent. A trols s az elrs kltsgei, a hozzfrs gyorsasga. Klnsen inhomogn rendszereknl fordulhat el, hogy egy adat trolsa, elrse ms kltsgekkel jr, hosszabb ideig tart az egyik csompontban, mint a msikban. A hozzfrsi id nvekedst eredmnyezheti egyes csompontok tlterhelse is. Ekkor clszer lehet innen egyes adatokat mshov ttelepteni vagy dupliklni. A felsoroltak mindegyikrl elmondhatjuk, hogy mkds kzben a megvizsglt felttelek megvltozhatnak. Ezrt az adatmegosztson idnknt mdostanunk kell. Ez azonban a felhasznli programokat nem rinti. Az egyetlen, amit ebbl szrevehetnek az, hogy ha a feladatoknak megfelelen mdostottuk az adatszerkezetet -, akkor a rendszer gyorsabb lesz. 1.7. Ellenrz krdsek 1. 2. 3. 4. 5. 6. 7. 8. 9. Milyen sszetevkbl plnek fel az informcis rendszerek? Milyen szoftver-rtegeken keresztl lpnk kapcsolatba az adatbzis-kezel rendszerrel? Milyen szolgltatsokat kell biztostani egy korszer adatbzis-kezel rendszernek? Milyen szintekbl pl fel az adatbzis architektrja? Mi a klnbsg az adatler (DDL) s az adatkezel (DML) nyelv kztt? Mik azok a metaadatok s hol troljk ket? Milyen grafikus interfszekkel kapcsoldhatunk az adatbzishoz? Milyen feladatokat ltnak el a szolgltat programok? Mi a klnbsg az adat- s az adatbzis-felgyel kztt? Mik a f feladataik? 1-27

10. Mi a kliens-szerver architektra? Milyen szintjei vannak? 11. Milyen elvek szerint osztjk szt az adatokat az osztott adatbzisokban?

1-28

2. ADATTROLS S ADATSZERVEZS
Az adatbzisokkal foglalkoz knyvek ritkn foglalkoznak az adatok fizikai szerkezetvel, tnyleges trolsi mdjval. Ennek az a magyarzata, hogy az adatbzis felhasznli ell ez rejtve marad. A relcis modell, mint olyan, nmagban fggetlen annak fizikai realizlstl. Az adatfggetlensg (ld. 1.2.1. pont) kvetkeztben a bels szint jellegzetessgei, vltozsai nem jelentkeznek a felsbb szinteken, legalbb is elmletben. A gyakorlatban azonban a fizikai adatstruktra s a megvalsthat elrsi utak igen nagymrtkben befolysoljk a rendszer hatkonysgt. Jl megvlasztott trolsi struktrval jelentsen cskkenthetjk az adatbzis trol ignyt. Jl definilt, a trol szerkezethez s a vrhat felhasznli mveletekhez igazod elrsi utak ltrehozsval pedig akr nagysgrendekkel gyorsabb vlaszadsi, feldolgozsi idket rhetnk el. Ezrt az adatbzisfelgyelnek mindenkppen tisztban kell lenni azzal, hogy mi trtnik az adatmodell fizikai szintjn. Ugyanez rvnyes azokra a felhasznlkra is, akik jogosultak a sajt kls szintjkn fizikai elrsi utak, trolsi struktrk ltrehozsra, vagy definilhatnak ilyeneket a koncepcionlis szinten. A bels szint kialaktsakor a kt f feladat az adatbzis megfelel szerkezetnek a kialaktsa, a szerkezet ismeretben adott feltteleknek megfelel rekordok megtallsa, vltoztatsa a lehet legrvidebb idn bell. Az optimlis adatbzis minimlis trol helyet foglal el, s az egyes adatok megtallshoz, vltoztatshoz szksges idnek is minimlisnak kell lennie. Ezek a kvetelmnyek egyidejleg azonban legfljebb csak igen egyszer rendszereknl valsthatk meg. ltalnosan igaz, hogy brmely adatbzis szerkezetnl a trol hely s a feldolgozsi id fordtott arnyban ll egymssal. Jl megtervezett rendszerben az egyik cskkense maga utn vonja a msik megnvekedst. Ugyanez rvnyes a visszakeressi, valamint a vltoztatsi idkre is. Minl hamarabb tudunk egy rekordot megtallni, annl hosszabb ideig tart egy j rekord bersa, meglv mdostsa, trlse ugyanabban az adatszerkezetben. A fentieket lthatjuk kvalitatvan a 2.1. brn.

2.1. bra:

Az adatbzis ltal elfoglalt trol hely s a feldolgozsi id, illetve keressi s a vltoztatsi id kzti kapcsolat jellege.

2-1

Br a trols fajlagos kltsge, 1 Mbjt trolsnak az ra folyamatosan cskken, mgis, a teljes hardver kltsgeknek 30-40%-t teszik ki az adattrolssal kapcsolatos kiadsok. Ennek ellenre, mivel tbb s nagyobb kapacits trolkat hozzilleszthetnk a rendszerhez, de az idkereteket nem bvthetjk, napjaink adatbzisaiban elssorban a feldolgozsi id optimalizlsra treksznk. A fejezet tovbbi rszben ismertetjk az adatok trolsra szolgl lemezek legfontosabb jellemzit. Trgyaljuk, hogyan tudjuk cmezni a trol klnbz helyeit, bemutatjuk a klnbz adatszervezsi s elrsi mdokat, ezek optimalizlst, s pldkkal illusztrljuk alkalmazsukat. 2.1. Adattrolk 2.1.1. Trolsi szempontok Az adatbzis ppen feldolgozs alatt lv rekordjai mindig a kzponti memriban vannak. Ugyancsak itt van a legutbbi idben hasznlt adatok zme, s clszer ide behozni a kls trolbl a hamarosan feldolgozand adatokat. Ezek mind ideiglenesen troldnak az adatbzis-kezel rendszer pufferben. Itt minl tbb olyan adatot kell benntartani, melyek feldolgozsra fognak kerlni, mert innen brmelyik rekordot 10-7 - 10-9 msodpercen bell el tudunk rni, mg kls trolnl ez mg kedvez esetben is 10-3 msodpercet vesz ignybe. Az eltrs 4 - 6 nagysgrend! Ezrt az adatbzis mkdsi sebessgt nagymrtkben felgyorsthatjuk, ha elre tudunk ltni. A feldolgozsra kerl rekordokat, mg mieltt tnylegesen dolgoznnk velk, behozzuk a pufferba, vagy ha feldolgoztuk, de mg jra szksg lehet rjuk, akkor tovbbra is benntartjuk ket. A kzponti memria nagysga azonban korltozott. Ezrt az adatbzis adatainak zmt a kls trolkon tartjuk. Fizikai felptsk alapjn megklnbztetnk mgnesszalagos, mgneskazetts, mgneslemezes, optikai lemezes (CD/DVD), az elrsi lehetsgek szerint soros, kzvetlen s soros, mg felhasznlsi jellegk szerint brmikor hasznlhat adatok (on-line), az adatbzis helyrelltsra szolgl biztonsgi mentsek, archivlt adatok trolsra szolgl adathordozkat. A mgnesszalagokon s -kazettkon trolt adatokat csak sorosan, felrsuk sorrendjben tudjuk feldolgozni. Ezrt ezeket viszonylagos olcssguk miatt ma mr csak biztonsgi mentsek s archivlt adatok trolsra hasznljuk. A rendszeres feldolgozshoz szksges adatok lland trolsi helye mindig lemez, ahonnan egy rszk a feldolgozs folyamn ideiglenesen bekerl a kzponti memriba is. Br egyes adatbzis-kezel rendszerek minden tmutats nlkl is ltrehozzk a koncepcionlis modell alapjn a trolsi struktrt, az adatbzis fizikai szintjt, ez a gyakorlatban a legtbbszr nem fog elg hatkonyan mkdni. Az adathordozk s az adatszerkezet kivlasztsnl figyelembe kell vennnk, hogy mekkora adatmennyisget kell trolnunk, mennyibe kerlhet az adatok trolsa, milyen informcikra van leggyakrabban szksge a felhasznlknak,

2-2

milyen szempontok alapjn kell az adatokat kivlasztani, az adatokat vagy azok bizonyos rszeit milyen gyakran kell egy megadott sorrendben elrni, ha az adatokat vletlenszeren, elre nem definilhat sorrendben kell feldolgozni, akkor tlagosan hny rekordot kell megtallni egy lpsben, az adatokat csak olvasni kell, vagy meg kell a tartalmukat is vltoztatni, nvekedhet-e mdostskor a mr bennlev rekord hossza, hny j adatot kell hozzadni, rgit trlni, s ez milyen gyakorisggal trtnik, vannak-e olyan adatok, amelyeket nagyon gyakran, illetve olyanok, amelyeket csak nagyon ritkn hasznlnak. E szempontok figyelembevtelvel az adatbzis-felgyel dnti el, hogy milyen logikai s fizikai adatszerkezetet hoz ltre. Ennek eredmnyekppen szszer kompromisszumot alakt ki a trol igny, a visszakeressi s a vltoztatsi idk, valamint az adatbzis rugalmas a vltoz kvetelmnyekhez illeszked hasznlata s tovbbfejlesztsi lehetsgei kztt. Olyan egysges adatszerkezet, amelyik minden alkalmazshoz mindig optimlis elrst biztost, a gyakorlatban nem ltezik. Ebbl kvetkezik, hogy az adatbzis klnbz rszein ms s ms adatszerkezetet valstunk meg, s ezt, ha az alkalmazs mdja vltozik, akkor szksg szerint mdostjuk is. 2.1.2. Lemeztrolk A mai lemeztrolk vagy mgnesessgen alapul mgneslemezek, vagy a fnyvisszaverdst felhasznl optikai lemezek. Az adatbzis-kezel rendszer szempontjbl azonban teljesen kzmbs, hogy az adatokat reprezentl bitsorozatokat a lemezen mgnesezssel vagy lzerrel lltjuk el s olvassuk ki. Ugyancsak azonos felhasznli szempontbl a ktfle lemezen trolhat adatok szerkezete is. Ezrt a tovbbiakban egynteten lemezrl fogunk beszlni. A lemezeknek csak azokat a tulajdonsgait, jellemzit fogjuk ismertetni, melyek az adatbzisok hatkony mkdsnek megrtshez szksgesek. Ebbl a szempontbl tekintve a kvetkezkben elmondottak minden lemeztpusra rvnyesek. 2.1.2.1. A lemez felptse A lemez tbb egymssal prhuzamos felletbl ll, melyek mindegyikhez ltalban egy r-olvas fej tartozik. (Egyes esetekben csak egy fellet van.) Az sszes lemezfellet azonos sebessggel forog egy kzs tengely krl. Az adatok a felleteken egyms fltti koncentrikus krkben (optikai lemezen csigavonalban) helyezkednek el.. Ezeket a krket svnak (track) nevezzk. Egy krlforduls alatt egy felletrl egy sv adatait olvashatjuk be, egy svot rhatunk ki. A svokat a forgstengelytl val tvolsguk alapjn sorszmozzuk. A fej berskor/kiolvasskor minden felleten ugyanazon sorszm sv fltt helyezkedik el. A fej egy adott pozcijbl elrhet svok sszessgt nevezzk cilindernek. A svokon bell az adatbzis-kezel rendszer szempontjbl az adatok lapokba vannak csoportostva. Az r/olvas mveletek mindig egy lapra vonatkoznak. Ez a legkisebb fizikai egysg, amit a lemez s a kzponti trol kztt mozgatni tudunk. Egy adatbzis rekord helyt, trolsi cmt meghatrozza a lemezegysg szma, ezen bell melyik felleten van, melyik svon van, a sv hnyadik lapjn tallhat, a lapon bell hnyadik bjton kezddik.

2-3

Az adatbzis-kezel rendszer trolskor minden rekordhoz hozzrendel egy bels rekordazonostt (ROWID, ld. 5.4.4. pont). Ez rendszerint egy relatv cm. Azt adja meg, hogy a lemezen a rekord az adatok trolsi helynek kezdettl szmtva hnyadik lapon tallhat. Mivel a felletek s a svok szma, valamint a svok s a lapok kapacitsa egy lemezen lland, ebbl a lap helye kiszmthat. A lapon belli cmet a lap elejn lv lapcm tblzat tartalmazza. Ezt a cmzsi mdot mutatjuk be a 2.2. brn. A bels rekordazonost megadja a lap cmt (L: lemezegysg, cilinder, sv, lap), s a lapon belli cmtblzatban annak az elemnek a helyt (C), amelyik a rekordnak a lapon belli helyre utal (R). Ha a rekord fizikai trolsi helye brmilyen okbl (pl. az adatok jraszervezse miatt) megvltozik, akkor a bels azonost rtke is mdosul. Ezrt az adatbzis felhasznlja szmra ez semmifle azonostsi jelleggel, semmilyen jelentsggel nem br, norml krlmnyek kztt nem is fogja ltni.

2.2. bra:

Fizikai szint cmzs lemezen

A napjainkban leggyakrabban hasznlt mgneslemezek legfontosabb technikai jellemzinek nagysgrendjt a 2.1. tblzatban foglaltuk ssze. (Ebben a szemlyi szmtgpekben mg most is hasznlatos floppy diszkeket s a CD lemezeket nem vettk figyelembe.) Mg korbban a tnyleges trkapacits nvelse rdekben igen elterjedtek voltak a cserlhet mgneslemezek, ma a nagy rendszerekben lland, nem cserlhet lemezeket hasznlnak. Igaz, hogy ez a megolds drgbb s az sszkapacits vges (szemben a cserlhet lemezek gyakorlatilag tetszsszerintire megnvelhet kapacitsval), de a szksges adatok brmikor azonnal, maximum nhny tized msodpercen bell elrhetek. A nagyfok mechanikus ignybevtelt jelent csere kikszblsvel a lemezek lettartama megnvekszik, a meghibsodsi gyakorisg lecskken. Tovbbi elny mg, hogy jval

2-4

pontosabb rsi/olvassi mechanikt lehet alkalmazni. gy hasznlhatunk, ugyanarra a felletre tbb adatot tudunk felvinni.

nagyobb

rssrsget

2.1. tblzat: Mgneslemezek legfontosabb technikai jellemzinek nagysgrendje. Felletek szma 20 Cilinderek szma 200 - 400 Svok kapacitsa 40 - 100 KB Lapmret 1 - 32 KB Teljes trol kapacits 100 MB - 500 GB 2.1.2.2. Hozzfrsi id Leghamarabb akkor frnk hozz egy rekordhoz, ha az mr bent van az adatbziskezel rendszer pufferben. Ezrt a rendszer nyilvntartja a pufferben lv lapokat. Minden lemezen val keress eltt megvizsglja, bent van-e a krt rekordot tartalmaz lap a pufferben, s ha igen, akkor a lemezen val keressre nincsen szksg.1 Ezek csak kzponti troln belli mveletek, gy 10-6 - 10-8 msodperc alatt lezajlik a keress. Sajnos azonban mg a legjobb adatszervezsi eljrsokkal is csak ritkn vagyunk ilyen szerencssek. Legtbbszr a lemezrl kell behoznunk, vagy oda kell kirnunk az adatokat, ami 4 - 6 nagysgrenddel hosszabb ideig tart. Az ehhez szksges idt a tovbbiakban hozzfrsi idnek fogjuk nevezni. A hozzfrsi id t tnyezbl tevdik ssze. Ezek: az adatokat tartalmaz lemezegysg kivlasztsa, a lemez fellet kivlasztsa, a megfelel cilinderre val pozicionls, a rekordot tartalmaz lapnak az r/olvas fej al val forgsa, a lap tvitele a lemez s a kzponti egysg kztt. Ezek kzl az els kett elektronikus tkapcsolssal valsul meg. Ezrt ezek az idk elhanyagolhatak. A harmadik s a negyedik sszetev ha a fej nem ll ppen a megfelel helyen mindenkppen fizikai mozgssal jr. Ezrt a pozicionlsi idt s a forgsi ksleltetst a hozzfrsi id becslsnl mindenkppen tekintetbe kell vennnk. Az utols komponens, az adattvitel ideje legtbbszr milliszekundum alatt van. gy, legtbbszr ezt sem kell figyelembe vennnk, mint azt ltni fogjuk. Lemezre val rs illetve olvass eltt az r/olvas fejet az elrend adatokat tartalmaz cilinderre kell pozcionlni. Ennek ideje attl fgg, hogy melyik cilinderen dolgoztunk utoljra, s melyiken fogunk ezutn dolgozni. Ha az adatszerkezet jl illeszkedik a feldolgozshoz, akkor nem kell ms cilinderre tllnunk. Ez azonban nem mindig valsul meg. Ilyenkor a pozicionlsi id egy lland felgyorsulsi s lelassulsi idbl ll, melyhez hozzaddik mg a rgi s az j cilinder tvolsgval arnyos elmozdulsi id. Kimutathat, hogy ha vletlenszeren vltunk a cilinderek kztt, akkor az tlagos tvolsg a cilinderek maximlis tvolsgnak egy harmada lesz. A kereskedelmi forgalomban lv fix lemezeken az tlagos pozicionlsi id 4 10 milliszekundum krl van.
1

Annak rdekben, hogy nagyobb valsznsggel legyen bent egy keresett rekord a pufferben, az adatbzisban kiadott rsi utasts csak a pufferben vltoztatja meg a rekordot. A tnyleges fizikai kirs csak akkor kvetkezik be, amikor a puffer betelt, s a kvetkez feldolgozand lapot csak egy bent lv lap helyre hozhatjuk be. Ilyenkor sem az sszes lapot rjuk ki, hanem fellrunk egy vltozatlanul maradt lapot (hisz ezt nem kell kirni a lemezre, ott is ugyanez a pldny van belle), vagy ha nincs ilyen, akkor pldul csak a legrgebben hasznlta(ka)t rjuk ki.

2-5

A keresett rekord az optimlis esetben ppen az r/olvas fej alatt van. Ilyenkor a forgsi ksleltets zrus. Ha az adatszerkezet jl illeszkedik a feldolgozshoz, akkor a kvetkez feldolgozand rekord az lesz, amelyik ezutn kerl az r/olvas fej al. A legrosszabb esetben egy teljes krl fordulst kell vrnunk, amg a rekord a fej al kerl. Kimutathat, hogy az tlagos forgsi ksleltets egy fl krlforduls idejvel egyenl. Ez a legtbb fix lemeznl 2 8 milliszekundum kz esik. A lemez s a kzponti egysg kzti adattvitel sebessge 1 - 15 Mbjt/sec krl van. Ezrt egy nhny kilobjtos lap tvitele ltalban 1 milliszekundum alatt van. A mai ltalnosan hasznlt lemezek hozzfrsi idejnek jellemz sszetevit milliszekundumokban a 2.2. tblzatban foglaltuk ssze. 2.2. tblzat: ltalnosan hasznlt lemezek hozzfrsi idejnek jellemz sszetevi milliszekundumokban. Pozicionlsi id 4 - 10 Forgsi ksleltets 2-8 Adattviteli id 0,1 - 1 tlagos elrsi id 6 - 20

Az elmondottakbl nyilvnval, hogy ha egy feldolgozsi lpsben egyszerre tbb rekordhoz akarunk hozzfrni (pl. az Adatbzis tantrgyat felvev sszes hallgat vizsgaeredmnybl akarunk tlagot szmolni), akkor ezeket a rekordokat clszer gy trolni, hogy ugyanazon a cilinderen egyms utn helyezkedjenek el. Hasonlan, mint ha az j Magyar Lexikon mind a 19 ktett idnknt hasznlni akarjuk, akkor ezeket mind egy polcra, egyms mell rakjuk, s nem a betcikkek vagy a ktetszerkesztk neve szerint rendezett knyvek ABC sorrendjbe. Az adatbzisoknl azonban annyival bonyolultabb a problma, hogy ott ez az elrendezs elnytelen lehet ms feladatok (pldul tancsoportok szerinti tlagok) kiszmolsnl. Ezekrl a krdsekrl a 2.5.1.pontban, a srsds trgyalsnl beszlnk majd rszletesen. Ha igen sok fizikailag vagy logikailag egyms utn kvetkez rekordot akarunk rendszeresen feldolgozni, akkor ezt jelentsen felgyorsthatjuk a RAID technika (Redundant Array of Inexpensive Disks) alkalmazsval. Ennek egy gyakori alkalmazst a 2.3. bra segtsgvel magyarzzuk meg.

2.3. bra:

Soros/szekvencilis feldolgozs felgyorstsa RAID technika alkalmazsval.

A rendszeresen egyms utn feldolgozand adatokat tbb lemezre osztjuk szt (az brn hromra), melyeknek forgsa szinkronizlva van. Az els lemezre kerl az els, negyedik, hetedik, rekord, a msodikra ugyanarra a felletre s svra a msodik, tdik, hetedik, , a harmadik lemezre pedig a harmadik, hatodik s a kilencedik rekord. Az egyszersg kedvrt ttelezzk fel, hogy egy svon 3 rekordot tudunk trolni. Ebben az esetben, ha az sszes rekordot egy lemezen trolnnk, akkor a 9 rekordot egyms utn 3 krlforduls alatt tudnnk beolvasni, illetve kirni. Ha a rekordokat a fenti mdon sztosztjuk a hrom szinkronizltan mkd lemezegysg kztt, melyekre/melyekrl prhuzamosan 2-6

tudunk rni/olvasni, a 9 rekordot egy krlforduls alatt fel tudjuk dolgozni. N darab lemez alkalmazsval a forgs miatti vrakozsi idt N-ed rszre cskkenthetjk. Belthatjuk, hogy ugyanez igaz egyes rekordok hozzfrsi idejre is. 2.2. Adatszervezsi s adatelrsi mdok Az adatbzis-kezel rendszerek az adatokat a kls trolkon lapokon troljk. A lapok mrete rgztett, 1 - 32 KBjt kztt van. Az adattvitel a kls trol s a bels memria puffere(i) kztt mindig laponknt trtnik. Logikai szinten az adatbzis-kezel rendszerek rekordokkal dolgoznak, rekordokat olvasnak be, rnak ki, mdostanak, vagy trlnek. A rekordok logikailag sszetartoz elemi adatokbl, mezkbl llnak. Rekordokat alkothatnak pldul egy szemlyi nyilvntartsban az egyes szemlyek adatai, melyekhez tbbek kztt a kvetkez tulajdonsgok, mezk tartoznak: nv, lakhely, beoszts, szletsi v, vagy egy raktrnyilvntartsban a trolt ruk jellemzi. Amikor az adatbzisban dolgozunk, akkor mindig a klnbz rekordok konkrt elfordulsaival, pl. a Kovcs Jnos, Budapest Lajos utca 49, informatikus, 1980 rtkekkel dolgozunk. A mez az adatbzis legkisebb eleme, amelyiknek tartalmra nv szerint lehet hivatkozni. A mez tartalma az adott rekordban az adott tulajdonsg aktulis rtke. Ez lehet lland, de meg is vltozhat a feldolgozs kvetkeztben. A rekord mezi kzl legalbb egynek kitntetett szerepe van.1 Ennek rtke alapjn tudjuk az adott rekordtpuson bell egyrtelmen azonostani az egyes rekordokat. Ezt a mezt/mez kombincit nevezik elsdleges kulcsnak (Primary Key). Ezenkvl lteznek ms felhasznlst biztost kulcsmezk is, melyek esetenknt megegyezhetnek az elsdleges kulccsal. Az elhelyezsi kulcs hatrozza meg a rekord fizikai helyt az adatbzisban, mg a klnbz keressi kulcsok szerint adott tulajdonsgokkal rendelkez rekordokat vlaszthatunk ki az adatbzisbl. A mindennapi szhasznlatban a kulcsok kztt ezt a megklnbztetst ltalban elhagyjuk. Egyszeren kulcsokrl beszlnk s ezen rendszerint keressi kulcsot rtnk, s csak ha ms rtelemben hasznljuk, akkor jelezzk ezt. A klnbz kulcsok kzti klnbsgre plda egy gpjrm nyilvntartsi llomny, melyben a gpjrmveket rendszmuk alapjn azonostjuk egyrtelmen (elsdleges kulcs), az zembe helyezsi idpont szerinti sorrendben helyezzk el ket a troln (elhelyezsi kulcs) s rendszm, zembe helyezs idpontja s helye, tulajdonos, gyrtmny s modell alapjn keressk ket (keressi kulcsok). Az adatszervezsi md meghatrozza, hogyan helyezzk el fizikailag az adatokat, s hogy milyen kiegszt struktrkat ptnk rjuk, ami klnbz hozzfrsi mdokat tesz lehetv. Ugyanazon az adatllomnyon, rekord tpuson tbbfle szervezsi mdot is megvalsthatunk. Az elrsi md mutatja meg azt, hogy valamilyen konkrt esetben hogyan frnk hozz az adatokhoz. Ez az llomnyon megvalstott szervezsi mdok egyike lehet csak. Az adatbzisban az adatok, a rekordok szervezsi s elrsi mdja lehet lineris, ezen bell soros, szekvencilis, kzvetlen, ezen bell indexelt, hashing, hierarchikus,
Bizonyos esetekben ez nem egy mez, hanem tbb meznek a kombincija, mint pldul az 1.2.2.1. pontban bevezetett MITHALLGAT rekordnl a ki hallgatja s a mit hallgat mezk, melyek csak egytt hatrozzk meg pldul az osztlyzat rtkt.
1

2-7

particionlt. Ezek kzl a legfontosabbakat a tovbbiakban rszletesen ismertetjk, majd sszehasonltjuk, hogy mikor melyiket clszer hasznlni. Hangslyozni kvnjuk, hogy a j adatbzis-kezel rendszer az adatokat az optimlis mdon fogja elrni. De az elrsi utat csak azok kzl tudja kivlasztani, amelyeket az adatszervezsi md lehetv tesz. Hogy milyen adatszervezsi mdok valsulnak meg, azt az adatbzis-felgyel hatrozza meg. 2.3. Lineris trolsi struktrk Lineris adatszervezsnl az adatokhoz kizrlag egyms utn frhetnk hozz. Brmelyik rekord utn csak a sorban kzvetlenl utna kvetkezt kaphatjuk meg. Ez a sorrend megegyezhet a fizikai trolsi sorrenddel. Ekkor fizikai soros, rviden soros szervezsrl s elrsrl beszlnk. Amennyiben a sorrend egy logikai egymsutnisgot jelent (pl. ABC sorrend, szmoknl nagysg szerinti egymsutnisg) akkor logikai soros, ms nven szekvencilis szervezsrl s elrsrl beszlnk. 2.3.1. Soros szervezs s elrs A fizikailag soros trolsnl, szervezsi mdnl az adatok, a rekordok helye s keressi kulcsa kztt semmilyen sszefggs nem ll fenn. A soros elrsnl az adatokat fizikai elhelyezsk alapjn, sorban egyms utn dolgozzuk fel. Ez a szervezs s elrsi md magbl a trolsbl kvetkezen nyilvnvalan minden adatllomnyon automatikusan megvalsul. A soros szervezs adatllomnyok ltrehozsa, karbantartsa egyszer. Az j adatot az llomny vghez kell hozzrnunk. Miutn a klnbz elemek kztt nincsen logikai kapcsolat, brmelyiket mdosthatjuk, trlhetjk, mivel ez az adatszerkezetet nem befolysolja. Kivtel, ha a mdosts megnveli a rekord hosszt. Ilyenkor, ha szigoran ragaszkodunk a soros szervezshez, akkor trljk a mdostand rekordot, s j rekordknt berjuk a mdostottat. A trlt rekordok helyn kialakult lyukakat az adatok idnknti jraszervezsvel szntetjk meg. Ez azt jelenti, hogy az adatokat kimentjk, majd a lyukak kihagysval folytonosan elhelyezve visszatltjk az eredeti trol helyre. Sok adat beolvassakor ez az elrs igen gyors, hiszen a lemezen val vrakozsi id minimlis. Ugyanakkor viszont egy adott tulajdonsggal, meghatrozott kulcsrtkkel rendelkez rekord megtallsra ez a megolds igen rossz hatkonysg. Kedveztlen esetben akr az egsz llomnyt vgig kell olvasnunk. Egy egyedi kulcsrtkkel rendelkez rekord megtallshoz tlagosan a trol helyek felt vgig kell vizsglnunk. Ha tbb rekord is rendelkezhet a keresett rtkkel s mindegyiket meg kell tallnunk, vagy annak megllaptsra, hogy az adott kulcs rekord nincs bent az llomnyban, mindig vgig kell olvasnunk az llomny trolsra szolgl egsz terletet. 2.3.2. Szekvencilis szervezs s elrs Szekvencilis szervezsnl az egymst kvet rekordok keressi kulcsa kztt egyrtelm logikai kapcsolat van. Nvekv sorrendnl mindegyik rekord kulcsa nagyobb (vagy egyenl, ha dupliktumok is lehetnek) a kzvetlenl eltte lv rekord kulcsnl, cskken sorrendnl kisebb, vagy egyenl. Szekvencilis elrsnl brmely rekord utn csak a kzvetlenl utna kvetkezt tudjuk elrni (egyes szerkezetekben mg a kzvetlenl eltte lvt is). Szekvencilis elrst ugyanazokon az adatokon tbbfle szempont szerint is ltrehozhatunk. Ez teszi lehetv, hogy az idignyes rendezs (ld. 2.9. alfejezet) nlkl is

2-8

sorba fel tudjuk dolgozni a rekordokat ms s ms kulcs szerint. (Pl. egyszer nvsor, mskor szletsi idpont, harmadszor fizets alapjn rendezve.) Ahhoz, hogy egy szekvencilis llomnyt ltrehozzunk, a betltend adatokat a keressi kulcs szerint rendezni kell, s ezt a rendezett llomnyt visszk be az adatbzisba. A legtbbszr azonban mr egy meglv adatllomnyon kell a szekvencilis szerkezetet ltrehozni, vagy meglv szerkezetbe kell j rekordokat beilleszteni. Ezt a listaszerkezet segtsgvel valstjuk meg. A listaszerkezetben a fizikai s a logikai sorrend kztt semmifle kapcsolat sem kell 1 legyen. A szekvencilis sorrendben ll, a logikailag egyms utn kvetkez rekordokat pointerek kapcsoljk ssze. Minden adatrekord kt rszbl tevdik ssze: a tnyleges adatmezkbl ll adatrszbl s a pointer mezbl, mely a hozz logikailag kzvetlenl kapcsold rekord(ok) cmt tartalmazza. Ezt az adatbzis-kezel rendszer kezeli, a felhasznl szmra rejtve van. A 2.4. brn egy egyszer listaszerkezetet lthatunk. Minden egyes elem (rekord) bal szls mezje annak a tulajdonsgnak az rtkt (kulcsot) mutatja, melynek alapjn ltrehoztuk a szekvencilis szerkezetet. A bevonalkzott terleten a rekord tovbbi, a lista szerkezet szempontjbl kzmbs adatai vannak. A jobboldali mez a pointert, a logikailag kvetkez mez cmt tartalmazza.2

2.4. bra:

Szekvencilis szervezs megvalstsa listaszerkezet segtsgvel.

Termszetesen ahhoz, hogy egy listt feldolgozhassunk, meg kell tallnunk a lista els elemt. Erre a clra egy rgztett helyen, ltalban a lista legelejn, mg az adatok eltt elhelyezked kezdindex tblban elhelyezked specilis pointer szolgl, mely mindig a lista legels elemre mutat. Ahhoz viszont, hogy j elemeket gyorsan beilleszthessnk a mr meglvk kz, tudnunk kell anlkl, hogy elkezdennk keresglni a trolban , hol tallunk szabad helyet, ahov ezt elhelyezhetjk. Ezt a gyakorlatban ktfle mdon valstjuk meg. Ltrehozunk egy msik listt, az res helyek listjt. Ebben vannak sszelncolva a szekvencilisan szervezett llomny pillanatnyilag resen ll trol helyei. A lista els elemnek cmt szintn a kezdindex-tblban helyezzk el.
Az elrsi id minimalizlsa rdekben azonban clszer, ha az adatok fizikai elhelyezsnek a sorrendje megegyezik, vagy legalbb is nem tl sok a sorbl kilg rekord kivtelvel majdnem megegyezik a logikai sorrenddel, mint azt majd a 2.5.2. pontban trgyaljuk 2 Az brkon az egyszersg kedvrt abszolt cmeket adtunk meg. A valsgban relatv vagy szimbolikus cmeket hasznlnak, melybl az adatbzis-kezel rendszer szmtja ki az abszolt cmet. A lista utols elemt a pointermezben egy specilis jel (az brkon *) jelzi.
1

2-9

Az adatokat az llomny elejtl folytonosan tltjk fel. A kezdindex tblzatban az els res hely az utols adatrekord utni cmre mutat. Az j rekordot ide helyezzk el, s a kezdcmet egy hellyel tovbb toljuk. Ez a mdszer egyszerbb s gyorsabb, mint az elz, de htrnya, hogy ha a meglv rekordokbl trlnk, akkor azok helyt nem tudjuk jra felhasznlni. Az llomnyban lyukak jnnek ltre, ami sok mdosts utn rossz helykihasznlst eredmnyez. Ilyenkor a lyukak eltntetsre az llomnyt jra kell szervezni. A listaszerkezet mdostst, j elem beillesztst, meglv trlst a 2.5. brn mutatjuk be.1

2.5. bra:

Listaszerkezet mdostsa. A szaggatott vonal a mdosts eltti, a pontozott-szaggatott a mdosts utni llapotot jelzi. a.) j elem beillesztse. b.) Meglv trlse.

Ha j elemet kvnunk beilleszteni a listba, akkor ez fizikailag az res helyek listjnak els helyre kerl, s abbl a korbbi msodik hely cme kerl a kezdcm helybe. Az j elem logikai helyt a listn val vgighaladssal llaptjuk meg a kulcsa alapjn. Miutn ezt meghatroztuk, a logikailag kzvetlenl utna lv rekord pointere kerl az j elemnek, az j elem cme pedig a logikailag eltte lvnek a pointermezjbe. Hasonlan, meglv elem trlsekor a trlt rekord lesz az res lista els eleme, pointermezjbe kerl a korbbi els elemnek a cme, s a trlt elem pointere kerl a logikailag eltte lv rekord pointermezjbe. A gyakorlatban a pointermez nem csak egy pointert tartalmaz. Ugyanarra a kulcsra elhelyezhetnk logikailag elre s visszafel mutat pointert is. Ezltal a listn nvekv s cskken sorrendben is vgighaladhatunk.2 Ezenkvl pointer-lncot definilhatunk ms
Bennlv rekord mdostsa, ha az nem a kulcsra vonatkozik nem rinti a listaszerkezetet. A kulcs mdostsa a rekord trlst s a mdostott kulcsrtkkel egy j rekord beillesztst jelenti. 2 A kt-irny pointerlncnak trlsnl is jelentsge van. Ha a trlt rekordot nem a listn keresztl rtk el, akkor a visszamutat pointer segtsgvel tudjuk megllaptani, hov kell thelyezni az elremutat pointert.
1

2-10

kulcsok alapjn val szekvencilis elrsre is. gy pldul egy szemlyi nyilvntartsban a szemlyek rekordjaihoz hozzkapcsolhatunk a nv szerinti ABC sorrendben, a szemlyi szm szerinti s a szletsi idpont szerinti sorrendben val feldolgozst biztost pointereket. Ezek mindegyike a tbbiektl fggetlenl hasznlhat. 2.4. Kzvetlen elrs Gyakran elfordul, hogy a rekordok kzl csak az(oka)t akarjuk kivlasztani, amely(ek)ben egy mez vagy mezkombinci meghatrozott rtkkel rendelkezik. Csak azt a hallgatt keressk, akinek az azonostja 04711, vagy csak azokat, akik a 4. vfolyamra jrnak, vagy akik 1986-ban szlettek. Ha a kivlasztsi felttelnek a rekordoknak csak egy kis rsze felel meg, akkor mg a viszonylag gyors, a fizikai sorrendnek megfelel soros keressnek is igen rossz a hatsfoka. Ilyen feladatok hatkony megoldsra hozunk ltre az adatokon, az adatbzis egyes tblzataiban valamilyen gyors, kzvetlen elrst lehetv tev adatszerkezetet. Kzvetlen elrsnl a keresett adatokhoz azonnal, gyakorlatilag 1 4 lpssel hozz tudunk frni. A korszer adatbzisokban a kzvetlen elrst indexek segtsgvel, vagy hashing algoritmussal valstjk meg. 2.4.1. Indexels Indexek segtsgvel igen gyorsan tudunk elrni adott feltteleknek megfelel rekordokat. 2.4.1.1. Index tblzat Tekintsk a klasszikus adatbzis pldt. Vannak szlltink, ruink s megrendelseink. Az egyes rekordtpusokat egy-egy tblzatban jelentjk meg. Ez megfelel a 4. fejezetben ismertetend relcis modell trolsi szerkezetnek is. Fordtsuk most figyelmnket a MEGRENDELS tpus rekordokra, mely tartalmt tekintve a kvetkez mezkbl ll: SZLLITKD. Ez egyrtelmen azonostja az adott megrendelst teljest szlltt. A szllt tovbbi adatai az ugyanezzel a kdrtkkel rendelkez SZLLIT rekordban vannak. RUKD. Ez egyrtelmen azonostja az adott megrendelsben szerepl rut. Az ru tovbbi adatai az ugyanezzel a kdrtkkel rendelkez RU rekordban vannak. DTUM1. A megrendels dtuma. DTUM2. A szllts dtuma. MENNYISG. A megrendelt s leszlltott mennyisg, az rura jellemz (az RUKD-hoz tartoz ru rekordban trolt) mrtkegysgben.1 Az adatbzisbl rendszeresen vlaszt kell adnunk a megrendelsekkel kapcsolatos kvetkez krdsekre: 1. Egy adott (kd) szllttl milyen megrendelseink vannak? 2. 3. Egy adott (kd) rubl milyen megrendelseink vannak? Egy adott napon milyen megrendelseket adtunk fel?

Az egyszersg kedvrt feltteleztk, hogy a megrendelt mennyisget mindig egyben szlltjk le.

2-11

4.

Egy adott intervallumban milyen megrendelseket szlltottak le?

Termszetesen minden krdsre tudunk vlaszolni, ha vgigolvassuk az sszes MEGRENDELS rekordot, s kivlasztjuk kzlk a felttelnek megfelelket. Ez azonban mr nhny ezer rekordnl is igen lass. Az els krds megvlaszolsra sokkal gyorsabban jutunk clhoz, ha ksztnk a megrendels rekordokhoz egy kt mezbl ll tblzatot. Ennek els mezje s egyben keressi kulcsa a SZLLITKD, msodik mezje pedig az ehhez a kdhoz tartoz MEGRENDELS rekord cmt tartalmazza. Ha egy szlltkdhoz tbb megrendels is tartozik, akkor ez a kd annyiszor szerepel a kiegszt tblzatban, ahnyszor a megrendelsekben, s mindegyik cmmez egy msik megrendelsre mutat r mint az a 2.6. brn lthat , vagy csak egyszer, s utna egyenknt felsoroljuk az ehhez az rtkhez tartoz rekordok cmeit.

2.6. bra:

MEGRENDELS rekordok indexelse SZLLITKD szerint.1

A SZLLITKD rtkt, s a hozztartoz MEGRENDELS rekord cmt tartalmaz tblzatot indextblzatnak nevezzk, s azt mondjuk, hogy a MEGRENDELS rekordtpus (tblzat) indexelve van a SZLLITKD szerint. Egy adott szllttl val megrendelseinket gy kaphatjuk meg, hogy kikeressk az indextblzatbl a megfelel SZLLITKD-ot, s az ott tallt cm(ek) alapjn egybl beolvassuk az ehhez tartoz rekordo(ka)t. Mivel az indextblzat maga is igen nagy lehet, az ebben val keress felgyorstsra egy fa szerkezetet ptnk fel a kulcsokra. Ezt a 2.4.1.2. pontban ismertetjk. Az indextblzat mrett lecskkenthetjk (s a tbb szempont alapjn val keresst egyszersthetjk), ha a rekordcmeket az indexelt rtkekkel egy bit-trkp segtsgvel kapcsoljuk ssze. Ezt a mdszert a 2.4.1.3. pontban mutatjuk be. A 2., 3. s 4. tpus krdsek hatkony megvlaszolshoz hasonl indextblzatokat ptnk fel a MEGRENDELS rekordoknak az RUKD, DTUM1 s DTUM2 mezire is. A fentieket ltalnostva azt mondhatjuk, hogy az indexelt adatok (rekordtpusok, tblzatok) hasznlathoz szksges trol terlet kt rszre oszthat: a tnyleges adatokat tartalmaz adatterletre, az indexeket s az indexekben val gyors keresst lehetv tev egyb szerkezeteket tartalmaz indexterletre. Az indextblzat segtsgvel, mint azt a kvetkez pontban ltni fogjuk, rendezs nlkl is vgigmehetnk szekvencilisan az indexelt rekordokon. Ezrt az indexeket csoportosthatjuk az albbi mdon is:
Valjban az adatbzisban a dtumot nem gy troljuk, de rtkt (pl.2006-01-03) megjelenthetjk az brn lthat mdon
1

2-12

Nvekv vagy cskken, attl fggen, hogy az indextbln milyen rendezettsgben tudunk kzvetlenl vgighaladni. Elemi vagy sszetett, attl fggen, hogy az indextblban lv indexrtkek egy mezbl, vagy tbb mez sszevonsbl, konkatencijbl (pl. vezetknv s keresztnv egytt) szrmaznak. Az eddigi pldinkban elemi indexeket lthattunk. sszetett indexre a 2.6. alfejezetben mutatunk be egy pldt. Egyedi vagy dupliklt, attl fggen, hogy az indexelt tblzatban minden indexrtk csak egyszer vagy tbbszr is elfordulhat. A rekordok azonostsra szolgl elsdleges kulcs mindig egyedi. Szelektv vagy nem szelektv, attl fggen, hogy az egyes indexelt rtkekhez kevs vagy sok rekord tartozik. Az egyedi indexek rtelemszeren mindig szelektvek. Indexek segtsgvel nemcsak adott rtkkel rendelkez rekordokat kereshetnk meg, hanem adott rtktartomnyba esket is. A 4. krdsre pldul gy vlaszolhatunk, hogy a szlltsi id (DTUM2) indextblzatban a kezd idponttl szekvencilisan vgighaladunk a vgs idpontig, s mindegyik rtkhez beolvassuk a hozztartoz megrendelst. Mint azt mr tbbszr hangslyoztuk, indexek felptse s helyes hasznlata rendkvl felgyorstja az adatbzisban a keresst. Ennek azonban termszetesen ra van. Nzzk meg, mivel fizetnk rte. Elszr is az indextblzatok helyet foglalnak el. Minl tbb mezre s mezkombincira ksztnk indexet, annl tbb trol helyet ignyelnek. klszablyknt azt mondhatjuk, hogy a gyakorlatban az adatbzis terletnek j kzeltssel a 2/3-t az adatok, 1/3-t pedig a kzvetlen elrst lehetv tev indexek foglaljk el. Az adatbzis helyignynek megbecslsekor ezt mindig figyelembe kell vennnk. A msik htrny berskor, trlskor s az indexelt mez rtknek mdostsakor jelentkezik. Ekkor ugyanis nemcsak a rekordon kell az adott mveletet elvgezni. Az sszes rintett indextblt is aktualizlni kell. Ha pldul a megrendelsekben (ld. 2.6. bra) minden szlltsi dtumot 060310-rl 06313-ra mdostunk, akkor az adatbzis-kezel rendszer feljegyzi a mdostott rekord(ok) cmt, megkeresi a DTUM2 indextblzatbl a 060310 rtkhez tartoz sorokat, trli az indextblzatbl ezeket a sorokat, berja az indextblzat megfelel helyre a 060313 kulcsrtket a megvltoztatott rekord(ok) cmvel egytt. Ezek a mveletek egy-egy mdosts idejt 3-5-szrsre is megnvelhetik. De ez mg mindig megri a rendszerint sokkal gyakrabban elvgzett keressnek a 10 -100 szoros lervidlse miatt. 2.4.1.2. Szelektv indexek, a B+ fa Egyedi s szelektv indexek esetn a keresett rekordokat a B+ fa elvn felptett indexek segtsgvel rjk el. Ez lehetv teszi a rekordok kzvetlen s szekvencilis elrst is akrhny klnbz keressi kulcs szerint. A B+ fa szerkezetnl az indexterlet kt rszre oszlik: Szekvencilis indexek. Ez az egyes rekordok kulcsait tartalmazza az indexelt mez szerinti szekvencilis sorrendben s az egyes kulcsrtkekhez tartoz rekordok cmeit. Szekvencilis elrsnl ezeken, illetve az innen kapott rekordcmeken haladunk vgig. A szekvencilis indexeket tartalmaz lapokat lncolt lista kapcsolja ssze. 2-13

Fa indexek. Ezek a gyors, kzvetlen hozzfrst teszik lehetv. Ez a szekvencilis indexekre felpl kiegyenslyozott, gykervel felfel fordtott faszerkezet, melynek kezdpontjtl (a fa gykertl) ugyanannyi lpsben rjk el brmelyik szekvencilis index-rekordot, a fa leveleit (ld. 5. feladatot). A B+ fa mkdst a 2.7. bra alapjn rthetjk meg. Az egyszersg kedvrt a rekordtpusnak csak egy mezjre vizsgljuk meg egyedi indexek nvekv sorrendben val felptst. Dupliklt indexek esetn vagy egyszer tntetjk fel az index rtkt, s utna ismtld elemknt annyi cmet sorolunk fel, vagy annyiszor ismteljk az indexrtk rekordcm prost, ahny rekord rendelkezik az adott indexrtkkel. Klnbz mezk alapjn val indexels esetn, minden indexelt mezre felptnk egy nll B+ ft.

2.7. bra:

B+ fa szerkezete

A fa legfels szintjnek (gykr) megfelel lapon n1 indexbejegyzs, indexrtk s pointer van. (A pldban kett, a 40 s a 75 indexrtkekkel. Az ezekhez tartoz pointert a nyllal jelezzk). A pointerek a fa kvetkez szintjn lv indexlapokra mutatnak, melyekben tovbbi cmek s pointerek mutatnak a megfordtott fa egyre mlyebb szintjnek lapjaira, mg vgl el nem rnk a szekvencilis indexeket tartalmaz lapokhoz. Az egyes faindex szinteken rendre n2,n3, , a szekvencilis indexlapokon pedig n bejegyzst helyezhetnk el. (ltalban n=n1=n2=n3a pldban az ttekinthetsg kedvrt n1=n2=2, n=3, de a gyakorlatban mindkett nagysgrendben 100 krl van). A faszerkezet bejegyzseiben a cm mindig a faszerkezet eggyel mlyebb szintjre mutat, az indexrtk pedig megadja az ezen a lapon tallhat legmagasabb indexrtket. A pldban a kzvetlenl a szekvencilis (i-ik) szint fltti i-1-ik fa szinten (az brn a msodik) kt lap van. Itt az els lapon kt indexbejegyzst tallunk. Ezekben a kulcs rtke 11 illetve 40, mert a kzvetlenl alatta lev els szekvencilis indexlapon a legnagyobb indexrtk 11, a msodikon 40. Hasonl mdon kerl az i-1-ik (msodik) szint msodik lapjra az 52 s a 75 indexrtk. Miutn az i-1-ik szinten is tbb lap van, az ebben val keressre felptjk efl az i-2-ik szintet (az brn ez mr a legfels, az els szint, amit gykrnek is neveznk). Az ebben lv indexrtkek rendre az alatta lev szint lapjainak legmagasabb indexrtkeire utalnak (40 az els, 75 a msodik lapra). Ha ebben megint csak tbb lapra frnnek el az index bejegyzsek, akkor erre egy jabb szintet ptennk fel, s ezt folytatnnk addig, amg el nem jutunk odig, hogy az sszes kzvetlenl a szint alatti indexlapokra mutat bejegyzs el nem fr egy lapra, a gykrre (root). Pldnkban a fa hrom 2-14

szintes. Ebben az esetben brmely rekordot 4 lpsben, kt fa-index szint + szekvencilis indexlap + rekord elrnk. ltalban a lpsek szma i+1, ahol i a fa szintjeinek a szma. A fa-szerkezet felptse mindig alulrl felfel trtnik. Elszr a szekvencilis index pl fel. Erre jnnek a fltte lv fa-szint lapjai, ha ebbl tbb van, akkor az efltti szint lapjai, s gy tovbb, amg csak el nem rjk az egy lapbl ll gykeret. Rekord(ok) megkeresst B+ fa index segtsgvel a 2.7. brn a kvetkez pldval mutatjuk be. Keressk az 51 kulcs rekordot. Ez az albbi mdon trtnik: 1. A legfels szint index-bejegyzseit megvizsglva 40 < 51 < 75. Ezrt a kvetkez lpsben a 75 indexrtkhez tartoz cmen tallhat indexlapot olvassuk be. 2. 3. Itt 51 < 52, a keresett kulcs rtke mr az els indexrtknl kisebb. Ezrt az 52es rtkhez tartoz cmen lv lapot olvassuk be. Ezzel eljutottunk a szekvencilis indexekhez. A kijellt indexlapot vgigolvasva megtalljuk az 51-es kulcs rekord cmt. Onnan behozzuk a rekordot. Amennyiben az 51-es kulcshoz nincs bejegyzs ezen a lapon, akkor az adott rekordtpusbl ilyen kulcs rekord nincsen az adatbzisban.

Nmileg bonyolultabb a helyzet, ha dupliktumok is lehetnek, s az azonos kulcsrtkkel rendelkez rekordok cmei csak tbb lapon frnek el. Ilyenkor az sszes olyan indexlapon vgig kell mennnk, mely a keresett kulcshoz tartoz cmet tartalmaz. A 2.7. brn lthat trolsi struktra nagyon ttekinthet, de ersen idealizlt. A gyakorlatban szinte sohasem tudunk egy ft ilyen szimmetrikusan felpteni s egyenletesen fellteni adatokkal. A pldnkban is azonnal bajba kerlnk, ha be akarjuk illeszteni a 17-es kulcs rekordot gy, hogy a fa-szerkezetet is megtartsuk. Termszetesen azrt egy ilyen feladat megoldsa nem okoz igazi gondot. A gyakorlatban egy j rekord beillesztse a kvetkez mdon trtnik: 1. Elhelyezzk a rekordot az adatterleten. Ha van srsd kulcs (ld. 2.5.1. pont), akkor lehetleg az azltal meghatrozott lapra. 2. Legtbbszr az index-terlet lapjai nincsenek teljesen tele. A fa-szerkezeten vgighaladva megkeressk, melyik szekvencilis indexlapra kerl az j kulcshoz tartoz bejegyzs. Ha ott van elegend res hely, akkor a cmvel egytt beszrjuk oda a kulcsok sorrendjnek megfelel helyre. Ezzel a B+ ft aktualizltuk. (Ha a beszrs a szekvencilis indexlap vgre kerl, akkor a felette lv szintet is aktualizlni kell.) Ha a megfelel szekvencilis indexlapon nincs mr res hely, akkor annak msodik felt trjuk egy res lapra. Az j lapot bektjk a szekvencilis lapokat sszekt lista-szerkezetbe. Elhelyezzk az j rekord indexbejegyzst a kulcsnak megfelel indexlapra, mivel ott most mr biztos van szmra elegend hely. Mdostjuk a faindex kzvetlenl fltte lv szintjt gy, hogy a megfelel lapon a kettosztott lapra mutat indexbejegyzsben a cmet mdostjuk a most beszrt j indexlap cmre, s betesznk egy j bejegyzst is, amelyik a kettosztott lap els felben maradt legmagasabb kulcs rekordra utal. Amennyiben a lapon volt erre helynk, akkor a B+ fa aktualizlst befejeztk. Ha a faindex megfelel lapjba nem tudtuk beilleszteni az j bejegyzst, akkor azt a 3. s 5. lpsekben lert mdon kettosztjuk s mdostjuk. Ezutn mdostjuk a 6. lpsben lertak szerint a faindexek fltte lv szintjt.

3. 4. 5. 6.

7.

2-15

8.

Ezt az eljrst folytatjuk egszen addig, amg valamelyik szinten res helyet nem tallunk. Ha mr a legfels szint is tele volt, s a beszrssal kett kellett osztani, akkor egy j szintet hozunk ltre. A fa szintjeinek szmt eggyel megnveljk.

A fentieket kvethetjk nyomon a 2.8. brn. A 2.7. brn lthat rekordokhoz illesztjk be a 17-es kulcs rekordot. Ez az adott elrendezsnl a B+ fa minden szintjnek trendezst s egy j szint kialaktst is ignyli. Ezutn viszont pldul a 16-os kulcs rekordot egyszeren, a fa-szerkezet vltozatlanul hagysval beilleszthetjk. A msodik szekvencilis indexlapra berjuk a 15 s a 17-es bejegyzsek kz a hozztartoz indexbejegyzst.

2.8. bra: j rekord beillesztse s a B+ fa aktualizlsa. Az j lapokat s kapcsolatokat vastagtva rajzoltuk be. sszefoglalva, a B+ fa elnyei a kvetkezk: Igen gyors, brmely rekordhoz ugyanannyi (maximum 4 -5) lpsbl ll elrst tesz lehetv. Ez a gyakorlatban sokszor csak egy vagy kt tnylegesen vgrehajtand lemez mveletre redukldik, mivel a fa-szerkezet fels szintjei folyamatos mkds kzben rendszerint bent vannak a rendszer pufferben. Ugyanazon rekordtpusban akrhny szempont szerint megvalsthat a keress. J az indexterlet hely kihasznlsa. Az indexlapok kitltttsge elvileg legalbb 50%, de a gyakorlatban 75% krl mozog. 2.4.1.3. Nem szelektv indexek, bit-trkpes index Nem szelektv indexeknl a B+ fnl jval hatkonyabb elrst biztostanak a bittrkpes (bitmap) indexek. Ilyenkor egy bit-trkpen alapul index 3 - 4-szer kevesebb helyet foglal el, mint egy B+ fa, s akr egy nagysgrenddel gyorsabb hozzfrst is lehetv tesz. Egyedli htrnya, hogy az indexelt rekordok prhuzamos vltoztatsakor az indexek aktualizlsa miatti vrakozsi idk lnyegesen hosszabbak lehetnek. A bit-trkpes index egy tblzat, melynek els oszlopa az indexelt mezk lehetsges rtkeit, fejlce az indexelt rekordok cmt (elsdleges kulcs, bels rekordazonost) tartalmazza. Ha az adott rekordban (a bit-trkp egy oszlopa) az indexelt mez rtke megegyezik a sort jellemz rtkkel, akkor ott a tblzat-elem rtke 1, klnben 0. Egy ilyen

2-16

bit trkpet lthatunk az 1.2.2.1. pontban ismertetett HALLGATO tblzat VFOLYAM mezjre felptve a 2.9. brn.

2.9. bra:

Index megvalstsa bit-trkp segtsgvel.

A negyedik sor harmadik oszlopban lv 1 azt jelenti, hogy a 3. oszlopot jelent 3303 azonostj rekordban az VFOLYAM mez rtke 4. Ha meg akarjuk kapni az sszes 2. ves hallgat rekordjt, akkor a bit-trkpbl a 2. vfolyamnak megfelel sorbl kivlasztjuk az 1 rtkekhez tartoz fejlc mez rtkt. (Az brn az els s a msodik oszlop, az 1112 s az 5212 azonostj rekordok). A bit-trkpben val gyors keress rdekben a trkpet magt is felpthetjk egy B+ fval indexelt llomnyknt. A keressi kulcs a bit-trkppel indexelt mez, az adatrekord pedig az ehhez az rtkhez tartoz sor. Ezt kiegszti a fix hosszsg elemekbl ll egy soros rekord-cm tblzat, amelynek n-edik eleme a bit-trkp n-edik oszlophoz tartoz rekordnak a cmt tartalmazza. Tovbbi elny mg, hogy a binris tblzatokon a mveletek igen gyorsan elvgezhetek, s maga a trkp viszonylag kicsi. Mg 1 milli indexelt rekord 100 klnbz indexrtke mellett is csak kb. 13 MBjtot foglal el. Ezrt rendszerint az egsz trkpet llandan benntarthatjuk a kzponti trban, ami mg gyorsabb teszi a feltteleknek megfelel rekordoknak az index alapjn val elrst. Bit-trkpes indexekkel a tbb kulcs alapjn val keress is igen egyszer, mivel egy indexelt mezre minden oszlopban (ha az sszes lehetsges rtket figyelembe vettk, akkor pontosan, klnben legfljebb) csak egy darab 1 llhat. A klnbz keressi mezk bittrkpeinek sorait egyms al rva VAGY kapcsolat esetn az egyes rtkeknek megfelel sorok oszlopainak logikai sszeadsval megkapjuk a felttelnek megfelel rekordokat jelent oszlopokat. S felttelnl matematikai sszeads utn azok az oszlopok felelnek meg, ahol az sszeg egyenl a felttelek szmval. Ezt lthatjuk a 2.10. brn. Az VFOLYAM = 2 VAGY SZLETSIV = 1998 felttelnek az 1112 s az 5212 rekordok, mg az VFOLYAM = 2 S SZLETSIV = 1998 felttelnek csak az 1112 rekord felel meg.

2-17

2.10. bra: Kt felttel sszekapcsolsa bit-trkp segtsgvel. Az VFOLYAM = 2 VAGY SZLETSIV = 1998 felttelnek az 1112 s az 5212 rekordok, mg az VFOLYAM = 2 S SZLETSIV = 1998 felttelnek csak az 1112 rekord felel meg. 2.4.1.4. Join-index Br az SQL nyelv kzvetlenl nem tmogatja, igen hasznos lehet, ha gyakran kell tbb nagy tblzatbl sszeszedni adatokat, akkor azok egyestsre (ld. 4.5.6. pont) egy nll join-indexet ltrehozni. Klnsen clszer ez akkor, ha az egyestsre szolgl oszlop(ok) egyik tblzatban sem elsleges kulcs(ok). A fentiek megrtsre vizsgljuk meg a 2.11. brn lthat pldt. Egy cgnek klnbz vrosokban vannak lerakatai s vevi. A szlltsi kltsgek minimalizlsa rdekben minden vevnek a sajt vrosban lev lerakatbl kvnnak szlltani. Hogy ezt hatkonyan tudjk meghatrozni az adatbzisbl, mind a vevk, mind a lerakatok rekordjaira felptettek egy indexet a vros mezre. A kt rekordtpust tartalmaz tblzatoknak a vros egyezse alapjn trtn sszekapcsolshoz azonban ennek minden vgrehajtshoz (join) ssze kell fslni a kt indexet. Ebbl tudjuk megllaptani, melyek azok a rekordcmek, amelyek mindkt tblzatban ugyanahhoz a vroshoz tartoznak.1 Ez nagy adatmennyisgnl viszonylag hosszabb idt is ignybe vehet. Ezrt, ha erre a mveletre rendszeresen szksgnk van, akkor ltrehozunk egy join-indexet. Ez az egyestsre szolgl oszlop (vros) mellett az egyestend egyedtpusok (lerakat, vev) egyrtelm azonostjt (vevkd, lerakatkd), vagy az adatbzis-bli bels rekordazonostjt (ld. 5.4.4. pont) is tartalmazza. A join-indexben val keress felgyorstsra ennek egyes sszetevire is felpthetnk indexet. gy ebbl brmelyik vevre kzvetlenl megtudhatjuk, honnan szlltsunk neki, illetve melyik lerakatbl kiknek clszer szlltani.
A joint ezen kvl msflekpen is vgrehajthatjuk. A konkrt adateloszlstl fgg, hogy egy adott esetben ez, vagy valamilyen ms algoritmus vezet gyorsabban eredmnyre.
1

2-18

Az olvasra bzzuk annak vgiggondolst, mi legyen, ha egy vrosban tbb lerakat is van, valamint hogyan kezeljk azokat a vevket, akik olyan vrosban laknak, ahol a cgnek nincsen lerakata.

2.11. bra: 2.4.2. Hashing

Join index a lerakatok s a szlltsi cmek vrosok alapjn trtn sszeprostsra

Az indexek alapjn val kzvetlen elrshez indextblzatokat kell ltrehozni, azokat karban kell tartani s az indexeken keresztli elrs is tbb lpst ignyel a gyakorlatban. Mindezeket megtakarthatjuk a hashing-mdszer segtsgvel, feltve, hogy csak egy kulcs alapjn akarunk kzvetlen elrst megvalstani.

2-19

A hashing lnyege, hogy egy jl kivlasztott algoritmus segtsgvel a keressi kulcs (ami ebben az esetben csaknem mindig az elsdleges kulcs) s a rekord trolsi cme kztt egy majdnem egyrtelm kapcsolatot hozunk ltre. Olyan lekpezst alkalmazunk a kulcsok s a cmek kztt, amely klnbz kulcsokhoz optimlisan mindig, gyakorlatilag csaknem mindig klnbz cmeket rendel hozz. A lekpezs ltal azonos cmhez rendelt, de klnbz kulcs elemeket szinonimknak nevezzk.1 Ezek elhelyezsrl kln kell gondoskodnunk. A szinonimk cmt leggyakrabban egy pointerrel, tbb szinonima esetn egy pointer-lnccal csatoljuk az eredetileg kijellt cmhez. A megfelel hash-algoritmus kivlasztsnl kt szempontot kell figyelembe vennnk. Az els az, hogy ne pazaroljunk el tl sok helyet. A lekpezsnek teht olyannak kell lenni, hogy a tnylegesen kiszmtott cmek kztt ne legyen tl sok hzag, kihasznlatlanul maradt cm. Ezrt pldul a numerikus elsdleges kulcsok nmagukban szinte sohasem alkalmasak cmknt val alkalmazsra is, hiszen pldul a 11 jegy magyar szemlyi szmmal nagyjbl 10 milli szemly rekordjt azonostjuk. Ha a szemlyi szm egyben a trolsi cmet is jelenten, akkor a rendelkezsre ll 1011 darab trol helynek csak 0,01 %-t hasznlnnk ki. A msik cl az, hogy minl kevesebb szinonim rekordunk legyen. Ha nincsenek szinonimk, akkor brmely rekordot egyetlen egy lpsben megkapunk, ami lnyegesen gyorsabb brmilyen index szerinti elrsnl. A ktfle cl egymsnak ellentmond, mindkett egyidejleg szinte sohasem rhet el. Az olyan lekpezs, amely srn adja a cmeket, sok szinonimt is generl. Amelyiknl kevs szinonimt kapunk, az ltalban rossz trol kihasznlst eredmnyez. A gyakorlatban szszer kompromisszumknt jnak tartjuk az olyan lekpezst, mely 80-85%-os kitltttsg mellett nem eredmnyez 20%-nl tbb szinonimt. Ez azt jelenti, hogy az adatokat durvn 1,2 lpssel tudjuk elrni. A legegyszerbb hash-algoritmus az, amikor a numerikus, vagy binrisan brzolva numerikusnak tekinthet kulcsot elosztjuk egy olyan prmszmmal, melynek rtke kzel van a rendelkezsre ll trol helyek szmhoz. A kapott maradk jelli ki a rekord relatv cmt, melybl az abszolt cm mr meghatrozhat. Ahogy teltdik a trolsra kijellt hely, gy nvekszik a szinonimk szma. Ha a feldolgozs emiatt lassulni kezd, az adatbzis-felgyel kimenti az adatokat, nagyobb trol helyet jell ki a szmukra, s visszatlti ket az jabb (osztknt pl. ms prmszmot hasznl) hash-algoritmussal. Ebbl a felhasznlk az adatfggetlensg (ld. 1.2.1. pont) kvetkeztben az jra visszallt gyorsabb vlaszadsi id kivtelvel semmit nem fognak szlelni. Egy adott kulcs szerint val kzvetlen feldolgozsra a j hashing ltalban hatkonyabb az indexelsnl. Htrnya azonban a hashingnek, hogy hatkonyan csak egyedi kulcsokra lehet alkalmazni, szekvencilis elrst nem tesz lehetv, a rekordok nem srsdnek (ld. 2.5.1. pont), egy rekordtpuson bell csak egy kulcsra lehet megvalstani. Fleg az utols rv miatt hasznljk ritkn a relcis adatbzisokban kzvetlen elrsre a hashing mdszert. Sok adatbzis-kezel rendszer nem is tmogatja, de amelyik ismeri, az is csak akkor alkalmazza, ha ezt explicit, kln krjk.

Sokszor nem pontos cmet, hanem egy cmtartomnyt hatrozunk meg, melybe tbb rekordot is elhelyezhetnk. Ez lehet egy lap, s a rekordot az gy kijellt lapon troljuk, illetve keressk. Ilyenkor csak azokat a rekordokat tekintjk szinonimknak, melyek nem frtek r a hash-algoritmus ltal kijellt lapra.

2-20

2.5. Adatszervezsi s elrsi mdok sszehasonltsa Mint azt mr emltettk, ugyanazt az adatllomnyt tbbfle mdon szervezhetjk s a megvalstott szervezsi mdok brmelyike alapjn elrhetjk. A kvetkezkben sszehasonltjuk a klnbz elrsi mdokat. Mieltt azonban ezt megtennnk, egy j fogalommal, a srsdssel ismertetjk meg az olvast. 2.5.1. Srsds Tbbszr hangslyoztuk, hogy az adatokhoz val hozzfrst jelentsen felgyorsthatjuk, ha az egyes input/output mveletek vgrehajtsi idejt s a vgrehajtand mveletek szmt minimalizljuk. Ezt gy tudjuk elrni, hogy azokat a rekordokat, amelyeket vrhatan egytt, vagy egyms utn dolgozunk fel, lehetleg egy lapra, vagy ha ez nem valsthat meg, akkor kzvetlenl egyms utni lapokra helyezzk el. Ennek jellemzsre egy j fogalmat vezetnk be, a srsdst. Ennek rtke 0 s 1 (teljes srsds) kztt van. Azt mutatja meg, hogy az adott kulcs szerint a rekordok hnyad rsze van a helyn, hnyad rsznl egyezik meg a fizikai sorrend a feldolgozs logikai sorrendjvel. Ez a gyakorlatban azt jelenti, hogy az azonos kulccsal rendelkez rekordok ugyanazon a lapon, vagy ha csak tbbre frnek el, akkor kzvetlen egyms utn kvetkez lapokon vannak s ugyanez rvnyes az egyms utni kulcsokkal rendelkez rekordokra is. Ha pldul egy rekordtpust leggyakrabban egy kulcs szerinti logikai sorrendben dolgozunk fel, akkor clszer ezeket az adatokat e szerint a kulcs szerint sorba rendezve bevinni az adatbzisba s ezt a rendezettsget a ksbbi mdostsok sorn is megtartani. gy a feldolgozs folyamn egyszerre minimalizljuk a beolvasand lapok szmt is s az egyes lapok beolvassi idejt is, azaz a feldolgozs idejt (ld. az ellenrz krdsek 1. feladatt). Ha a leggyakoribb keressi szempont alapjn val kzvetlen hozzfrsnl a feltteleknek ltalban tbb rekord felel meg, akkor srsd adatokkal hasonl mdon minimalizlhatjuk a hozzfrsi idt. Ennek megbecslsre nzzk meg a kvetkez egyszer pldt. Ttelezzk fel, hogy egy lapon r rekordot tudunk trolni. Ha a kivlasztsi felttelnek tbb rekord felel meg, akkor teljes srsds esetn egy fizikai beolvasssal r rekord adatait kapjuk meg. Ha a rekordoknak a-ad rsze lg ki a sorbl (a srsds 1-a), az a*r ms lapon lv rekordot jelent. Ha ezeket optimlisan mind egy lapon tudjuk elhelyezni, akkor egy helyett kt lap olvassra, ha mind klnbz lapokra kerlnnek, akkor tlagosan 1+ a*r, de legalbb kt lap beolvassra van szksgnk. Ez azt jelenti, hogy minl tbb rekordot trolunk egy lapon, annl nagyobb mrtkben lasstja a feldolgozst a srsds hinya. 10% kilg rekord (a=0,1) laponknt 40 rekord trolsnl mr 5-szrsre nveli a lemezhez val hozzfrsi idt, ami a legtbb esetben a feldolgozsi id dnt sszetevje. A srsds nemcsak egy adott rekordtpuson bell lehet elnys a lemez elrsi id szempontjbl. Hierarchikus jelleg feldolgozsoknl, amikor pl. minden egyes szlltnl a szllt rekorddal egytt dolgozzuk fel a hozztartoz megrendelsek rekordjait, akkor clszer lehet ezeket a klnbz tpus rekordokat is ugyanazon a lapon trolni. Az adatbzis-kezel rendszer ltre tudja hozni, s fenn is tudja tartani a srsdst, ha az adatbzis-felgyel megadja, milyen szempontok szerint kell azt megvalstani. Ha az els betltskor rendezve visszk be a rekordokat, akkor eleve srsdve helyezi el ket, s helyet hagy a ksbbi bersokra is. Az j rekordokat igyekszik gy beilleszteni, hogy a srsds tovbbra is fennmaradjon. Termszetesen, ahogy egyre jabb s jabb rekordokat szrunk be a meglevk kz, elfordulhat, hogy a bvtsre fenntartott hely betelik. Az j rekordot csak mshov tudjuk elhelyezni. A srsds mrtke cskkenni fog, a feldolgozs lelassul. Az is elfordulhat, hogy az alkalmazsok megvltoznak. Ms szempontok, ms, jelenleg nem srsd kulcs 2-21

szerint kell az adatokat a leggyakrabban feldolgozni. Ilyenkor az adatbzis-felgyel feladata, hogy az adatbzis rintett rszn a srsdst ismt maximalizlja, illetve a clnak megfelel msfajta kulcs szerinti srsdst ltrehozza. Ez gy trtnik, hogy az adatokat kimenti, s a srsd kulcsnak megfelel sorrendben a tovbbi bvtsekre ismt helyet hagyva visszatlti az adatbzisba. Ekkor a srsds mrtke jra 1 lesz. Ez az jraszervezs az adatbzis-kezel rendszerek szolgltat programjaival (ld. 1.3.4. pont) knnyen megvalsthat. A megfelel szempont szerint srsd rekordok segtsgvel a hatkonysg, a mkdsi sebessg nagymrtkben javthat. A problma az, hogy egy adott rekordtpusra vagy egymssal kapcsolatban ll rekordtpusokra a srsds csak egy kulcs, illetve csak egy kapcsolat szerint valsthat meg. (Br ez lehet egy tbb oszlopbl ll sszetett kulcs is, s ebben az esetben a srsds az ell ll kulcs(ok)ra is automatikusan fenn ll.) Ilyenkor az alkalmazsok gyakorisga, a vlaszolsi id korltjai vagy a feldolgozand rekordok mennyisge alapjn dnti el az adatbzis-felgyel, hogy melyik keressi kulcs szerint srsdjenek a rekordok, melyikre igyekezzen a feldolgozsi idt optimalizlni. 2.5.2. Elrsi mdok sszehasonltsa A trol helyek egyms utn trtn megvizsglsval, soros elrssel minden llomny feldolgozhat. Az egyms utni lapok beolvassa igen gyors, mivel vrakozsi id csak az egyik cilinderrl a msikra val tllskor lp fel (ez is csupn mgneslemeznl). Ha az sszes rekordot fel kell dolgozni, pldul adatok biztonsgi kimentsekor, akkor egyrtelmen a soros feldolgozs a leggyorsabb. Kimutathat, hogy ha az adatoknak viszonylag jelentsebb rszt (a cilinderenknt trolt rekordok szmtl fggen 5-15 % fltt) kell elrni, akkor is ez a leggyorsabb, mivel a tbb lapbeolvasst kompenzlja a rvidebb beolvassi id. Nem okoz komoly idvesztesget a soros feldolgozs akkor sem, ha tbb rekordot vlasztunk ki, de a teljes llomny csupn nhny lapot foglal el. Ezek a lapok gyorsan beolvashatk, s a pufferben trtn keress s rendezs milliszekundum alatti ideje elhanyagolhat az els lap megtallsi idejhez viszonytva. Ms esetekben a soros elrs igen gazdasgtalan. Egy egyedi kulcsrtkkel rendelkez rekord megtallshoz tlagosan a trol helyek felt vgig kell vizsglnunk. Ha tbb rekord is rendelkezhet a keresett rtkkel s mindegyiket meg kell tallnunk, vagy annak megllaptsra, hogy az adott kulcs rekord nincs bent az llomnyban, mindig vgig kell olvasnunk az llomny trolsra szolgl egsz terletet. Elnye viszont a soros szervezsnek, hogy j adatok bersa az llomny vgre igen egyszer. Meglvk mdostsa sem okoz gondot, ha a mdostott rekord elfr a rgi helyn. A trls is egyszer, ha a trlt rekordok helyt nem akarjuk felhasznlni, az gy keletkezett res helyeket alkalmanknt vgrehajtott jraszervezssel szntetjk meg. Tovbbi elny mg, hogy ha a helyben trtn mdoststl s trlstl eltekintnk, akkor ez a szervezs s elrs a lemezeknl jval olcsbb mgnesszalagokkal s kazettkkal is megvalsthat. A szekvencilis szervezs, a listaszerkezet elnyei a soros szerkezettel szemben: A mdosts, beszrs, trls egyszerbb. Ugyanazon rekordtpuson tbbfle listaszerkezetet is ltrehozhatunk. A soros feldolgozs csak egyfle sorrendet tesz lehetv. A keresett rekordok megtallshoz, vagy annak megllaptshoz, hogy az nincs az llomnyban tlagosan csak a rekordok felt kell vgigvizsglnunk. Listaszerkezettel msfle, pldul hierarchikus elrs is megvalsthat ugyanazokon az adatokon. Pldul pointerek ktik ssze egy szllt s a tle szrmaz szlltsok rekordjait. A listaszerkezet htrnyai a soros elrssel szemben:

2-22

A feldolgozs az egyes rekordok beolvassa kztti hosszabb vrakozsi id miatt lnyegesen lassabb. Nem ll fenn, vagy csak korltozott mrtkben rvnyesl ez a htrny akkor, ha a listaszerkezetet srsd kulcsra ptjk fel. Ha a srsds 1, akkor teljes mrtkben kihasznljuk a soros s a szekvencilis feldolgozs elnyeit, lnyegben azok htrnyai nlkl. Sajnos ez egy rekordtpusnl csak egy kulcsra valsthat meg. A pointerek miatt nagyobb a trol igny. Mdosts, trls, j rekord bersa a pointerek karbantartsa miatt mg akkor is lassabb, ha a fizikai trolsi sorrend teljesen megegyezik a logikai feldolgozs sorrendjvel. Az indexelt szervezs az indextblzaton keresztl ltalban lehetv teszi a szekvencilis elrst is. Elnyei az indexelt elrsnek mg, hogy igen hatkony akkor, ha a rekordoknak csak egy kis rszhez akarunk hozzfrni, akrhny keressi szempontra megvalsthat, lehetv teszi a keresst tbb felttel egyidej teljeslsnek esetre. Az indexelt szervezs htrnyai: Az indextblzat helyet, folyamatos karbantartsa idt ignyel. A hashinggel megvalstott kzvetlen szervezs s elrs elnyei: Igen hatkony egyedi rekordok megtallsra. Nem ignyel kln helyet az indextblzat szmra. A hashing htrnyai: Csak egy kulcsra valsthat meg. Dupliktumok keressre nem alkalmas. Szekvencilis feldolgozst nem tesz lehetv. A szinonimk szmnak megnvekedsekor jra kell szervezni. Az elz oldalon lv 2.3. tblzatban sszefoglaltuk a klnbz adatszervezsi s elrsi mdok legfbb elnyeit s htrnyait. 2.3. tblzat: Klnbz adatszervezsi s elrsi mdok legfbb elnyei s htrnyai. Szempont Trol hely Soros J Indexelt Kln hely kell az indextblzat s az abban val keress szmra Megvalsthat, Megvalsthat, srsd kulcsra igen srsd kulcsra igen hatkony hatkony Csak srsd kulcsra Csak srsd kulcsra hatkony hatkony Rossz Igen hatkony Rossz Rossz Igen hatkony Hatkony s igen hatkonny tehet Szekvencilis Kln hely kell a pointerek szmra Hashing Elg j

Szekvencilis feldolgozs Nagyon sok rekord keresse Nhny rekord keresse Egyedi rekordok keresse Keress tbb kulcs alapjn

Rendezst ignyel Hatkony Rossz Rossz Rossz

Nem alkalmazhat Nem alkalmazhat Nem alkalmazhat Igen hatkony Nem alkalmazhat

2-23

Szempont Soros Rekordok trlse Egyszer, de idnknti jraszervezst ignyel Rekordok mdostsa j rekordok bersa Nehzkes Nagyon egyszer

Szekvencilis Egyszer de a pointerek automatikus karbantartst ignyli s idnknt jraszervezst is ignyelhet Egyszer, de a pointerek automatikus karbantartst ignyli Egyszer, de a pointerek automatikus karbantartst ignyli

Indexelt Hashing Egyszer, de az Nagyon indexek automatikus egyszer karbantartst ignyli

Egyszer, de az indexek automatikus karbantartst ignyli Egyszer, de az indexek automatikus karbantartst ignyli

Nagyon egyszer Nagyon egyszer

2.6. Keress tbb kulcs szerint Gyakran keresnk az adatbzisban ilyen jelleg krdsekre vlaszt: Kik azok a 25 35 v kzti, kzgazdsz vgzettsg szemlyek, akiknek legalbb 15 v vezeti tapasztalatuk van? Amennyiben tbb keressi kulcsra egyidejleg fennll felttelek teljeslse alapjn akarunk az adatokhoz hozzfrni, akkor az SQL optimalizl az adatok mennyisge, eloszlsa s a rendelkezsre ll indexek alapjn meghatrozza a szerinte optimlis utat, melyen keresztl ez vrhatan a leggyorsabban valsulhat meg. Termszetesen az optimalizl is hozott anyagbl dolgozik. Csak azokat az adatszerkezeteket, csak azokat az indexeket tudja felhasznlni, amelyeket a felhasznlk s az adatbzis-felgyel ltrehoztak. Ha a kivlasztsban szerepl kulcs-kombincik alkalomszeren vltoznak, akkor nem tehetnk tl sokat. Felptjk a rendszeresen hasznlt keressi kulcsokra az indexeket, s rbzzuk a rendszerre, melyeket hasznlja majd ezek kzl (ld. 2.7. alfejezet). Sokszor azonban az alkalmazs logikjbl eleve tudjuk, hogy bizonyos keressi kulcsok rendszeresen egy adott kombinciban szerepelnek a kivlasztsi szempontokban. J plda erre, amikor az elsdleges kulcsot kt oszlop kombincija hatrozza meg. Ez ll el az 1.2.2.1. pontban ismertetett MITHALLGAT tblzatban is. Ebben sem a hallgat (HID), sem a tantrgy azonostja (TID) kln-kln nem hatrozza meg egyrtelmen sem az osztlyzatot, sem a gyakorlati pontok szmt. Csupn a kt azonost egyttes kombincija teszi egyrtelmv ezek rtkt. Ahhoz, hogy egy j MITHALLGAT rekord beptsnl, vagy meglv mdostsnl egyszeren s gyorsan megllapthassuk, van-e mr az j/mdostott (HID,TID) kombincival jellemzett rekord, nem elg nll indexeket pteni a HID s a TID mezkre. Kln egyedi indexet kell definilnunk a kt mez kombincijra is. Ebbl azonnal ellenrizhet, hogy az j rekord berhat-e, illetve vgrehajthat-e a krt mdosts. Ha az sszetett indexben az oszlopok sorrendje HID,TID, akkor ez az index flhasznlhat a MITHALLGAT tblzatban a hallgatk azonostja (HID) alapjn val kzvetlen hozzfrsre is.1 Flsleges lenne HID-re egy jabb, dupliklt indexet felpteni. Ez ugyanazokat a cmeket tartalmazn, mint az egyedi (HID,TID) index. A klnbsg csupn annyi, hogy az elsben egy HID rtkhez tbb cm is tartozik, de ezek mindegyike egyenl az egyedi (HID,TID) indexrtkekhez tartoz egyedi cmek valamelyikvel. A 2.4.1.4. pontban lthattuk, milyen hasznos lehet tbb tblzatnak egy kzs oszlop azonos rtkei alapjn trtn rendszeres egyestshez egy nll join-indexet ltrehozni. A

A tantrgy azonost (TID) alapjn val kzvetlen hozzfrst ez az index nem teszi lehetv.

2-24

kvetkezkben bemutatjuk, milyen hasznos lehet egy j, sszetett index ltrehozsa, ha az index oszlopai rendszeresen egytt szerepelnek a kivlasztsi felttelben. Tegyk fel, hogy egy szemlyi nyilvntart rendszerben rendszeresen keresnk embereket (emberek rekordjait) hrom szempont (letkor, szakkpzettsg, szakmai tapasztalat) egyttes teljeslse alapjn. Ha ezek mindegyikre vannak indexek, akkor bittrkpek esetn azok egybevonsval (ld. 2.4.1.3. pont), B+ fa indexek esetn (ld. 2.4.1.2. pont) ltalban valamelyik index1 szerint vgigmenve, az indexelt rtkhez tartoz rekordok egyenknti beolvassval, s a msik kt felttelnek a beolvasott rekordban val ellenrzsvel, vagy a hrom indextblzatbl a hrom rtkhez tartoz kzs rekordcmek kivlasztsval kaphatjuk meg a keresett rekordokat. Brmelyik mdszert vlasztja az optimalizl, specilis esetektl eltekintve, mindig lnyegesen tbb lapot kell beolvasnunk, mint ahny lapon a keresett rekordok elhelyezkednek. Jelentsen lecskkenthetjk a lemez hozzfrsek szmt, s ez ltal az elrsi idt, ha a hrom keressi szempont kombincijra is felptnk egy nll indexet. Ez rgtn azoknak a rekordoknak a cmt adja meg, amelyekre mindhrom felttel teljesl. Mivel a hrom szempont egyttesen mr elg szelektv, egy adott hrmas kombincihoz tartoz cmek ltalban 1 - 2 lapon elfrnek. Ez(eke)t beolvasva a keresett rekordokat a cmk alapjn egybl megtalljuk. Az input/output mveletek szma gyakorlatilag megegyezik a felttelnek megfelel rekordok szmval. Ha a hrmas, kombinlt index alapjn kapott cmeket a tnyleges beolvass eltt rendezzk, akkor a fizikai lapmveletek szma mg ennl is jval kevesebb lehet, hiszen egy lapon tbb keresett rekordot is tallhatunk. Az j index a szemlyi adatok s a hozztartoz indexek szmra szksges trterletet legfljebb nhny szzalkkal nveli meg. Ezzel szemben a hozzfrsi id egy nagysgrenddel is lecskkenhet, mert az optimalizl ennek alapjn fogja meghatrozni az elrsi utat. De ezt csak akkor tudja megtenni, ha ezt az indexet elzleg ltrehoztuk! 2.7. Optimlis elrsi t meghatrozsa Az adatszervezsrl s elrsrl eddig mondottakat ebben a pontban sszefoglaljuk s ismt ttekintjk. Az adatbzisban a keresett adatokhoz klnbz mdokon lehet hozzfrni. A lehetsges megoldsok kzl ltalban az SQL optimalizl vlasztja ki a rendelkezsre ll informcik alapjn az optimlis elrsi utat. Ehhez a katalgusban lv statisztikt (ld. 7.3. alfejezet) hasznlja fel. Ez rendszeresen karbantartott adatbzisban lnyegben naprakszen mutatja a klnfle rekordok szmt s a klnbz keressi kulcsok szerinti eloszlst. Amennyiben ilyen statisztika nem ll rendelkezsre, akkor az optimalizl ezeket sszer felttelezsekkel helyettesti, hogy a valsznleg legjobb elrsi utat meg tudja hatrozni. A generlt elrsi t rszleteit az EXPLAIN SQL parancs segtsgvel ismerhetjk meg. Egyes rendszerek legjabb verziiban az SQL utasts kiadja is meghatrozhatja, hogy az adott utastsban milyen ton kvnja elrni az adatokat. Ezt azonban csak az igen gyakorlott adatbzis-felgyelknek s felhasznlknak ajnljuk, s kizrlag olyan esetekben, amikor az adatok specilis eloszlsrl olyan informciik vannak, melyekrl az optimalizl nem tudhat. A tovbbiakban egy viszonylag egyszer pldn mutatjuk be, hogy a megvalstott adatszerkezetektl, az adatok mennyisgtl s eloszlstl fggen milyen mdon clszer megvlasztani az elrsi utat. Feladatunk az, hogy a gpjrmveket ler rekordokbl ABC

Ez az index vagy a hrom keresett rtk kzl a legkevesebb cmet tartalmaz indextbla (legkevesebb lapot kell beolvasni), vagy a srsd index (leggyorsabban lehet a lapokat egyms utn beolvasni) lesz.

2-25

sorrendben kivlasszuk azoknak az zembentartknak a nevt s a gpjrmvk rendszmt, melyeket 2006-05-05-n lltottak forgalomba s a modell Ford Focus.1 A kvetkez lehetsgeink vannak: 1. Sorosan, fizikai elhelyezsk sorrendjben vgigolvassuk az sszes gpjrm rekordot. Egyenknt ellenrizve kivlasztjuk bellk a mindkt felttelnek megfelel rekordokbl az zembentart nevt s a rendszmot s az eredmnyt rendezzk nv szerint. Ha csak soros adatszervezs van, akkor ez az egyedli megolds. Ms szervezs megvalsulsa esetn is ez lehet az optimlis elrsi t, ha az egyttes feltteleknek relatv sok rekord felel meg (durvn > 10%) s egyik keressi szempont s a nv szerint sem srsdnek a rekordok. Gyakorlatilag nem rosszabb a hatkonysg ms szervezsi md meglte esetn sem, ha a rekordok szma kevs, egy - kt lapon elfrnek. 2. Szekvencilis szerkezetet ptettnk fel az zembentart nevre. Ha ezen vgigmenve vlasztjuk ki a rekordokat, megtakartjuk a rendezst. Ha a rekordok srsdnek a nv szerint, akkor ez valamivel jobb az 1. megoldsnl. Ha nem srsdnek, s nhny lapnl tbb helyet foglalnak el, akkor lnyegesen rosszabb lesz nla. Index van valamelyik, vagy kln-kln mindkt keressi szempontra. Az egyik index alapjn beolvassuk a felttelnek megfelel rekordokat (pl. a Ford Focusokat), kivlasztjuk kzlk a msik felttelnek is megfelelkbl a nevet s a rendszmot, ezeket rendezzk. Ha az index szerinti kivlaszts mr mrskelten szelektv (nhny szzalk alatti), akkor ez egyrtelmen jobb az 1. s 2. mdszernl. Tovbb javthatunk, ha azon az indexen megynk vgig, amelyik kevesebb rekordot vlaszt ki, a srsd indexen megynk vgig (ha van), mg akkor is, ha a tallatok szma egy nagysgrenddel is tbb. Index van mindkt keressi szempontra. Mindkt indextblzatbl kikeressk a felttelnek megfelel rekordok cmeit, rendezzk, a kzs cmekrl kivlasztjuk a nevet s a rendszmot, az eredmnyt nv szerint rendezzk. Nagyjbl egyenrtk a 3. mdszerrel. Az adatok mennyisgtl s eloszlstl fgg, hogy konkrt esetekben ppen melyik a clravezetbb. sszetett index van a kt keressi szempontra. Ha ezt az indexet hasznljuk, s a kivlasztott rekordokat rendezzk, akkor jobb az sszes eddig felsorolt hozzfrsi eljrsnl. Mg tovbb javthatunk, ha az sszetett kulcs, vagy annak els komponense szerint srsdnek a rekordok. Mestersges indexet ksztnk, melynek sszetevi: modell; zembe helyezs napja, zembentart neve, rendszm. Ezen index alapjn az indextblzatbl azonnal megkapjuk az eredmnyt. A gpjrm rekordokhoz hozz sem kell nylni. Ez a mdszer a leggyorsabb, nagysgrenddel gyorsabb hozzfrst eredmnyez mg az 5. mdszernl is. Ha ez a fajta keress rendszeres, akkor rdemes az indexterlet nmi nvelse rn ezt a hozzfrsi mdot lehetv tenni.

3.

4.

5.

6.

Az erre szolgl SQL utasts (ld. 5.6.3.2. pont): select nev,rendszam from gepjarmu where uzembehelyezes=2006-05-05 and modell=Ford Focus order by nev.

2-26

2.8. Adattmrts A lemeztrolk kapacitsnak nvekedse s ruknak cskkense ellenre is fontos szempont maradt az adatbzisokban a kls troln lv hely j kihasznlsa. Ha a hasznos adatok kevesebb helyet foglalnak el a troln, akkor ugyanazon a hardveren tbb adatot trolhatunk. egy lapra tbb adat fr el. Ritkbb lesz a lapvltsok, a fizikai r/olvas mveletek szma. Felgyorsul a lemez mveleteket is ignyl feldolgozs. kevesebb adatot kell tvinni a hlzaton. Gyorsabb az egyttmkds elssorban az osztott adatbzisokban illetve adatbzisok kztt. 2.8.1. Vltoz hosszsg mezk A legegyszerbben vltoz hosszsg mezk alkalmazsval rvidthetjk le a rekordjaink hosszt, trolhatjuk ugyanazt az informcit kevesebb helyen. Ha egy mez rtkes adattartalma vltoz hossz lehet (pl. nevek, lakcmek), akkor ezt a mezt olyan hosszra kell deklarlni, hogy a leghosszabb adat is elfrjen benne. Ugyanakkor, a karakteres mezknl a legtbb esetben csupn a mez elejn lv karakterek szolgltatnak rdembeli informcit. A mez vgn lev szkzk flslegesen foglalnak le rtkes helyeket. A nvmezbe be kell frjen az 57 karakterbl ll Szentmihlyfalvai Szilvesztern Alsnagybnyai Anasztzia nv is, de lehet hogy csak K Ede ll benne 51 utna kvetkez felesleges szkzzel. A mez vgn lev, informcit nem tartalmaz szkzket elhagyhatjuk vltoz hosszsg mezk definilsval (ld. 5.4.1. pont). Ezek hossza a felhasznl fel egyenl a maximlisan elfordulhat adat hosszval. De a fizikailag tnylegesen trolt mez ennl rvidebb lehet, mivel a szvgi szkzket nem tartalmazza. A mez eltt ltalban 2 bjt szolgl a mez tnyleges hossznak jellsre. gy a maximlisan N bjt hosszsg, vgn n szkzt tartalmaz karakteres mez a valsgban N+2-n bjtot fog elfoglalni a lemezen. Mivel a vltoz hosszsg jelzse is helyet foglal el, s kezelse, a mez rtkes hossznak megllaptsa, illetve szkzzel val feltltse s az utna kvetkez mezk kezdhelynek megllaptsa idt ignyel, a gyakorlatban csak akkor rdemes ezzel dolgoznunk, ha a rekordonknti tlagos helymegtakarts meznknt legalbb 10 -15 bjt. A legtbb adatbzis-kezel rendszer numerikus mezknl is lehetv teszi, hogy az brzoland rtkes jegyektl fggen kt lehetsg kztt vlaszthassunk. Egy egsz- vagy lebegpontos szmot hosszabb vagy rvidebb formban is trolhatunk. 2.8.2. Kdtblzat Olyan szveges mezknl, melyek csak meglehetsen korltozott szm klnbz rtket vehetnek fel, hasznos lehet a kdtblzat hasznlata. Plda erre, ha a lakcmbe, vagy a szletsi helybe az orszg neve helyett annak a gpjrmveken hasznlatos 1 3 bets orszg kdjt rjuk be. Ezzel helyet takartunk meg. A rekordban lv orszg kdbl viszont meg kell llaptanunk az orszg nevt, ami idbe kerl. Mivel a kdtblzat ltalban kicsi, teljes egszben llandan benntarthat a kzponti memriban. Ilyenkor az tkonvertls maga nem ignyel tnyleges lemez mveletet. A kdtblzat hasznlata elhanyagolhat mrtkben nveli csak meg a feldolgozsi idt. Ha rosszul szervezzk a munknkat, vagy a kdtblzat olyan nagy, hogy munka kzben lemezen kell tartani, meggondoland a hasznlata. Klnsen igaz ez akkor, ha a megtakarts meznknt csak nhny bjt. Nehezebb a kdtblzat felptse, ha nagyon sok klnbz rtk fordulhat el. De ilyenkor is hasznos lehet, ha a sok rtk kztt az esetek legnagyobb rszben csak nhny szz szerepel. Ilyen lehet az elz pldnl maradva a vros, amelyik egy tlagos magyar 2-27

adatbzisban kzel 20 szzalkban Budapest, a tovbbi 20 30 szzalkban pedig a legnpesebb 20 -30 magyar vros valamelyike lesz. Ilyenkor sokat javt egy olyan, az adatok eloszlshoz illeszked kdtblzat ltrehozsa, melyben a leggyakrabban elfordul elemek kdja a legrvidebb (1 - 2 karakter), mg az igen ritkn elfordul elemek kdja hosszabb, vagy esetleg nincsenek is kdolva. Egy ilyen tblzatban pldul Budapest kdja lehet B, Debrecen, Miskolc, Pcs rendre D, M, P, Szolnok SZL, Szombathely SZM, s az igen ritkn elfordul Jszkarajen vagy a klfldi vros nevek egyltalban nincsenek kdolva. Az gy elrhet helymegtakarts az adatok eloszlstl s a kdol gyessgtl fggen 7580 % is lehet. Egyes adatbzis-kezel rendszerek, gy pl. az IBM UDB/DB2, ha kln krjk (COMPRESS YES) felptik helyettnk ezt a kdtblzatot, s automatikusan hasznljk is. 2.9. Rendezs Az adatbzisokbl nagy mennyisg informcit nyerhetnk. Ahhoz azonban, hogy ez ttekinthet legyen, szksges, hogy az eredmnyek bizonyos megfelelen kivlasztott szempont, vagy szempontok szerint rendezve legyenek. Ezen kvl az adatbzisban val munka kzben is gyakran szksgnk van a kivlasztott adatoknak vagy azok egy rsznek rendezett formban val ellltsra. A rendezs rvid ismertetst az indokolja, hogy ez az adatfeldolgozs egyik legidignyesebb mvelete. Ez klnsen nagy rekordmennyisgnl jelentkezik, mivel a rendezs ideje a rendezend rekordok szmval nem egyenesen arnyos, a rendezsi mdszertl fggen n*log(n) s n2 kztti nagysgrendben nvekszik. (n a rendezend rekordok szma). A rendezshez szksges mveleteket az adatbzis kezel rendszer automatikusan elvgzi. ltalban nem magukat a rekordokat rendezi fizikai sorrendben, hanem a rendezend szempont szerint kszt egy indextblzatot s ennek alapjn szolgltatja megfelel sorrendben a rekordokat. Rendezsre a kvetkez esetekben van szksg: Az eredmnyeket valamilyen szempont szerinti sorrendben kvnjuk megjelenteni s a kivlaszts az adatbzisbl nem e szerint a szempont szerint trtnt. j indexet hozunk ltre a mr az adatbzisban lv adatokon. A feldolgozst az SQL rtelmez tbb lpsre bontja fel, s ezek valamelyikben az ideiglenesen trolt adatokra rendezett formban van szksge. Azonos rtkekkel rendelkez adatok kiszrse, csoportostsa az azonos rtk alapjn. A fentieken kvl nagy adatmennyisgek bevitelekor ltalban clszer az adatokat a bers eltt rendezni. Ez azonban az adatbzis-kezel rendszer keretein kvl trtnik. Igen gyakran elfordul ad hoc jelleg lekrdezseknl, hogy egyes felhasznlknak a legklnflbb sorrendben, csoportostsban van szksgk az eredmnyekre. Mivel a kivlasztott adatok s a rendezsi szempontok llandan vltoznak, ezek mindegyikre nem rdemes lland indexet felpteni.1 Ha ilyen feladatot kell megoldani, akkor a SELECT utastsban (ld. 5.6.3.2. pont) megadott ORDER BY utasts kiegszts hatsra az adatbziskezel rendszer generlja a rendezshez szksges utastsokat, ltrehozza a rendezshez szksges ideiglenes llomnyokat, majd az utasts vgrehajtsa utn trli ezeket. Sokszor elfordul, hogy az adatbzis felptse utn jvnk r arra, hogy olyan mezk rtke alapjn akarunk rendszeresen keresni, vagy rendezett sorrendben feldolgozni, melyekre
Az igen gyakran hasznltakra termszetesen clszer indexeket ltrehozni, mint azt ebben a fejezetben is lthattuk.
1

2-28

nincs index. Ebben az esetben a hatkonysgot jelentsen megnvelhetjk, ha ezekre a mezkre utlag egy indexet ptnk fel. Ezt brmikor megtehetjk. De ehhez az adatbzisnak a rekordokat elbb rendezni kell ezek szerint a mezk szerint. Ez sok rekordnl hossz idt is jelenthet, de csak egyszer kell elvgezni. Utna mr lvezhetjk az indexek alapjn val kzvetlen hozzfrs elnyeit. Adatok csoportostsnl s az egyes csoportokra jellemz rtkek meghatrozsnl (pl. vfolyamok szerinti tanulmnyi tlag), vagy teljesen azonos eredmnyeknl a dupliktumok kiszrsnl is legclszerbb az adatokat elszr rendezni. (A SELECT utastsban GROUP BY utasts kiegszts vagy DISTINCT szerepel). A rendezett llomnyon val szekvencilis vgighaladskor a csoportvltsokat, a dupliklt rtkeket egyszeren tudjuk szlelni. Rendezskor is, mint minden szmtgpes feladat megoldsakor, az id, a kzponti memria, s a kls trolkapacits, valamint a beszerzsi s zemeltetsi kltsgek ellentmondsval tallkozunk. (Hiba, mint azt tbbszr is lttuk Nincs potya kaja, there are no free lunches!) Gyors rendezshez nagy kzponti memria, de ha ez nem elg, akkor ehhez kiegsztsl mg sok nagy, ideiglenesen felhasznlhat lemezterlet kell. Ebbl fleg az els sok pnzbe kerl. Kisebb memrinl s lemezkapacitsnl viszont a rendezsi id n meg. Ez pedig, fleg prbeszdes munknl, mivel ez a felhasznl idejt jelenti, mg drgbb. Az ellentmonds feloldsra mint a szmtstechnikban mindig , szszer kompromisszum szletett. Mivel rendezsnl a rendezend adatokhoz sokszor kell hozznylnunk, ezrt ezekbl amennyit csak lehet, annyit beolvassunk a memriba s ott sorba rendezzk. (Adatokon itt most ltalban nem a teljes rekordot, hanem csak a jval rvidebb rendezsi kulcsot s rekord lemezcmt rtjk). A rendezett rszhalmazt kirjuk lemezre egy ideiglenes llomnyba, s a rendezend adatok jabb csomagjt olvassuk be rendezs cljbl a kzponti memriba. Rendezs utn ezt is kirjuk egy msik llomnyba. Ezt az eljrst addig folytatjuk, amg a teljes rendezend llomny ki nem kerl rendezett rszhalmazokban a lemez(ek)re. Ezutn a rendezett rszhalmazokat azok s a trolsukra szolgl perifrik szmtl fggen egy, vagy ltalban tbb lpsben a lemezeken sszevlogatjuk egyetlen egy rendezett halmazba. A fentiek alapjn a rendezs hatkonysga kt rszbl tevdik ssze. Ezek A rendezs hatkonysga a bels memriban. Ez fgg a rendezsi mdszertl s a rendezsre rendelkezsre ll memria nagysgtl, hny rekordot rendezhetnk egy lpsben. A lemezeken ideiglenesen trolt rendezett rszhalmazok sszevlogatsra szolgl algoritmustl, s a rszhalmazok trolsra szolgl lemezek (nll lemez terletek) szmtl. Ezek kzl az tlagos felhasznl semmit nem tud befolysolni. Legfljebb annyit tehet, hogy ha mdja van, akkor igyekszik feladatait gy megfogalmazni, hogy minl kevesebb esetben legyen sok rekord rendezsre szksg. Az adatbzis-felgyel is csak annyit javthat, hogy a kzponti memriban val rendezshez az egyb ignyek figyelembevtelvel maximlis trol helyet biztost s sok lemezt (lemez terletet) jell ki az ideiglenes trolsra. 2.10. Ellenrz krdsek 1. Becslje meg, mennyivel lassul le a szekvencilis feldolgozs, ha a rekordok a-ad rsznl (srsdsi faktor 1a; a < 0,1) nem egyezik meg a fizikai sorrend a logikaival! A kilg rekordokat ugyanazon a cilinderen troljuk.

2-29

2.

Mi lehet a magyarzata annak, hogy vltoz hosszsg numerikus adatoknl ellenttben a karakter tpusokkal nem vlaszthatjuk meg szabadon az adatok hosszt, hanem ltalban csak kt lehetsg kztt vlaszthatunk? Hogyan hatrozhat meg bit-trkpnl az n1,n2, pozcikon lv 1 rtkekbl az adott indexhez tartoz rekordok cme a rekordcmek tblzatbl? Hogyan kell kiegszteni a join-indexet, vagy rtelmezni az eredmnyt a 2.4.1.4. pontban megadott pldban, ha egy vrosban tbb lerakat is lehet, s ha van olyan vros, ahol nincsen lerakatunk? Ha felttelezzk, hogy a B+ fa egy indexlapjn 100 indexbejegyzst tudunk trolni, akkor hny lpsben tudunk elrni egy adott rekordot, ha a rekordok szma 1 milli, illetve 100 milli? Mirt nem lehet a hashing algoritmussal egy rekordon bell tbbfle mezre is klnkln keresni? Felgyorstja-e a srsds az elsdleges kulcs alapjn val feldolgozst, ha a rekordokat mindig csak kzvetlen elrssel dolgozzuk fel, idnknt szekvencilisan is feldolgozzuk az elsdleges kulcs szerint, de a szekvencilis feldolgozs zmmel ms szempont alapjn trtnik, rendszeresen feldolgozzuk szekvencilisan az elsdleges kulcs szerint?

3. 4.

5.

6. 7.

8.

Mirt clszer vltoz hosszsg tmrtsnl a leggyakoribb rtkekhez a legrvidebb kdot hozzrendelni?

2-30

3. ADATMODELLEK
Az adatbzis-fejleszts els lpse az, hogy meghatrozzuk, milyen informcikra van szksgnk, milyen adatok llnak ezekhez a rendelkezsnkre, s milyen adatmodell segtsgvel fogjuk az adatbzist megvalstani, hogy abban az adatokat troljuk s abbl az informcikat elllthassuk. Ebben a fejezetben az adatmodell kialaktsval foglalkozunk. Az adatmodell az adatokat a felhasznl szemszgbl vizsglja, s legalbbis elvileg fggetlen attl, hogy megvalstsa milyen mdon, milyen technikval trtnik. Az adatmodellel mindig az adatbzis koncepcionlis szintjnek (ld. 1.2.2.3. pont) a logikai szerkezett rjuk le. Ahhoz, hogy az adatmodellt elkszthessk, meg kell llaptanunk, hogy mikrl, illetve kikrl akarunk adatokat trolni. Ezek lesznek modellnk egyedtpusai, entitsai. az egyes egyedtpusokrl mit akarunk megtudni, milyen adataikra lesz szksgnk. Ezek lesznek az egyedtpusok tulajdonsgai, attribtumai. a klnbz egyedtpusok kztt milyen kapcsolatok llnak fenn. Az adatmodell vges szm egyedtpusnak s azok egyenknt is vges szm tulajdonsgainak s kapcsolatainak az sszessge. Nem foglalkozik ezen egyedtpusok egyedeivel, konkrt elfordulsaikkal (instance), azzal, hogy ezeknek mik az rtkei, hogyan kerlnek trolsra, s miknt lehet velk mveleteket vgezni. Ez az adatmodell realizlt formjnak, az adatbzisnak, mely az adatmodell egyed-elfordulsainak szervezett sszessge, s az ezen adatokban lv informcik kinyersre szolgl adatbzis-kezel rendszernek a feladata. Az egyedtpusokon s azok kapcsolatain alapul adatmodellt egyedtpus kapcsolat, vagy angol elnevezse alapjn Entity Relationship, rviden E R modellnek hvjuk. Ha az egyedtpusokat relcikknt brzoljuk, akkor beszlnk a relcis modellrl. Napjainkban a mkd adatbzisok szinte kizrlag a relcis modellre plnek. A modellt kialakthatjuk fellrl lefel, Top-Down, vagy alulrl ptkezve, Bottom-Up tervezsi mdszerrel. A Top-Down mdszernl elszr az intzmnyi stratgiai informcikbl kiindulva hatrozzuk meg az egyes egyedtpusokat, tulajdonsgaikat s kapcsolataikat. Nagy adatbzisokat ltalban gy terveznek. A Bottom-Up eljrs a felhasznl ltal ignyelt adathalmaznak a kvnt adatstruktrba val elrendezsre, s a Top-Down eljrssal kapott modell tovbbi finomtsra alkalmas, mint azt majd a 4.6. alfejezet normalizlsi pldjn bemutatjuk. 3.1. Az adatmodellezs clja Az adatmodellezs segt abban, hogy megrtsk az adatok szerkezett, rtkelni tudjuk tartalmukat. Ez szksges ahhoz, hogy az adatbzist megtervezzk Miutn a megtervezett adatbzist felptettk, adatokkal feltltttk, segtsgvel informcikat szolgltathatunk a napi munkhoz s a dntshozatalhoz. Az adatmodell szmtgpes megvalstsa az adatbzis, az adatbzisbl val informci szolgltatst pedig a szmtgpes programok teszik lehetv. Az adatmodellezs egy mdszer, mellyel meghatrozzuk, mi kerljn be az adatbzisba. A cl az, hogy alkalmazsval logikailag csoportostsuk a vals vilgnak azt a rszt, azokat a tnyeket, amiket az adatbzisban trolnunk kell. Nem trdik azzal, hogy ez miknt valsul meg. Ez annak a feladata, aki a modell alapjn megvalstja az adatbzist. Azzal sem foglakozik, miknt fogjuk az adatokat feldolgozni. Ez a rendszer-elemzs, -szervezs terlete. Az adatmodellezs clja az, hogy olyan adatmodellt hozzunk ltre, amely 3-1

a megoldand feladat szempontjbl valsghen, egyrtelmen, teljesen s minimlisan, azaz csak a szksges adatok trolsval brzolja a vals vilg adatait s kapcsolatait. A modell megalkotsban egyenrang flknt vesznek rszt a tervezend (illetve mdostand) adatbzis felhasznli s az adatmodellez szakemberek. Az adatmodell ltrehozsa egy iteratv folyamat. Formja a felhasznlk s a tervezk kzti egyttmkds eredmnyeknt llandan vltozik. A vgs verzija alig fog hasonltani az elsre. St, a mr utolsnak tekintett, zembe vett vltozata is mg tbb mdostson fog tmenni, rszben utlag kiderlt tervezsi hibk, de fknt az let vltozsai miatt. Ha papron dolgozzuk ki a modellt, akkor csak puha ceruzt hasznljunk. Legyen kznl egy nagy radr, s a papr kzepn kezdjk el a rajzolst, mert nem tudhatjuk, milyen irnyba s milyen nagyra fog a modell brja kiterjeszkedni. Ha pedig az egyre jobban elterjed szoftvertervez eszkzk valamelyikt hasznljuk, mindig figyeljk kritikus szemmel a kapott eredmnyeket. Knnyen lehet, hogy az ltalban optimlis modellt szolgltat szoftver a mi specilis esetnkben a gyakorlatban csak nehezen, vagy rossz hatkonysgot eredmnyez megoldst javasol. Alapelvnk az, hogy aki tervezskor szz szzalkig rbzza magt a klnfle kz tulokra (CASE Tool1), az egy ksz tulok! 3.2. Az adatmodellek fejldse Az els adatbzis-kezel rendszereket az 1960-as vek elejn helyeztk zembe. Ezek a hierarchikus adatmodellen alapultak. Ennek az volt a magyarzata, hogy a vals vilg nagyon sok terlett jl lehetett hierarchikus szerkezetben brzolni egyrtelm al- s flrendelsi viszonyokkal. Ilyen volt kzelten egy vllalat felptse, vagy egy gyrtmny sszeszerelse az alkatrszeibl. A gyakorlatban a 60-as 70-es vekben szmos hierarchikus adatbzist hoztak ltre s sok ezen alapul rendszert fejlesztettek ki. Ezek kzl az IBM Information Management System (IMS) rendszere volt a legelterjedtebb. Ez 1968-ban jelent meg a piacon s korszerstett verziit rgi nagy rendszerekben helyenknt mg ma is hasznljk. A hatvanas vek vgn alakult meg a CODASYL Bizottsg keretben a Data Base Task Group, amelyik clul tzte ki, hogy rendet teremt az adatbzis technolgiban azidtjt uralkod dzsungelben. Trekvsket siker koronzta. 1971-ben jelent meg a vgleges jelentsk. Az itt lefektetett alapelvek killtk az idk prbjt s a mai adatbzis-kezel rendszerek felptse is ezek alapjn valsul meg (ld. 1.2. alfejezet). A 70-es vek msodik feltl egy b vtizedig a hls modellen alapul rendszerek voltak a legnpszerbbek. A hls szerkezet egy olyan ltalnostott hierarchit jelent, ahol az elemek kztt nem csak 1:N (illetve 1:1) egy-tbb hierarchikus kapcsolat llhat fenn, hanem tetszleges N:M (tbb-tbb) kapcsolat is (ld. 3.5. pont). Ezzel az let mr teljes mrtkben modellezhet, a krnyezetnk egyedtpusai kztt fennll kapcsolatokat ilyen mdon mindig le tudjuk rni. Magyarorszgon a legnpszerbb hls rendszer a Culliname Corporation ltal forgalmazott Integrated Data Management System (IDMS) volt. Mind a hls, mind a hierarchikus modellben bizonyos alaprekordokat kzvetlenl is megkaphattunk, de az azonos logikai szerkezetbe tartoz rekordokat az azokba beptett pointerek segtsgvel rhettk csak el. gy pldul egy szlltlevl fejrszt azonnal, kzvetlen elrssel beolvashattuk, de a hozztartoz egyedi megrendels-tteleken csak a rjuk felptett lncon, az gynevezett seten keresztl mehettnk vgig. Az ilyen fajta feldolgozs csak akkor lehet hatkony, ha jl ismerjk az adatbzis szerkezett, tudjuk, miknt lehet s kell az adatok kztt naviglni.

CASE Tool (ejtsd: kztul)= Computer Aided Systems Engineering Tool, Szmtgppel tmogatott rendszerfejleszt eszkz.

3-2

A szemlyi szmtgpek elterjedse alapjaiban vltoztatta meg a szmtstechnikai alkalmazsokat, gy az adatbzisokkal kapcsolatos munkkat is. Az jabb adatmodellek kialaktst s bevezetst elssorban az indokolta, hogy egyre bonyolultabb adatszerkezeteket kellett kezelni, egyre ntt azoknak a felhasznlknak a szma, akik dolgozni akartak az adatbzisokkal, de nem, vagy alig volt szmtstechnikai/informatikai kpzettsgk, az alkalmazsi rendszerek kifejlesztst s karbantartst egyszerbb, gyorsabb s olcsbb akartk tenni. Ezeknek az elvrsoknak felelt meg a relcis adatmodell. Ennek elvi alapjait F. F. Codd mr az 1970-es vek elejn kidolgozta, de technikai okokbl csak a 80-as vekben terjedtek el a piacon. Mivel napjainkban a relcis modellre pl relcis adatbzis-kezel rendszerek illetve azok klnbz kibvtsei dominlnak, ezekkel a 4. fejezetben kln foglalkozunk. Az elmlt vezred utols vtizedben egyre nagyobb jelentsgre tettek szert az adattrhzak (ld. 9. fejezet), az internet alkalmazsok (ld. 6.2. alfejezet) s elterjedt a kliensszerver architektra (ld. 1.6.2. pont). Az adatbzisokban nem csupn strukturlt adatokat, hanem klnfle objektumokat (ll s mozg kpek, hanganyagok, komplex dokumentumok) is trolni kell. Ezrt megjelentek az objektumorientlt adatbzis-kezel rendszerek is, melyek mindezek feldolgozst lehetv teszik. Termszetesen az egyre hatkonyabban hasznlt adatbzisok mellett megmaradtak azrt a hagyomnyos fjl-kezel rendszerek is. Rszben specilis adatbzis szolgltatsokat nyjtanak (pl. adatok kimentse), rszben klnfle egyedi problmk, fleg egy felhasznls szemlyi szmtgpes feladatok megoldsra szolglnak. (Pl. Windows Intz, Norton Commander). A knyv tovbbi rszben dominancija miatt csak a relcis adatbzis-kezel rendszerrel foglalkozunk. 3.3. Fbb modellezsi szempontok A j adatmodell a vals vilgnak a feladat megoldshoz szksges rszt, s csak azt brzolja. Az ehhez szksges kivlasztst s egyszerstst gy kell megvalstanunk, hogy a modell tartalmazza az sszes szksges adatot s informcit, de ttekinthet s szmtstechnikailag kezelhet maradjon. Egyszer plda erre egy vllalat kszpnznyilvntartsa. A teljes kszpnz mennyisget mindenkppen felvesszk a modellbe. De azt, hogy ez hny 20000, 10000. , 5, 2 s 1 forintosbl ll, akkor rdemes bevenni, ha az egyes rszlegeknl kszpnzben fizetik ki a dolgozkat, hogy mindenkinek be tudjuk tenni a fizetsi bortkjba a pontos sszeget. Hogy a teljes modell miknt s meddig egyszersthet, igen nagy mrtkben attl fgg, mire akarjuk hasznlni. Az egyszersg s az ttekinthetsg mellett figyelembe kell vennnk azt is, hogy a feladatok s az ignyek is vltoznak. Olyan adatmodellt kell kialaktanunk, melybe az j ignyeket is knnyen be lehet pteni, gy lehessen bvteni, mdostani, hogy a korbbi feladatokat a vltoztats utn is lehetleg ugyangy hajthassuk vgre. Emellett olyan szerkezetet vlasszunk, hogy az adatbzis hasznlatakor az esetleges emberi hibkat minl nagyobb valsznsggel automatikusan kikorrigljuk, vagy legalbbis megakadlyozzuk. Br elvileg nem tartozik az adatmodellbe, a gyakorlatban mgis clszer figyelembe venni a klnbz korltokat. Az adatok mennyisgt, trolhat rszletessgt s az adatbzis komplexitst mindenkppen behatrolja a rendelkezsnkre ll szoftver s hardver. Fellphet mg ezen kvl korltoz tnyezknt a vlaszadsi id is. Tl sok sszefggst figyelembevev, flslegesen rszletezett adatbzisban ez olyan nagy lehet, hogy a

3-3

gyakorlatban mr semmit sem r a tkletes pontossg informci. Mire megkapjuk, mr elavult. Figyelembe kell vennnk a modell kialaktsnl azt is, hogy csak az aktulis adatokra van-e szksgnk, vagy rendszeresen nyomon kell kvetnnk azok idbeli vltozsait is. Annak ellenre, hogy a fejezet elejn ennek ellenkezjt lltottuk, egy j adatmodell felptsnl az ltalnos elvi szempontok mellett gondolnunk kell arra is, hogy vgl miknt fogjk hasznlni az adatbzist, hogy az adatmodellel egy hatkonyan mkdtethet adatbzist lehessen felpteni. 3.4. Egyedtpusok s tulajdonsgok Ahhoz, hogy az adatbzisbl informcikat nyerhessnk, egyrtelmen meg kell hatroznunk azt, ahonnan ezt megkaphatjuk. Ez hrom dolgot jelent: Megklnbztetnk alapadatokat szolgltat egyedtpusokat, ms nven entitsokat. Az egyedtpus a vals vilg olyan elemeinek az sszessge, melyek valamilyen kzs tulajdonsggal, vagy tulajdonsgokkal, jellemzkkel rendelkeznek.1 Az egyedtpus meghatrozsa azt jelenti, hogy meghatrozzuk, szemlyekrl, egyetemi hallgatkrl, gpjrmvekrl, vagy knyvekrl van-e sz. A modellben minden egyedtpusra egy a tartalmra utal egyrtelm nvvel hivatkozunk. (Pl. SZEMLY, HALLGAT, GPJRM, JRM, KNYV, OLVASNI_VAL). A gyakorlatban erre egyes szm alanyesetben ll fneveket hasznlunk. Minden egyedtpusoknak r jellemz tulajdonsgai, ms szval kifejezve attribtumai vannak. Az adott alkalmazstl fgg, hogy ezekbl miket vesznk be az adatmodellbe. Egy egyetemi szemlyi nyilvntartsba a SZEMLY tulajdonsgai kztt valsznleg nem fog szerepelni sem a testslya, sem a magassga. Ugyanezek az attribtumok viszont nyilvnvalan szksgesek a krzeti orvos adatbzisban lv SZEMLY egyedtpusban. Minden egyedtpus attribtumokbl tevdik ssze. Az attribtumok az egyedtpusoknak azok a jellemzi, melyeknek rtkei szksgesek ahhoz, hogy az egyedtpusrl a kvnt informcikat megkaphassuk. klszably! Azt, hogy mik lehetnek els kiindulsknt az entitsaink s azok tulajdonsgai, gy kaphatjuk meg, hogy vgigolvassuk a feladat lerst s kivlasztjuk azokbl a fneveket. Ebbl ltalban jzan paraszti sszel kiderl, melyik hov soroland. A szn pldul egy gpjrm nyilvntartsban a GPJRM entits egy tulajdonsga lesz, mg egy festkgyrban, ahol a klnbz szn festkek komponenseit adjuk meg, ott SZN egy egyedtpus lesz, melynek attribtumai a kikevershez szksges sszetevk neve s arnya lesz. A modellben a tulajdonsgokra is egy tartalmukra jellemz rvid nvvel hivatkozunk. Ha ugyanaz a tulajdonsg tbb entitsban is szerepel, pldul a gpkocsi rendszma (RENDSZM) tulajdonsga a gpjrmveket nyilvntart GPJRM, s a szablytalankod gpkocsikrl vezetett SZABLYSRTS entitsnak is, akkor mindentt ugyangy hvjuk, s ha nem egyrtelm, akkor adjuk meg, hogy ppen melyik entits tulajdonsgrl beszlnk. Klnbsget kell tennnk az egyedtpus s annak konkrt elfordulsai kztt. Egy elforduls az egyedtpus konkrt tulajdonsgrtkekkel trolt/troland realizlsa az adatbzisban. Minden egyedtpusnak nulltl (elvileg) vgtelen sok elfordulsa lehet az adatbzisban. A fels hatrt az egyedtpus szmra kijellt
Mint azt a 4. fejezetben ltni fogjuk, a relcis modellben a vals letben meglv egyedtpusok mellett a kztk fennll kapcsolatokat is egyedtpusknt brzolhatjuk.
1

3-4

trol terlet szabja meg. Az egyedtpus s az egyedtpus elfordulsai kzti klnbsget a 3.1 brn lthatjuk. A SZEMLY egyedtpus egyszer szerepel az adatbzisban. Defincijt, nevt, tulajdonsgait adatokat definil metaadatknt az adatbzis katalgusban (ld. 7. fejezet) troljuk. Az elfordulsai, az egyes szemlyek adatai a relcis adatbzisban a SZEMLY tblzat egyes sorai.

3.1. bra:

Egyedtpus s egyed elforduls kzti klnbsg.

Vgl azt is meg kell hatroznunk, hogy egy egyedtpus melyik elfordulsval kvnunk dolgozni. Ehhez minden egyedtpushoz hozzrendelnk egy azonostt. Az egyedtpusnak azt a tulajdonsgt vagy tulajdonsg kombincijt, amelyik egyrtelmen meghatrozza az egyed elfordulst, azaz az egyedtpus minden elfordulsra klnbz rtket vesz fel, nevezzk az egyedtpus azonostjnak. Viszonylag ritkn fordul el, hogy egy egyedtpusnak van egy olyan termszetes tulajdonsga, amely brmely elemt egyrtelmen tudja azonostani. Ha van, akkor clszer ezt azonostsra hasznlni. Ha nincs, akkor vagy egy mestersges azonostt vezetnk be (Pl. Adszm, TAJ szm, Rendszm, br ez utbbit mr szinte termszetes azonostnak rezzk), vagy megprbljuk a tulajdonsgoknak egy olyan kombincijt kialaktani, melyek egyttesen mr egyrtelmen azonostani tudjk az egyedtpus elfordulsait. (Pl. Nv, Anyja neve, Szletsi hely s id a szemlyek azonostsra). Ezzel a krdssel a relcis modellben az elsdleges kulcs meghatrozsnl (ld. 4.4.2. pont) mg bvebben foglalkozunk.

3.5. Kapcsolatok Minden mindennel sszefgg, minden sszefgg valamivel. Ha a fenti elvet az adatmodell kialaktsnl is alkalmazni kvnnnk, akkor a feladatunk megoldsa elg remnytelen lenne. A gyakorlatban sszer kompromisszumot ktnk, hogy az egyedtpusok kztt elkpzelhet, elvileg vgtelen sok kapcsolat kzl melyeket ptjk be a modellnkbe. Az egyes egyedtpusok kztt a kvetkez alapvet kapcsolatok ltezhetnek:

3-5

1.

A kt egyedtpus fggetlen egymstl. Ez a legegyszerbb. Ilyenkor az adatmodellben sem kell kapcsolatot ltesteni kzttk. Fggetlenek lehetnek pldul a hallgatk tanulmnyi eredmnyei s a bankszmlk forgalmi adatai. A kt egyedtpus kztt klcsnsen egyrtelm kapcsolat ll fenn. Ezt egy-egy, vagy 1:1 kapcsolatnak nevezzk. Ilyen kapcsolat ll fenn magyar llampolgroknl a TAJ szmhoz, vagy a szemlyi szmhoz vagy az adszmhoz tartoz szemlyes adatok kztt1. Ugyancsak egyrtelm a kapcsolat egy jl tervezett vllalati vagy oktatsi modellben a rszlegek illetve tantrgyak megnevezse s kdja kztt. Az els egyedtpus brmely elfordulshoz a msik egyedtpus tbb, tetszsszerinti szm elfordulsa (ebbe a zrus is belertend) tartozhat, mg a msodiknak brmelyik elfordulsa egyrtelmen meghatrozza, hogy az elsbl melyik kapcsoldik hozz. Ezt nevezzk egy-tbb vagy 1:N kapcsolatnak. Tipikus plda erre a szlanya s a gyerekei kzti kapcsolat. Egy anynak akrhny gyereke lehet, mg brmely gyereknek csak egy anyja van. Ezek a kapcsolatok egymsra is plhetnek. A lny gyerekeknek is lehetnek tovbbi gyerekei (lnyai), akiknek ismt lehetnek gyerekei. Ezt a kapcsolat lncot nevezik hierarchinak. Az els egyedtpus brmely elfordulshoz a msik egyedtpus tbb elfordulsa (ebbe a zrus is belertend) tartozhat, s a msodik brmely elfordulshoz is az elsnek tbb elfordulsa kapcsoldhat. Ezt nevezzk tbb-tbb vagy N:M kapcsolatnak. Ez a legltalnosabb kapcsolattpus. Ez jellemzi egy emancipldott trsadalomban a frfiak s a nk viszonyt. Egy frfi tbb bartnt is tarthat, s egy nnek is tbb bartja lehet2. Tovbbi plda egy oktatsi adatmodellben a hallgatk s a tantrgyak kapcsolata. Egy hallgat tbb tantrgyat is felvesz, s egy tantrgyat tbben hallgathatnak. A tbb-tbb kapcsolattal az adatbzis-kezel rendszerek kzvetlenl nem tudnak dolgozni. Ezrt ezeket a megvalsts alapjul szolgl vgleges modellben fel kell bontanunk egy-tbb kapcsolatokra3. Ennek algoritmust a 3.7. alfejezetben mutatjuk be.

2.

3.

4.

Az egyes kapcsolattpusokat a 3.2. brn mutatjuk be. 3.6. Egyedtpus kapcsolat (Entity Relationship) diagram Az egyedtpus kapcsolat (Entity Relationship) modell egy szervezet vagy egy alkalmazsi terlet adatainak rszletezett logikai lersa. A modellt rendszerint grafikus formban, az egyedtpus kapcsolat, vagy a magyarban is elfogadott angol nevn Entity Relationship diagramban jelentjk meg. A diagramban alkalmazott jellsek esetenknt eltrek lehetnek. Mi az egyik leggyakrabban hasznlt formt hasznljuk. Ebben az
Ezt tovbb finomthatnnk. TAJ- s szemlyi szma mindenkinek van, gy ezek kztt a kapcsolat mindig, mindenkppen fennll. Adszma viszont nincs mindenkinek. Ezrt az ezzel megvalstott kapcsolat csak akkor rvnyes, ha ltezik adszm. 2 Tovbb finomthatnnk a kapcsolattpusokat az egyedtpuson belli kapcsolatokkal is. Ha a frfiak s a nk egyedtpusok helyett csak egy egyedtpussal, a szemllyel dolgoznnk, akkor e fenti kapcsolatok ugyanazon egyedtpus elemei kztt llnnak fenn. Ilyen mdon modellnkkel tudnnk kezelni a hetero- s a homoszexulis kapcsolatokat is. 3 Egyes adatbzis tervez eszkzkben megadhatunk tbb tbb kapcsolatokat is, s ezeket a tervez szoftver bontja szt egy tbb kapcsolatokra.
1

3-6

entitsokat vzszintesen ll tglalapokkal, az attribtumokat ellipszisekkel, az entitsokat sszekt kapcsolatokat vonallal (s esetleg kzjk elhelyezett cscsra lltott romboiddal) jelljk.

3.2. bra:

Kapcsolattpusok. a.) 1:1, b.) 1:N, c.) N:M kapcsolat.

Ha egy tulajdonsg tbb rtket is felvehet az adott entits egy elfordulsban, akkor ketts ellipszissel brzoljuk. Az entitsok nevt ltalban nagy betkkel, a tulajdonsgokt s a kapcsolatokt nagy kezdbetvel s kis betkkel a megfelel idomba rjuk. Az azonost

3-7

tulajdonsg nevt vastagtva vagy alhzva adjuk meg1. Az ttekinthetsg kedvrt a tulajdonsgokat gyakran nem tntetjk fel az brn, hanem egyedtpusonknt kln adjuk meg egy-egy nll tblban. Ugyancsak elhagyhatjuk a kapcsolatok romboidjait, s a kapcsolat nevt az sszekt vonalra rjuk. A kapcsolatok tbb-rtk oldaln a vonalat hrom gra bontjuk. Lehetsges mg a kapcsolatok ktelez vagy opcionlis voltra is utalni.2 A klnbz jellseket a 3.3. brn foglaltuk ssze.

3.3. bra:

Az Entity Relationship modell szoksos jellsei.

A 3.4. brn egy keresked cg beszerzseinek s megrendelseinek nagymrtkben leegyszerstett Entity Relationship diagramjt ltjuk. Nhny megjegyzs a diagramhoz: A modellnek a szlltsokat illetve a megrendelseket tartalmaz rszt szndkosan brzoltuk klnbz mdon. A szlltsoknl feloldottuk a SZLLIT s RU kzti N:M kapcsolatot, mg a megrendelseknl ezt meghagytuk.3
Ezt a konvencit csak az adatmodelleknl alkalmazzuk konzekvensen. Az SQL utastsokban tetszs szerint hasznlhatunk kis- s nagybetket a klnbz nevekben. Az adatbzis katalgusban pedig minden nv nagybetsen szerepel. 2 Ktelez kapcsolatnl mindenkppen kell legalbb egy egyednek ltezni a kapcsolat ktelezknt megadott oldaln (Pl. minden szllts-ttelhez kell egy runak kapcsoldni), mg opcionlisnl ez nem ll fenn (nem minden ruhoz ltezik megrendels). 3 Termszetesen, ha itt nem tettk meg, akkor ksbb, az adatbzis ltrehozsra is alkalmas relcis modell elksztsekor kell talaktanunk az N:M kapcsolatot. (ld. az Ellenrz krdsek 4. feladatt)
1

3-8

Feltteleztk, hogy minden runak mindenhonnan ugyanaz a beszerzsi, s mindenhova ugyanaz az eladsi ra. Az els, nem igazn letszer felttel elhagysra oldjuk meg a 3.8. alfejezet 5. feladatt. A szlltlevlben ktelez egy szlltt s legalbb egy szlltand ttelt megadni.

3.4. bra:

Egy keresked cg beszerzseinek s szlltsainak nagy mrtkben leegyszerstett Entity Relationship diagramja.

Nem minden rura van megrendelsnk s lehet olyan is, amelyikre nem krtnk szlltst. (Pl. korbbi kszletbl megmaradt). A rendelst mindig egy vev adja fel, s legalbb egy rut meg kell benne rendelnie. Lehetnek olyan vevk, akik mg egy rendelst sem adtak fel. (Potencilis vevknt nyilvntartjuk ket). 3-9

A VEV s az RU kztti msodik kapcsolatot, amelyik a vev ltal megrendelt ruk leszlltst rja le, nem vettk be az adatmodellbe. (ld. az Ellenrz krdsek 7. feladatt.) Nmi inkonzisztencia van az elnevezsekben, de mr nem akarunk/tudunk tovbbi mdostsokat vgrehajtani. (Ez mg gyakorlott adatbzis tervezknl is elfordulhat). Az egyedtpus meghatroz tulajdonsgt hol azonostnak (Pl. Szazonost), hol kdnak (Pl. Vevkd) nevezzk. Ez azonban, miutn mindig tudjuk, mirl van sz, soha semmifle problmt nem fog okozni. Ezrt nem trdnk vele. A szllt s a vev cmre ms neveket adtunk meg (szcm, vcm), de a cm rszletes felbontsban ugyanazokat az elnevezseket (Vros, Utca, ) hasznljuk. Az adatbzissal val munkban ez nem okoz problmt, mert az adatbzis-kezel rendszer (az SQL nyelv szablyai szerint) rknyszert bennnket, hogy tegyk egyrtelmv, melyik cm-komponenssel dolgozunk. A modellrl val trgyalsoknl azonban esetleg flrertst okozhat. Remljk, nem fog elfordulni. Ha mgis, pontostunk a szhasznlatban. A vev rszletezett cmnl nem adtunk meg orszgot, mert csak belfldre szlltunk. Amennyiben ez megvltozna, akkor az adatmodellt mdostjuk.

3.7. Plda adatmodell ltrehozsra A fentiek megrtsre s gyakorlsra ltrehozzuk egy nagymrtkben leegyszerstett egyetemi nyilvntarts adatmodelljt. Ezen az adatmodell megalkotsnak sszes fontos lpst be tudjuk mutatni. A modellnek a valsgot jobban figyelembe vev bvtst az Ellenrz krdsek 1. feladata alapjn az olvasra bzzuk. Els lpsnk a modell egyedtpusainak, entitsainak meghatrozsa lesz. Nem kell tl nagy kpzeler ahhoz, hogy els kzeltsben ezek az albbiak lesznek: hallgatk tantrgyak oktatk tantermek tanknyvek tanszkek Feladatunkat korltozzuk, hogy a modellben csak a hallgatkkal s a tantrgyakkal trdnk. E kt egyedtpus kztt tbb-tbb kapcsolat ll fenn. Egy tantrgyat tbben, akrhnyan hallgathatnak, s egy hallgat tbb, elvileg akrhny tantrgyat felvehet. Az ezt ler adatmodell a 3.5. brn lthat.

3.5. bra: 1.

Leegyszerstett egyetemi adatmodell els vltozata.

Innentl kezdve kt mdon mehetnk tovbb. Rrznk, hogy a HALLGAT s a TANTRGY kztt gy tudunk kapcsolatot ltrehozni, hogy beiktatunk egy j entitst, ami azt tartalmazza, hogy melyik hallgat milyen krlmnyekkel, milyen tantrgyakat vett fel. Ennek a MITHALLGAT entitsnak az elfordulsai tartalmazzk egy hallgatnak egy tantrggyal kapcsolatos adatait. Az gy kapott adatmodellt a 3.6. brn lthatjuk.

3-10

3.6. bra:

Leegyszerstett egyetemi adatmodell vgs vltozata.

Vgl meghatrozzuk az egyes egyedtpusok attribtumait (tulajdonsgait) s azonostjukat. Erre ismt tbb lehetsgnk van. Az egyik vglet az, hogy minden egyedtpusnl minden hozzkapcsolhat tulajdonsgot felsorolunk. Ez entitsonknt a kvetkez attribtumokat s elnevezseket (zrjelben megadva) jelenti1: HALLGAT (els verzi) Hallgat-azonostja (mestersges, ez azonostja az egyedtpus elfordulsait) (HID), Hallgat vezetkneve (HVNV), Hallgat keresztneve (HKNV), Hallgat vfolyama (HVF), Hallgat szletsi dtuma (HSZDTUM), Minden egyes felvett tantrgynak a tantrgyra jellemz adatai (TANTRGY els verzija szerint) TANTRGY (els verzi) Tantrgy azonostja (mestersges, ez azonostja az egyedtpus elfordulsait) (TID), Tantrgy megnevezse (TMEGNEV), Tantrgy oktatinak adatai (ONV), Tantrgy raszma (RASZM), Vizsgaktelezettsg (VIZSGA), Minden egyes, a tantrgyat felvett hallgatnak a szemlyi adatai (HALLGAT els verzija szerint) MITHALLGAT (els verzi) A hallgatt s a tantrgyat sszekapcsol azonost (mestersges) (MHID), Tantrgy jellemz adatai (TANTRGY els verzija szerint), Minden egyes, a tantrgyat felvett hallgat szemlyes adatai (HALLGAT els verzija szerint), Az egyes hallgatknak a tantrggyal kapcsolatos adatai: Hallgat gyakorlatokon elrt pontszma a tantrgybl (GYAKPONT), Hallgat osztlyzata a tantrgybl (OSZTLYZAT), Tantrgy felvtelnek flve (FLV), Vizsga idpontja VIZSGA) Br a modell ezekkel az egyedtpus-defincikkal elvileg mr hasznlhat, gyakorlatilag nagyon rossznak bizonyulna. Ennek ellenre, ha tovbb finomtannk a 4.6.
1

A modellnk egyszerstse miatt a szemlyi adatokbl, s a tantrgy jellemzkbl csak a felsoroltakra lesz szksgnk.

3-11

alfejezetben ismertetett normalizlsi eljrssal, vgl ugyanarra az eredmnyre jutnnk, mint amit a b.) eljrssal kapunk, amikor minden egyedtpusba csak azokat az attribtumokat vesszk be, melyek kizrlag az egyedtpus azonostjtl fggenek s az egyedtpusoknak az gy kapott els vltozatt javtjuk normalizlssal. HALLGAT Hallgat-azonostja (mestersges, ez azonostja az egyedtpus elfordulsait) (HID), Hallgat vezetkneve (HVNV), Hallgat keresztneve (HKNV), Hallgat vfolyama (VF), Hallgat szletsi dtuma (HSZDTUM) TANTRGY Tantrgy azonostja (mestersges, ez azonostja az egyedtpus elfordulsait) (TID), Tantrgy megnevezse (TMEGNEV), Tantrgy oktatinak adatai (ld. pontostst lejjebb), Tantrgy raszma (RASZM), Vizsga ktelezettsg (VIZSGA) MITHALLGAT (msodik verzi) A hallgatt s a tantrgyat sszekapcsol azonost (mestersges) (MHTID), Hallgat azonostja (HID), Tantrgy azonostja (TID), Hallgat gyakorlatokon elrt pontszma a tantrgybl (GYAKPONT), Hallgat osztlyzata a tantrgybl (OSZTLYZAT), Tantrgy felvtelnek flve (FLV) Vizsga idpontja (VDTUM) Tovbb egyszerstjk a modellnket. Egy hallgat egy tantrgyat csak egyszer vehet fel. Az ezzel kapcsolatos adatokbl csak a legutols, az aktulis rtke rdekel bennnket. Ezrt MITHALLGAT msodik verzijban flsleges a vizsga idpontja s a flv. A hallgat s a tantrgy azonostja egyrtelmen azonostja a kett kzti kapcsolatot, gy erre sem kell egy j, mestersges azonostt bevezetnnk. Ezek figyelembevtelvel kialakul az egyedtpus vgleges szerkezete. MITHALLGAT Hallgat azonostja (a tantrgy azonostjval egytt azonostja az egyedeket) (HID), Tantrgy azonostja (TID), Hallgat pontszma a tantrgybl (GYAKPONT), Hallgat osztlyzata a tantrgybl (OSZTLYZAT)

3-12

A tantrgy oktati kzl csak egynek, a tantrgyrt felels oktatnak a nevt vesszk fel az adatmodellbe. Ezrt tantrgyban az oktatk adatai helyett a felels oktat neve attribtumot vesszk fel ONV elnevezssel.

Modellnket termszetesen kialakthatjuk az entitsok els verzijnak ms, a kt vglet kzti definilsval is. Akrmelyik formjbl is indulunk ki, a gyakorlatban gyis relcis adatbzist hozunk majd ltre. Ehhez az itt lertak alapjn kialaktott adatmodellt, ha szksges, tovbb mdostjuk a 4. fejezetben rszletesen trgyalt mdon, hogy megfeleljen a relcis modell kvetelmnyeinek is. 2. A 3.5. brbl kiindulva, ltrehozzuk a HALLGATO s a TANTRGY entitsokat gy, hogy mindketthz hozzrjuk az sszes hozzkapcsolhat attribtumot. Ezzel az a.) mdszer HALLGATO s TANTRGY els verzijaknt definilt egyedtpusokat kapjuk. Ezekbl a 4.6. alfejezetben lert normalizlsi eljrssal alaktjuk ki a vgleges adatmodellt. 3.8. Ellenrz krdsek 1. Bvtsk ki a 3.7. alfejezet adatmodelljt Az oktatk szemlyi adataival. Egy oktat tbb tantrgyat is oktathat s tbb tantrgynak is lehet a felelse. A tanszkekkel. Egy oktat csak egy tanszkhez tartozhat, s minden tantrgyrt egy tanszk felels. A tantermek jellemzivel. A modell tartalmazza azt is, hogy melyik tantrgyat melyik teremben s mikor tantjk. A tanknyvek lersval. A modell tartalmazza azt is, hogy melyik tantrgyat milyen knyvekbl tantanak. Egsztsk ki a modellt, hogy nyomon tudjuk kvetni a hallgatk eredmnyeit, ha egy trgybl tbbszr vizsgztak, s ha egy trgyat tbbszr vettek fel. ptsk fel egy egyszerstett gpkocsi-nyilvntarts adatmodelljt! Ksztsk el adatmodelljt! egy egyszerstett anyaknyvi-hivatal hzassg-nyilvntartsnak

2. 3. 4.

Bontsuk fel a 3.4. brn lthat adatmodellben az RU s a RENDELS kzti N:M kapcsolatot! Szntessk meg RENDELS-ben a megrendelt ruk lersra szolgl Rru tulajdonsg tbbrtksgt! Vegyk be a 3.4. brn lthat adatmodellbe, hogy ugyanazt az rut klnbz szlltktl eltr rakon szerezhetjk be! Egsztsk ki a 3.4. brn lthat adatmodellt, hogy az rak idbeli vltozst is nyomon tudjuk kvetni! Egsztsk ki a 3.4. brn lthat adatmodellt a megrendelt ruk leszlltsval gy, hogy a.) b.) minden megrendelst egyben szlltanak le, az egyes megrendelseket tbb rszletben is leszllthatjk.

5. 6. 7.

3-13

4. RELCIS ADATBZIS-KEZEL RENDSZEREK


A relcis modellben az adatokat s a kztk lv kapcsolatokat relcikban, szemlletesen tekintve tblzatokban, tblkban1 brzoljuk. Ezekbl a feladatok megoldshoz szksges adatokat a relcis mveletek segtsgvel kapjuk meg. A tblkban trtn brzolsmd kvetkeztben ez a modell ll legkzelebb az tlagos felhasznli szemllethez. Ezrt, a korbbi adatmodellektl eltren, lnyegnek megrtshez nem szksgesek klnleges matematikai ismeretek. Hasznlata knnyen megtanulhat. Ugyanakkor elssorban Codd alapvet munki kvetkeztben ennek a modellnek dolgoztk ki az elmleti alapjait a legrszletesebben s a legpontosabban. Tovbbi elny mg, hogy a fizikai s a logikai adatfggetlensg elvileg tkletesen megvalsthat, a modell lehetsget nyjt az adatok integritsnak biztostsra s a konkrt feladatok ismeretben a hatkony feldolgozst elsegt adatszerkezetek kialaktsra is. Ezen elnyk kvetkeztben napjaink adatbzis-kezel rendszerei szinte kizrlag a relcis modellen alapulnak.2 Elterjedskhz nagymrtkben hozzjrult az is, hogy gyakorlati alkalmazsukra a 80-as vektl egy egysges, szabvnyostott nyelv, az SQL ll rendelkezsre, melyet az 5. fejezetben ismertetnk rszletesen. 4.1. A relcik tulajdonsgai Matematikailag tekintve a relcis modell kt-dimenzis, egymssal kapcsolatban ll, specilis tulajdonsgokkal rendelkez tblkbl ll. Ezek a relcik rjk le a vals vilg klnbz egyedtpusait, entitsait, st sok esetben a kztk lv kapcsolatokat is. A relcik tartalma felel meg a vals vilg klnbz egyedeinek, s klnbz tulajdonsgaik rtkeinek. A relci legfontosabb jellemzje a relci neve. Ez kapcsolja ssze a vals vilg valamely entitsval. Minden relci oszlopokbl s sorokbl ll. A sorok jellemzik az adott relcival brzolt egyedtpusok elfordulsait, konkrt egyedeit, az oszlopok az elemek egyes attribtumait, tulajdonsgait. Az oszlopok nevei, a tbla (kpzeletbeli) fejlce hatrozza meg a tulajdonsg nevt, adott sorban lv rtke pedig az azzal a sorral brzolt egyed adott tulajdonsgnak rtkt. Ahhoz, hogy ezek a tblk valban relcis adatbzist alkossanak, az egyes tblkra a kvetkez feltteleknek kell teljeslnie: Minden relcinak van egy neve, amelyik azt egyrtelmen azonostja az adatmodellben (s ezltal az adatbzisban is). Jl tervezett adatbzisban ez megegyezik az ltala reprezentlt egyedtpus elnevezsvel, vagy utal arra3. Egy adott relci minden sorban azonos szm oszlop van. Az oszlopok szmt nevezik a relci foknak, vagy fokszmnak. Minden oszlopnak az adott relcin bell egyrtelm neve van. Brmely oszlop a relcin bell ezzel a nvvel, az adatmodellben mivel ugyanaz az oszlopnv tbb relciban is elfordulhat a relci s az oszlop nevvel egyttesen azonosthat egyrtelmen. A jl tervezett adatbzisban az oszlop neve megegyezik az ltala reprezentlt tulajdonsg elnevezsvel, vagy utal r.
Mivel a relcis modell alkalmazsnl az SQL nyelvben a tblzatnak (TABLE) specilis jelentse van, ezrt az ltalnos relci szinonimjaknt ebben a rszben a tbla kifejezst fogjuk hasznlni. 2 jabban megjelentek az objektum-orientlt relcis adatbzis-kezel rendszerek is, melyek azonban alapjukban a relcis rendszerek kiterjesztsnek tekinthetk. 3 Ezt a konvencit alkalmazzuk majd a 4.2 pontban bemutatott minta adatmodellben s a tbbi pldnkban is mind a relcik, mind az oszlopok nevre.
1

4-1

Minden oszlop csak meghatrozott rtkeket vehet fel (ez lehet egy folytonos tartomnybl is). Ezen rtkek sszessgt, az rtkkszletet nevezzk az adott oszlophoz tartoz attribtum-rtkek tartomnynak, domainnak. A tartomny a modell szempontjbl mindig azonos tpus elemi adatokat tartalmaz. Ezt nevezzk az oszlop adattpusnak. Ez mindig alkalmazsfgg. A relcis adatmodellben leggyakrabban hasznlt alapvet adattpusok karakter, szm, dtum/id. Ezeket, s ezek tovbbi bontst az 5.4. alfejezetben, az SQL nyelv segtsgvel trtn meghatrozsuknl ismertetjk rszletesen. Az adattpus kivlasztsnl a legfbb szempontok: trolni tudja az sszes elfordul rtket (nem csak akkor, amikor indul a rendszer, hanem az adatok mennyisgnek, hossznak nagymrtk nvekedse utn is), a trolhely minimalizlsa, tegye lehetv az adatok integritsnak az ellenrzst, az adatokkal kapcsolatos sszes mveletet elvgezhessk benne, hasznlatakor ne kelljen konvertlni, vagy ez csak minimlis idt kveteljen. Brmely sorban minden oszlop csak egyetlen rtket vehet fel a megengedett rtkek kzl. Ez azt jelenti, hogy az oszlopok s rtkeik elemiek, nem tartalmazhatnak ismtld mezt. A fentiek alapjn a relci minden sorban minden egyes oszlophoz egy, s pontosan csak egy rtket kell hozzrendelnnk. A gyakorlatban azonban igen sokszor elfordul, hogy bizonyos oszlopoknak az adatrekordnak (sor) az adatbzisba val bevitelekor mg nem ismerjk az rtkt, vagy nincs is rtke, de a rekordot mgis trolni akarjuk (pl. egy szemlyi nyilvntartsban a szemly telefonszma, vagy ideiglenes lakcme). Ennek a problmnak a kikszblsre kt lehetsgnk van. Az oszlopnak automatikus alaprtelmezst (default) adunk, s ha a bevitelkor nem adunk meg explicit rtket, akkor ezt az rtket veszi fel. Bevezetnk egy specilis rtket, a NULL rtket, ami azt jelenti, hogy az oszlop tartalma nem ismert. Ez nem tvesztend ssze a 0 rtkkel, hiszen nem mindegy, hogy valaki nkntesknt 0 forint fizetsrt ingyen dolgozik, vagy mg nem egyeztek meg a djazsban. Mivel a NULL rtk megengedse bizonyos bizonytalansgot jelent, meg kell hatroznunk, mely oszlopok tartalma vehet fel NULL rtket, s melyekben nem engedjk ezt meg (pl. egy szemlyi nyilvntartsban az illet neve). Ha NULL rtket megenged oszlopnak nem adunk konkrt rtket, akkor annak tartalma automatikusan a NULL rtk lesz. Az oszlopok sorrendjnek nincs jelentsge az adatmodellben. De ha egyszer, a tbla fejlcben megadtuk, akkor ezen relcinak minden sorban ennek a sorrendnek megfelelen kell az attribtumok rtkt trolnunk1. Egy relci sorainak szmt nevezzk a relci szmossgnak, vagy kardinalitsnak. Ez az adatbzis hasznlatakor, j adatok bevitelekor, meglvk

A balrl jobbra val olvass s kpernyn val megjelents miatt megszokott, hogy a fontosabb oszlopokat helyezzk balra, elre, a kevsb fontosakat htrbb. Ez azonban csak egy knyelmi elrendezs, melynek a modellt tekintve nincsen tartalmi jelentsge.

4-2

trlsvel dinamikusan vltozik. A sorok sorrendje a relcis modell szempontjbl kzmbs, a relcik sorainak nincsen kitntetett rendezettsge.1 Mivel a relci egyedei a tbla egyes sorai, melyeknek azonostsa a sorok tartalma alapjn trtnik, egy relcinak nem lehet kt teljesen azonos sora, kt olyan sora, melyben pronknt minden oszlop rtke megegyezik. Ez a felttel a vals vilgnak azt a relis megktttsgt tartalmazza, hogy ha kt egyede kztt semmilyen mdon nem tudunk semmifle klnbsget tenni, akkor azokat nem tekintjk klnbznek. Jellemzsk tulajdonsgaik megadsval egyrtelm, s legfeljebb ha szksges j tulajdonsgknt megadhatjuk, hogy hny darab van sszesen bellk. Az elz felttelbl kvetkezik, hogy minden relciban van az oszlopoknak legalbb egy olyan kombincija, amely egyrtelmen azonostja a sort, meghatrozza a sor tovbbi oszlopainak az rtkt. Ezt az oszlopot (oszlop kombincit, vagy ezek egyikt), ami megfelel az ltalnos adatmodellben az egyedtpus azonostjnak, nevezzk elsdleges kulcsnak (Primary Key). Mivel egy relcinak nem lehet kt teljesen egyforma sora, ilyen elsdleges kulcs mindig ltezik. Szlssges esetben a relci sszes oszlopa alkotja. Az elsdleges kulcsok a relcis modellben kulcsszerepet tltenek be, ezrt a 4.4.2. pontban kln is foglalkozunk velk.2

4.2. Plda relcikra A tloldalon, a 4.1. brn bemutatjuk a 3.7. alfejezet kialaktott adatmodell megvalstst a relcis modell alapjn. A modell mellett feltntettk a relcik adatainak egy rszt is. A HALLGAT relcinak feltntettk az egyb jellemzit is. A tbbinl ezt az ttekinthetsg rdekben elhagytuk. Az adatok integritsnak biztostsa rdekben a modellt mg ki kell majd egsztennk a 4.4.3.1. pontban ismertetend idegen kulcsokkal. A hrom egyedtpusnak megfelelen hrom relcink van, HALLGAT, TANTRGY s MITHALLGAT, melyeknek elsdleges kulcsai rendre a hallgat azonost szma, HID, a tantrgy kdja, TID, s a kett egyttesen, (HID,TID)3. A hallgat jellemzi, tulajdonsgai, a HALLGAT relci oszlopai, azok adattpusai s rtktartomnyai: A hallgat vezetkneve, VNV. Vltoz, maximum 20 karakter hosszsg4. A hallgat keresztneve, KNV. Vltoz, maximum 20 karakter hosszsg. Hallgati azonost, HID. Mindig 5 karakter hosszsg. Lehetsges rtkei csak 00001 s 99999 kztt lehetnek. A hallgat szletsnek dtuma, SZDTUM. Dtum tpus vltoz. Lehetsges rtke a mltra s a jvre is gondolva, nagy biztonsgi rhagyssal brmilyen

Gyakorlati szempontbl azonban a sorok fizikai sorrendjnek igen nagy befolysa lehet az adatbzis hatkony mkdsre. Ezzel a fizikai adatszerkezet ismertetsnl, a 2.5 s a 2.7. alfejezetben rszletesen foglalkoztunk. 2 A gyakorlatban nem mindig vesszk figyelembe ezt a felttelt. gy az adatbzisban lehetnek olyan relcik (ltalban ideiglenes, vagy adatokat nem tartalmaz virtulis relcik, ld. 4.3. alfejezet), melyekben lehetnek azonos sorok is. 3 A hrom egyedtpus kzl csak a HALLGAT s a TANTRGY igazn ltez entitsa a vals vilgnak. A MITHALLGAT a kztk lv kapcsolatot hatrozza meg. A relcis modellben azonban az ilyen kapcsolatokat is nll relciknt brzoljuk. 4 A maximlis nvhossz meghatrozsa nknyes. A tervezsnl gy vljk, hogy 20 karakternl hosszabb nevek nem fordulhatnak el. Amennyiben ez hamisnak bizonyul, s hosszabb nevet is be kell vinnnk, akkor az adatbzisnak ezt a relcijt mdostanunk kell (ld. 5.6.2.3. pont 1. pldja). rtktartomnyt nem jellnk ki. Nvknt elvileg brmilyen karaktersorozatot megengednk.

4-3

rvnyes dtum lehet. Ha nem ismerjk, akkor is felvesszk a hallgatt az adatbzisba. Ezrt ebben az oszlopban a NULL rtket is megengedjk. vfolyam, VF. 1 jegy, 1 s 5 kzti egsz szm lehet csak. Alaprtelmezse 1.

4.1. bra:

Hallgati adatbzis relcis modelljnek els formja. A modell mellett feltntettk a relcik adatainak egy rszt is.

Hasonlan, a TANTRGY relci oszlopai, azok adattpusai s rtktartomnyai: A tantrgy azonostkdja, TID. Mindig 4 karakter hossz. A tantrgy megnevezse, TMEGNEV. Vltoz, maximum 20 karakter hosszsg. A tantrgyrt felels oktat neve, OKTAT. Vltoz, maximum 20 karakter hosszsg. Nem ktelez megadni.

4-4

A tantrgy heti raszma, RASZM. 1 jegy, 0 s 9 kzti egsz szm lehet csak, de NULL rtket is felvehet. Ktelez-e belle a vizsga, VIZSGA. rtke csak I (igen), vagy N (nem) lehet. Alaprtelmezse I. A MITHALLGAT relci defincija: A tantrgyat felvett hallgat azonostja, HID. Mindig 5 karakter hosszsg, s csak ltez hallgat azonostja lehet1. A hallgat ltal felvett tantrgy kdja, TID. Mindig 4 karakter hosszsg, s csak ltez tantrgy kdja lehet1. A hallgat ltal a tantrgybl a gyakorlatokon elrt pontok szma, GYAKPONT. 0 s 100 kzti, maximum hromjegy szm lehet. Alaprtelmezse 0. A hallgatnak a tantrgybl kapott osztlyzata, OSZTLYZAT. 1 s 5 kztti egy jegy szm lehet csak. A NULL rtket is megengedjk, hiszen v elejn, amikor a hallgat felveszi a tantrgyat, akkor mg nem ismerjk az rtkt.2 Az gy definilt adatmodellnek a tnyleges realizlst az 5.14. tblzat:. pontban mutatjuk be. Amennyiben a hasznlat folyamn kiderl, hogy adatmodellnk nem megfelelen rja le a valsgot, akkor a modellt mdostjuk. Amennyiben az adatbzisban mr bennlv adatok megfelelnek az j modell feltteleinek, akkor a mdostsokat ltalban minden nehzsg nlkl vgrehajthatjuk a fizikailag realizlt adatbzisban is az erre szolgl ALTER tpus SQL utastsokkal (ld. 5.6.2.3. pont). 4.3. Relcik az adatbzisban Az eddigiekben hallgatlagosan feltteleztk, hogy a relcis modellnek a relcikban lv adatait ugyanabban a formban, tblaknt, fizikailag troljuk az adatbzisban. Amennyiben ez mindig gy lenne, akkor az adatbzis-kezel rendszerek egyik legfontosabb elnyt, a redundancia mentessget vesztennk el, hiszen minden elemi adatot (oszlop rtket) annyiszor trolnnk, ahny sorban, illetve relciban ugyanaz az adat elfordul. Ennek elkerlsre a relcis modell lehetsget nyjt a fizikailag tnylegesen trolt relcikbl tovbbi, virtulis relcik ellltsra. Fizikailag az adatoknak tnylegesen csak a minimlis mennyisgt troljuk redundancia mentesen. A feldolgozshoz valban szksges relcikat ezekbl lltja el a rendszer az ltalunk definilt mdon. Az adatbzisban leggyakrabban elfordul relcitpusok a kvetkezk: tblzat (Table), nzet (View), materializlt nzet (Materialized View) pillanatfelvtel (Snapshot) ideiglenes relci, mely lehet kzbens tblzat lekrdezs eredmnye. A tblzat (Table, alap, vagy bzis relci) fizikailag is tnylegesen tartalmazza az sszes adatot a relci defincijnak megfelel formban. A tblzatok sszessge adja az adatbzis koncepcionlis szintjnek (ld. 1.2.2.3. pont) az alapjt.
1 2

Ezt a felttelt a 4.4.3.1. pontban ismertetett idegen kulcs segtsgvel biztostjuk majd. A leend alkalmazst ismerve szndkosan tettnk klnbsget a GYAKPONT s az OSZTLYZAT kztt a NULL rtk tekintetben. GYAKPONT alaprtelmezse azrt 0, mert a tanv folyamn kapott pontokat mindig hozzadjuk majd az addig elrt pontszmhoz. Ha ez a kezdetkor a NULL rtk volna, akkor ezt az els pontszm bersakor nem tehetnnk meg. NULL rtk + brmi ismt NULL rtk lesz.

4-5

A nzet (View, virtulis relci) a felhasznl, vagy az adatbzis-felgyel ltal definilt relci, amelyik fizikailag nem tartalmaz adatokat. Definilsakor hatrozzuk meg, hogy milyen tblzatokbl, vagy azokra pl nzetekbl, azok mely soraibl s oszlopaibl, milyen felttelek alapjn s milyen mveletek segtsgvel szedje ssze az adatbzis-kezel rendszer a nzet adatait. Ezekkel a nzetekkel lekrdezskor mindig, mdostskor, berskor, trlskor azonban bizonyos esetekben csak korltozsokkal dolgozhatunk ugyangy, mint az adatokat fizikailag tartalmaz tblzatokkal. A nzet hasznlatakor mindig a nzet alapjul szolgl tblzatok aktulis rtkeivel dolgozunk, azokat ltjuk, azokat vltoztatjuk meg1. A nzetek lnyegben az adatbzis klnbz kls szintjeit (ld. 1.2.2.2. pont) vagy azoknak egy rszt jelentik meg. A nzet adatait az adatbzis-kezel rendszer az alaptblzatok aktulis adataibl a nzethez val fordulskor minden egyes alkalommal kiszmolja. Ez idnknt, ha pldul a nzet oszlopai egy nagyon sok sort tartalmaz tblzat oszlopainak tlagt, sszegt tartalmazzk igen hosszadalmas lehet. Ha az alap-tblzatok adatai ritkn vltoznak, akkor a nzet adatait elg egyszer kiszmolni, azt trolni, s ezzel a trolt rtkkel dolgozni mindaddig, amg valamelyik alaptblzat nem mdosul. Ekkor a nzet adatait jraszmoljuk, s a tovbbiakban ezt troljuk. Az gy definilt, trolt, s csak a vltozskor aktualizlt nzetet nevezik materializlt nzetnek (Materialized View). A pillanatfelvtel (Snapshot) adott tblzat(ok), nzet(ek) pillanatnyi llapott tartalmazza fizikailag is trolt formban. Rendszerint csak olvashat. Az adatbzis biztonsga, az adatok helyrelltsa rdekben hozzk ltre meghatrozott idintervallumokban, vagy feladatok elvgzse utn. Bonyolultabb feladatok megoldshoz a rendszernek ideiglenesen trolni kell kzbens eredmnyeket is. (Pldul a kivlasztott sorokat ms szempont szerint kell rendezni, vagy ki kell szrni bellk az azonosakat). Az gy ltrehozott kzbens tblzatok lehetnek valdi, fizikailag is trolt tblzatok, de hivatkozhatnak csak pointerekkel a tnylegesen trolt adatokra. Ezek a felhasznl szmra nem hozzfrhetek. Csupn addig lteznek az adatbzisban, amg a felhasznl ltal krt mvelet vgrehajtshoz szksg van rjuk. Utna automatikusan trldnek. A lekrdezsek eredmnye igen gyakran tbb sor lesz. Ezeket is relcinak tekinthetjk, br rendszerint nincs nll nevk, tartalmazhatnak azonos sorokat, s csak addig lnek, amg a kapott informci feldolgozsra nem kerl. 4.4. Kulcsok 4.4.1. Az adatbzis integritsa Az adatbzisba bevitt s trolt adatok helyessgnek ellenrzsre, az adatbzis integritsnak automatikus biztostsra a kvetkez lehetsgeink vannak: Relcik egyes oszlopaira vonatkoz ellenrzs: Megfelel adattpus deklarlsa. Az oszlopba csak a deklarcinak megfelel adat vihet be. gy pldul DTUM-knt definilt oszlopba csak rvnyes dtum, NUMERIKUS-ba csak szm vihet be, KARAKTER-be nem adhat meg az oszlop hossznl tbb karakter, stb. (ld. 5.4. alfejezet). Alaprtelmezst definilunk. Egyszersti az adatbevitelt s biztostja, hogy az oszlopnak mindig legyen rtke.

Nem lehet vltoztatni pldul egy nzetnek azt az oszlopt, melyet egy tblzat a s b oszlopnak sszegeknt definiltunk, mert ebbl nem lehet megllaptani, miknt kellene az a s/vagy a b oszlop rtkt megvltoztatni, hogy az sszegk rtke tovbbra is az j oszlop rtkvel legyen egyenl.

4-6

NULL rtk tiltsa vagy megengedse egy oszlopban. Szablyozza, hogy hinyos sor bevihet-e. Ellenrz algoritmus hasznlata. A legtbb esetben ez az rtktartomny ellenrzst jelenti (az oszlopba csak a megadott rtkhatrok kz es adatok vihetk be, pl. 1 <= OSZTLYZAT <= 5), vagy egyszer rtk ellenrzst. (az oszlopba csak a megadott rtkek vihetk be, pl. VIZSGA rke csak az I vagy az N rtkek valamelyikt veheti fel.) Tblzatokra vonatkoz ellenrzs: Elsdleges kulcs definilsa. Ez biztostja egy relci sorainak azonosthatsgt, a sorok egyedisgt. Elsdleges kulccsal rendelkez relciknak nem lehet kt azonos sora. Idegen kulcs(ok) definilsa. Ezek segtsgvel a rendszer automatikusan ellenrizni tudja, hogy klnbz relcik azonos attribtumaira pl adatai kztt ne lehessen ellentmonds. (Pl. a MITHALLGAT relciban egy hallgat se vehessen fel nem ltez tantrgyat, ne lehessen benn olyan TID, amelyiknek rtke nem szerepel TANTRGY azonos oszlopban.) Nzetek ellenrzse A nzeten keresztl csak olyan adatok vihetk be az alaptblzatokba, amelyek megfelelnek a nzet defincijnak. A fenti integrits ellenrzseket ltalban kombinltan hasznljuk. Megadsukkal biztostjuk, hogy az adatbzisba semmikppen ne lehessen olyan adatokat bevinni, amelyek ezeknek a feltteleknek nem tesznek eleget. 4.4.2. Elsdleges kulcs Mint azt a 4.1. alfejezetben a relcik tulajdonsgainl megllaptottuk, egy relci brmely sort a tartalma alapjn azonostjuk. Minden relciban ltezik az oszlopoknak legalbb egy olyan kombincija, amelyik az adott relciban mindig egyedi, s ezltal egyrtelmen meghatrozza a sor tbbi oszlopnak az rtkt. Ezt az oszlopkombincit (amely gyakran csak egy oszlopot jelent) nevezzk a relci elsdleges kulcsnak (Primary Key). Elfordulhat, hogy egy relci sorait nem csak egy oszlop (kombinci) azonosthatja egyrtelmen. gy egy szemlyi nyilvntartsban az egyedi azonost szm (szemlyi szm, ad szm, TAJ szm) mellett azonosthat egy szemlyt a neve, anyja neve, szletsi helye s ideje is1, vagy szerepelhet egytt az ad s a TAJ szma is. Ilyenkor ezeket az oszlopokat (oszlopkombincikat) lehetsges kulcsoknak (Candidate Key) nevezzk, s kzlk brmelyiket kivlaszthatjuk elsdleges kulcsnak. Ha ez megtrtnt, akkor a tbbi lehetsges kulcsot alternatv kulcsnak (Alternative Key) nevezzk. Azt, hogy a lehetsges kulcsok kzl vgl melyiket vlasztjuk ki elsdleges kulcsnak, az a modell szempontjbl kzmbs. Gyakorlati szempontbl azonban ltalban nem mindegy. A relcik egyes sorait gyakran az elsdleges kulcs szerint srsdve helyezzk el. Ha a hatkony feldolgozsnl kihasznljuk a srsdst (ld. 2.5.1. pont), akkor az elsdleges kulcsot clszer eszerint vlasztani. Ha ms tblzatbl hivatkozunk egy relcira, akkor viszont a hivatkozott oszlopot lehet clszer elsdleges kulcsnak kijellni. Az elsdleges kulcsnak a relcin bell az egyedisgen kvl mg az albbi feltteleket is ki kell elgtenie:

Lnyeges, hogy az egyedisgnek nem csak az ppen aktulis adatllomnyra kell teljeslnie, hanem a tblzat teljes ltezsnek az idtartamra. Ilyen szempontbl elvileg elkpzelhet, hogy a fenti oszlop kombinci kt klnbz szemlynl is azonos lehetne, de ennek valsznsgt a gyakorlatban nullnak vesszk.

4-7

Az elsdleges kulcs, illetve sszetett kulcsnl annak egy komponense sem lehet NULL rtk. Ez annak az szszer logikai felttelnek az tfogalmazsa a relcis modell terminolgijba, hogy csak azzal tudunk valamit azonostani, amit ismernk, aminek tudjuk az rtkt. sszetett kulcsnl a komponensek szma minimlis. Brmelyik oszlopot elhagynnk a kulcsbl, az egyrtelmsg megsznne. Hiba van egy adott pillanatban egy szemlyeket tartalmaz tblzatban, melynek a szemly neve, anyja neve, szletsi helye s ideje az elsdleges kulcsa, csupa klnbz nev szemly, a nevet nem vehetjk elsdleges kulcsnak. Ugyanakkor viszont flsleges s tilos is a fenti elsdleges kulcshoz mg brmilyen ms oszlopot is hozzvenni. Az elsdleges kulcsok kijellse az adatbzis-tervezs egyik igen fontos lpse.1 Definilsa egyben egy egyedi index felptst is jelenti. Adatbzis-kezel rendszertl fgg, hogy ezt a felhasznlnak, vagy az adatbzis-felgyelnek kell-e kln definilni, vagy a rendszer maga kszti el automatikusan a kulcs kijellsnek kvetkezmnyeknt. Az alternatv kulcsokra neknk magunknak kell egyedi indexet definilnunk. A 4.2. alfejezetben szerepl tblzatok elsdleges kulcsai: HALLGAT (HID) TANTRGY (TID) MITHALLGAT (HID,TID) Alternatv kulcs TANTRGY-ban a tantrgy megnevezse, TMEGNEV. 4.4.3. Relcik kzti kapcsolatok Az elsdleges kulcs s az oszlopokra meghatrozott integritsi felttelek egy adott relcin bell biztostjk az adatok ellentmonds mentessgt. Ahhoz, hogy a klnbz relcik kztt se lehessenek logikai ellentmondsok, bizonyos relcik kztt meghatrozott sszefggseknek llandn rvnyesnek kell lenni. Erre szolglnak az idegen kulcsok. 4.4.3.1. Idegen kulcs A relcik kzti kapcsolatok kzl a legfontosabb az, amikor az egyik relciban, a hivatkoz relciban, egy oszlop vagy oszlopkombinci csak olyan rtket vehet fel, amelyik egy msik, a hivatkozott relci egy elsdleges kulcsnak rtkvel egyenl2. Ezt az oszlopot (kombincit) nevezik a hivatkoz relciban idegen kulcsnak (Foreign Key). Az egymssal ilyen kapcsolatban ll relcik szoksos elnevezse mg fgg s fggetlen, illetve szl s gyermek relcik. Az idegen kulcsok definilsval sszefggseket hozunk ltre klnbz relcik kztt. Ezek sszessgt hivatkozsi feltteleknek, vagy fggsgi kapcsolatoknak nevezzk. Ezek lnyegt gy foglalhatjuk ssze, hogy az adatbzisban a hivatkoz relciban nem lehet olyan idegen kulcs, melynek rtke nem egyezik meg a hivatkozott relciban egy hozzkapcsold elsdleges kulcs rtkvel, vagy nem a NULL rtket tartalmazza. Fordtva az llts nem ll fenn. A hivatkozott relciban lehetnek olyan kulcs-rtkek, melyekkel megegyez idegen kulcs nincsen. Ez rthet is, hisz pldul lehetnek olyan tantrgyak, amit
Gyakori tervezsi hiba, hogy minden egyes relcihoz hozzrendelnek egy mestersges azonost szmot, melyet egyben elsdleges kulcsnak is kijellnek. Amennyiben a relcinak van egy termszetes azonostja, pldul MITHALLGAT-ban (HID,TID), akkor flsleges ehhez mg egy kln azonost oszlopot is felvenni. 2 Egyes rendszerek megengedik az alternatv kulcsra val hivatkozst is.
1

4-8

vgl senki sem vesz fel, st olyan hallgatk is, akik egy tantrgyat sem vettek fel. (Ez nem csak elvi lehetsg, a tanv elejn ez lehet egy ideig az adatbzis termszetes llapota.) Az idegen kulcs valjban kt relci kzti egy-tbb kapcsolat lerst jelenti, ahol az idegen kulcs jelenti a kapcsolat tbb oldalt. Az Entity Relationship diagramban feltntethetjk ennek a kapcsolatnak a nevt s a kulcs-kapcsolatot rint mveletek mdjt is.

4.2. bra: Hallgati adatbzis relcis modelljnek vgs formja. a.) A relcik s kapcsolataik, b.) A relcik attribtumai rszletezve. Ilyen idegen kulcs a MITHALLGAT (hivatkoz) relciban HID s TID, melyek a HALLGAT, illetve a TANTRGY (hivatkozott) relcik elsdleges kulcsaira hivatkoznak. Ez gtolja meg azt, hogy egy tantrgyat nem ltez hallgat vegyen fel, vagy egy hallgat 4-9

nem ltez tantrgyat hallgathasson. Ezt figyelembe vve a 4.1. brn lthat adatmodellt kiegsztjk az idegen kulcsokkal is. gy kapjuk meg a 4.2. brn lthat vgleges adatmodellnket. Az oszlopok tpusa a hivatkoz s a hivatkozott relciban azonos. Neveik klnbzhetnek, br egy jl tervezett adatbzisban mivel ugyanarra a tulajdonsgra vonatkoznak megegyeznek. A fenti pldban az idegen kulcsok rszei az elsdleges kulcsnak, de ez nem ktelez. A hivatkoz s a hivatkozott relci megegyezhet. Erre plda lehet a 4-36. oldalon lv 4.15. bra ALKALMAZOTT-3NF tblzatnak egy olyan kibvtse, mely tartalmazza az alkalmazott kzvetlen fnknek (mely csak egyetlen egy szemly lehet) a szemlyi azonost szmt. Ez az adatbzis konzisztencija miatt termszetesen csak olyan rtket vehet fel, amelyik mr szerepel az alkalmazottak szemlyi szma kztt. Ez egyben j plda arra is, hogy mirt kell egyes esetekben idegen kulcsnl megengedni a NULL rtket is. A vllalat legels embernek nincsen fnke. Ezrt ebben a sorban ennek az attribtumnak az rtke csak a NULL rtk lehet.

4.3. bra: Idegen kulcsok brzolsa. a.) ltalnos formban b.) az EGYETEMI NYILVNTARTS modellben c.) hivatkozsi ciklus s nhivatkozs Elvileg a hivatkoz tblzatra is hivatkozhatnak ms tblzatok, s az is elfordulhat, mint azt a 4.3.c. brn bemutatjuk, hogy egy hivatkozsi ciklus tbb tblzat bevonsa utn 4-10

zrdik. Itt az ALKALMAZOTT tblzatban csak olyan dolgozk szerepelhetnek, akiknl a KZVETLEN-FNK szma szerepel ugyanezen tblzatnak egy msik sorban SZEMSZM-knt (nmagra val hivatkozs), vagy NULL rtk, OSZT-KD-ja ltezik az OSZTLY tblzatban, vagy NULL rtk (egyszer hivatkozs). Az OSZTLY tblzatban csak olyan sorok lehetnek, melyekben az OSZT-VEZET rvnyes SZEMSZM az ALKALMAZOTT tblzatban, vagy NULL rtk (egyszer hivatkozs, s egyben hivatkozsi ciklus ltrehozsa)1. 4.4.3.2. Idegen kulcsot rint mveletek Az adatbzis-kezel rendszernek automatikusan biztostani kell azt, hogy az idegen kulcsokkal definilt hivatkozsi felttelek az adatok brminem megvltoztatsa utn is rvnyben maradjanak. Az idegen kulccsal sszekapcsolt tblzatokban hromfle vltoztats lehet, amelyik rintheti a feltteleket: j adat bevitele, bennlv adat mdostsa, bennlv adat trlse. Bevitel A hivatkozott tblzatba brmilyen j sort bevihetnk. A hivatkoz tblzatba csak olyan sort vihetnk be, melyben az idegen kulcs rtke megegyezik egy a hivatkozott tblzatban mr ltez elsdleges kulcs rtkvel, vagy NULL rtk (feltve, hogy ezt az rtket megengedi az adatmodell). Ez a szably teljesen merev, nem enged meg semmifle vlasztsi lehetsget. Trls A hivatkoz tblzatbl minden korltozs nlkl trlhetnk sorokat. Ha a hivatkozott tblzatbl is szabadon trlhetnnk, akkor a fggsgi kapcsolatok felborulhatnnak. Ennek megakadlyozsa rdekben a relcis modell csak az albbi trlsi mdokat teszi lehetv: korltozott (Restricted) trls, trls NULL rtkre lltssal (Set Null), tovagyrz vagy kaszkd (Cascade) trls. Azt, hogy a fentiek kzl melyik trlsi mdot engedjk meg, az idegen kulcs definilsakor kell megadnunk. Korltozott trlsi lehetsgnl a hivatkozott tblzat sora csak akkor trlhet, ha nincs r hivatkozs, azaz az elsdleges kulcsval egyez idegen kulcs rtk nincsen a hivatkozott tblzatban. Amennyiben van, s mgis trlnnk kell egy ilyen rekordot, ezt csak gy tehetjk meg, hogy elbb trljk az sszes erre hivatkoz sort, vagy az idegen kulcs rtket ebben ms megengedett rtkre vltoztatjuk. Az egyetemi adatbzis pldnknl maradva ez azt jelenti, hogy nem trlhetnk olyan tantrgyat a nyilvntartsbl, amit legalbb egy hallgat felvett. Az adatbzis konzisztencija, az adatok helyessge szempontjbl ez a md a legbiztosabb. Ezrt, ha nem adunk meg mst, ez a trlsi md lesz rvnyben. Ugyanakkor azonban, alkalmazsval bizonyos nehzsgek jrhatnak. Trls eltt a hivatkoz tblzatokat ellenrizni kell. Ha van hivatkozs, a mveletet nem tudjuk vgrehajtani. Hibajelzst kapunk, amit ha nem kezelnk megfelel mdon le, akkor a feldolgozsunk lell. Ezrt szoksos
1

A NULL rtket OSZT-KD-ban vagy OSZT-VEZET-ben egy osztly els szemlynek (vezetjnek) vagy egy j osztlynak felvtelhez meg kell engednnk.

4-11

trlsi md a NULL rtkre llts is. Ekkor a trlt rtkkel egyez rtk idegen kulcsok a hivatkoz tblzatban mind automatikusan a NULL rtket fogjk felvenni. Ez termszetesen csak akkor lehetsges, ha az idegen kulcsot alkot oszlop(ok) megengedi(k) a NULL rtket. A NULL rtkre lltssal val trls vgrehajtsa egyszerbb. A trls minden tovbbi kiegszt mvelet nlkl elvgezhet. Ugyanakkor viszont fennll a veszlye annak, hogy az automatikus mdosts miatt egyes hasznos informcik elveszhetnek. (Pldul egy runak, amelyiket a tovbbiakban mr nem szlltunk, trljk a kdjt. Ennek kvetkeztben az sszes rgebbi megrendelsben azonosthatatlann vlik ez az ru. Egy ilyen adatmodell formailag helyes lehet, de logikailag mindenkppen hibs! Egyetemi modellnk nem is engedn meg a trlst NULL rtkre lltssal.) Mg knyelmesebb, de mg nagyobb veszlyeket rejt magban a tovagyrz vagy kaszkd trls. Ha ezt definiljuk, akkor a hivatkozott tblzatbl az elsdleges kulcsot tartalmaz sorral egytt automatikusan trldik a hivatkozbl is az sszes olyan sor, amelyikben az idegen kulcs a trlt kulcs-rtkkel volt egyenl. Klnsen veszlyes lehet ez akkor, ha a hivatkoz tblzatra ms tblzatok is hivatkoznak, mert ez tovbbi trlseket vonhat maga utn1. Mdosts A lehetsgek ugyanazok, mint a trlsnl, azzal a klnbsggel, hogy a kaszkd mdosts az idegen kulcs rtknek az elsdleges kulcs j rtkre trtn automatikus megvltoztatst jelenti a hivatkoz tblzat sszes rintett sorban. Termszetesen a fent felsorolt feltteleken kvl mind a hivatkozott, mind a hivatkoz tblzatban trtn vltoztats eredmnyeknt ltrejv j sorra rvnyesnek kell lenni a tblzatra definilt sszes tbbi felttelnek is. 4.4.4. Tovbbi kulcsok Br valjban nem tartozik az adatmodellhez, a relcis adatbzisokban az elsdleges s az idegen kulcson kvl mg tovbbi kulcsoknak is fontos szerepe van. Ezek az elhelyezsi kulcs, a keressi kulcs, s a srsdsi kulcs, melyet a 2.5.1. pontban mr trgyaltunk. 4.4.4.1. Elhelyezsi kulcs Az adatbzisban minden trol helynek van egy cme. Az egyes tblzatok sorait a tblzat szmra kijellt trol hely meghatrozott cmre helyezzk el. A trolsi hely kivlasztsa az albbi mdokon trtnhet: Sorosan, a sort a tblzat szmra kijellt trol hely els szabad cmn troljuk el. A trol cmet a berand sor megadott oszlopnak (oszlopkombincijnak) aktulis rtkbl hatrozzuk meg. Ezt az oszlopot (illetve oszlopkombincit) nevezzk a relci elhelyezsi, vagy besorolsi kulcsnak (Order Key). Ez az elhelyezsi kulcs igen gyakran egyben az elsdleges kulcs is. Ilyenkor, ha az j rekordok elsdleges kulcst egy folyamatosan nvekv sorszmgenertor szolgltatja, akkor ez egyben srsdsi kulcs is, s megfelel a soros beviteli mdnak is.

Ennek elkerlsre sok rendszerben a kaszkd trlssel definilt hivatkoz tblzatra ms tblzatok egyltalban nem, vagy csak korltozott trlssel hivatkozhatnak

4-12

Specilis alkalmazsoknl elfordul, hogy a hatkonysg rdekben nem az elsdleges kulcs szerint srsdve akarjuk egy tblzat sorait trolni. Ekkor a srsdsi kulcs lesz egyben az elhelyezsi kulcs is. 4.4.4.2. Keressi kulcs Az adatbzis relciiban klnbz szempontok szerint kereshetnk. Azokat az oszlopokat (oszlopkombincikat), melyek rtke alapjn rendszeresen keresnk, nevezzk keressi kulcsoknak (Search Key). A keress meggyorstsra az egyes keressi kulcsokra felptnk egy indexet (ld. 2.4.1. pont). Az elsdleges kulcs egyben mindig keressi kulcs is. Ezen kvl az alkalmazsok ignytl fggen akrhny keressi kulcsot, indexet definilhatunk nem csak az adatbzis megtervezsekor, hanem menetkzben, utlag is, ahogy a felhasznli kvetelmnyek vltoznak. A klnfle kulcsokra pldaknt tekintsk a HALLGAT tblzatot. Ezek sorait gy troljuk, ahogy a hallgatk adatait sorban felvesszk. A kvetkez j hallgat azonostja, HID, az utols azonost rtknl eggyel nagyobb szm lesz. HID teht egyben elhelyezsi s elsdleges kulcs is. A tblzatban keresnk az azonost, a hallgat neve s vfolyama alapjn is. Ezek az oszlopok, HID, VNV+KNV, VF teht keressi kulcsok lesznek. Az elhelyezs s az azonost kpzsnek algoritmusa kvetkeztben HID egyben srsdsi kulcs is. 4.5. Relcis mveletek A relcis modell egyik legnagyobb elnye az, hogy a klnfle feltteleknek megfelel, fizikailag is ltez, vagy ezekbl logikai ton elllthat egyedeit knnyen, egyszeren meg tudjuk hatrozni, azonosthatjuk, kivlaszthatjuk, definilhatjuk ket a relcis mveletek segtsgvel. A relcis mveletek az albbi feladatok elvgzsre szolglnak: a keresskor kivlasztand adatok meghatrozsa, a mdostand, trlend adatok kivlasztsa, ms relci(k)bl berand adatok kijellse, virtulis adatok definilsa. Ezek lehetnek az adatmodellnek lland, nvvel azonostott relcii (pl. nzetek) vagy csak ideiglenesen ltezk, melyek csupn az adott feladat megoldshoz szksgesek s annak befejeztvel automatikusan megsznnek. az adatbzis egyes rszeihez trtn hozzfrsi jogok rvnyessgi terletnek kijellse. Mivel a relcis mveletekkel leggyakrabban adatokat vlasztunk ki, a tovbbiakban ltalban kivlasztsrl, kivlasztsi mveletrl fogunk beszlni, de ez alatt nem csak a szkebb rtelemben vett kivlasztst rtjk, hanem a fent felsorolt funkcik brmelyikt. Az ebben a pontban ismertetend relcis mveleteket s azok klnbz kombinciit a gyakorlatban az 5.6. alfejezetben trgyaland SQL utastsok segtsgvel hajtjuk vgre az adatbzisban. Ezekben azt fogalmazzuk meg, hogy mit akarunk az adatbzisban vghezvinni. Hogy ez miknt fog megvalsulni, azt ltalban az adatbzis kezel rendszerre bzzuk. 4.5.1. A legfontosabb relcis mveletek A relcis mveletek zrtak. Relcikon hajtdnak vgre s eredmnyknt relcit szolgltatnak. Aszerint, hogy egy vagy tbb relcira vonatkoznak, beszlnk egy- s tbbrelcis mveletekrl. A zrtsg kvetkeztben a tbbrelcis mveletek mindig 4-13

visszavezethetk egyms utn vgrehajtott ktoperandusos mveletekre. Az ismtelten alkalmazott mvelet egyik operandusa lesz az elzekben vgrehajtott mvelet eredmnye a msik pedig egyenknt a harmadik, negyedik, s gy tovbb a kvetkez operandus. Megklnbztetnk ezen kvl elemi s nem elemi relcis mveleteket is. Ez utbbiak klnbz elemi mveletek eredmnyeknt llnak el, de gyakorlati fontossguk miatt ezekre a mveletsorozatokra nll nvvel is hivatkozhatunk, nll mveletnek tekintjk. Az albbiakban ismertetjk a leggyakrabban hasznlt relcis mveleteket, melyekben vannak elemi s nem elemi mveletek is: tnevezs (RENAME), korltozs vagy restrikci (RESTRICT), vetlet vagy projekci (PROJECT), keresztszorzat (TIMES), egyests vagy sszekapcsols (JOIN), egyests vagy sszekapcsols alaprtelmezssel (OUTER JOIN), uni (UNION), metszet (INTERSECT), klnbsg (DIFFERENCE), bvts (EXTEND), csoport kpzs (SUMMARIZE), kijells (CREATE). A tovbbiakban rszletesen ismertetjk ezeket a mveleteket. 4.5.2. tnevezs (RENAME) Az egyrelcis elemi mveletek kzl a legegyszerbb az tnevezs (RENAME). Ez egyszeren tnevezi az R relci egy oszlopt RENAME R (r1, r2) ahol r1 az eredeti, r2 pedig az j oszlopnv. Ugyanazon relci tbb oszlopnak az tnevezst a RENAME elemi utasts ismtelt alkalmazsval vgezhetjk el. Ehelyett definilhatjuk a tbb oszlop egyszerre trtn tnevezst lehetv tev RENAME utastst a RENAME R (r11, r21; r12, r22; r1n, r2n) mdon, ahol r1i, r2i az sszetartoz rgi s j oszlopnevek. Erre a mveletre a zrtsg miatt van szksgnk. E nlkl egy olyan ktrelcis mvelet, melyben az operandusokban azonos nev oszlopok vannak, olyan eredmnyt adhatna, melyben azonos nev oszlopok lehetnnek. A tbb-relcis mveletekben az eredmnyrelci oszlopneveinek egyrtelmv ttele rdekben szoksos az oszlopneveket a relci nevvel minsteni. gy az R s S relcik azonos nev k oszlopait R.k, illetve S.k-val jelljk, ahol az elbbi az R, az utbbi az S k nev oszlopt jelenti.

4-14

4.5.3. Korltozs (RESTRICT) Egy relcis elemi mvelet a korltozs vagy restrikci (RESTRICT)1. Az eredmny az R relcinak azokat s csak azokat a sorait tartalmazza, melyeknl az r oszlopok rtkeire teljesl az F korltoz felttel. Ez a felttel ltalban az ri oszlop(ok) egyenknti sszehasonltst (=, <, <=, ) jelenti egy msik operandussal, amelyik vagy egy lland (literl), vagy ebben, vagy egy msik sorban egy msik oszlop rtke, vagy egy relcis mvelettel kapott skalr rtk, s ezek eredmnynek AND, OR vagy NOT-tal val sszekapcsolst. De mint azt a harmadik plda is mutatja, lehetnek ennl sszetettebb felttelek is.2 ltalnos formja: RESTRICT R WHERE r : F Az eredmny-relcinak s oszlopainak a neve ugyanaz, mint az eredeti relcinak. Elsdleges kulcsa is megmarad. Az SQL utastsokban a korltozs megfelel az adatkezel utastsok (ld. 5.6.3. pont) WHERE klauzuljban megadott felttelnek. RESTRICT HALLGAT WHERE VF = 5 RESTRICT HALLGAT WHERE VF = 5 OR SZDATUM <= 1988-12-31 RESTRICT HALLGAT WHERE VF = 5 AND HID = {PROJECT [RESTRICT MITHALLGAT WHERE OSZTLYZAT = 5] (HID) } Az els korltozs kivlasztja a HALLGAT relcibl az 5. ves hallgatk sszes adatt, a msodik az 5. veseket, vagy az 1988-ban vagy annl korbban szletetteket, mg a harmadik az tdvesek kzl azokat, akiknek van ts osztlyzatuk (a PROJECT rtelmezst ld. a kvetkez pontban). 4.5.4. Vetlet (PROJECT) Szintn egy relcis elemi mvelet a vetlet vagy projekci (PROJECT). Ez az R relcibl csak a vetletben megadott r1, r2, , rn oszlopokat tartja meg ugyanazokkal a nevekkel azonostva: PROJECT R (r1, r2, , rn) ahol r1, r2, , rn rendre az eredeti R relcinak a vetletben is megmarad oszlopai. Sorrendjk klnbzhet az eredeti sorrendtl. Ezrt a vetlet egy relci oszlopai sorrendjnek a felcserlsre is szolgl. Ha a vetlet tartalmazza az elsdleges kulcsot, akkor ennek is ez lesz az elsdleges kulcsa. Ha nem tartalmazza, akkor az els lpsben kapott eredmnynek lehetnek azonos sorai. Ezrt a fenti defincit a zrtsg miatt ki kell egsztennk azzal, hogy ebben az esetben az azonos sorok kzl csak egyet tartunk meg3. A 4.4. brn a korltozs s a vetlet hatst lthatjuk egy adott relcira.
1

Gyakran kivlasztsnak, szelekcinak (SELECT) is nevezik. Ez azonban flrertsekre vezethet, mert az SQL nyelv kivlaszt utastsnak is SELECT az elnevezse, mely azonban ennl lnyegesen sszetettebb feladatok elvgzsre szolgl. 2 Az sszehasonlt opertorok s felttelek gyakorlati lehetsgeit az SQL nyelvnl, az 5.3.4. pontban trgyaljuk. 3 Az SQL nyelvben ennek a SELECT DISTINCT kifejezs felel meg.

4-15

4.4. bra: Egyrelcis mveletek. a.) korltozs, b.) vetlet, c.) korltozs s vetlet Pldk a projekcira: PROJECT HALLGAT (HID, VNV, KNV) PROJECT [RESTRICT TANTRGY WHERE OKTAT = QUITTNER] (TMEGNEV) Az els vetlet kivlasztja a HALLGAT tblzat sszes sorbl az eredetitl eltr sorrendben a HID, VNV, KNV oszlopok rtkt. A msodik megadja a TANTRGY tblzatbl azoknak a tantrgyaknak a megnevezst, melyeket a QUITTNER nev oktat tant. Az SQL-ben a vetletet a SELECT utasts kivlasztsi-listjnak megadsval lltjuk el. (ld. 5.6.3.2. pont). 4.5.5. Kereszt-Descartes szorzat (TIMES) A ktrelcis mveletek kzl a legfontosabb a keresztszorzat (TIMES), amit a matematikban Descartes szorzatnak neveznek. Az R(r1, r2, , rn ) s az S(s1, s2, , sm) n illetve m fokszm relcik keresztszorzata R*S, vagy R TIMES S az az n+m fokszm relci, melynek oszlopait gy kapjuk meg, hogy az R relci sszes oszlopa mg hozzrjuk az S relci minden oszlopt, sorait pedig gy, hogy R minden egyes sora mg egyenknt hozzrjuk S minden sort. Ha az eredeti relcik sorainak szma, kardinalitsa i, illetve j volt, akkor a keresztszorzat i*j lesz (ld. 4.5. bra).

4.5. bra: Kt relci, R s S keresztszorzata. Az oszlopok nevei (a, b, x, y, z) a kt relciban klnbznek, ezrt a szorzs elvgzse eltt nincs szksg az tnevezs mveletre.

4-16

A szorzat elsdleges kulcsa a kt tnyez relci elsdleges kulcsnak a konkatencija lesz. A szorzat oszlopainak a neve megegyezik az egyes tnyezk oszlopainak a nevvel. A relcis mveletek zrtsgbl kvetkezik, hogy emiatt a mvelet csak akkor hajthat vge, ha a kt relciban nincsenek azonos nev oszlopok. Amennyiben ez nem llna fenn, akkor az tnevezs (RENAME) relcis mvelettel elbb t kell neveznnk az egyik relciban a msikkal azonos nev oszlopokat. Megjegyezzk, hogy br a keresztszorzat elvileg igen fontos alapmvelet, a gyakorlatban szinte mindig a korltozssal egytt alkalmazzk. Ennek az a magyarzata, hogy amg nagy gpeknl akr 1 milli sorbl ll relcik kezelse sem vet fel nmagban hatkonysgi problmkat, addig mr kt 100 000 soros relci keresztszorzata is 10 millird sort tartalmazna. Ennek akr csak ideiglenes trolsa, az ebben val soros keress, vagy a kzvetlen hozzfrshez ideiglenes indexek felptse mr komoly trolsi s feldolgozsi id problmkat vethet fel. A specilis korltozssal kiegsztett keresztszorzatot, join nven sszetett mveletknt, nll relcis mveletknt is definiljuk. Az SQL nyelvben a keresztszorzat mvelett a SELECT utasts FROM klauzuljban definiljuk (ld. 5.6.3.2. pont), s vagy rgtn itt, vagy a WHERE klauzulban korltozzuk azonnal a kivlasztand sorok szmt. 4.5.6. Egyests (JOIN) Az adatbzisokkal kapcsolatos munkkban a legfontosabb s leggyakrabban hasznlt kt operandusos mvelet az egyests vagy sszekapcsols (JOIN). Br ez nem elemi mvelet, fontossga miatt nll mveletknt definiljuk, melyet az adatbzis-kezel rendszer azonnal rtelmezni tud. A join utasts segtsgvel a felhasznl sokkal knnyebben tudja megfogalmazni kvnalmait, mint hogyha egy join eredmnyt elemi utastsokbl, lpsenknt kellene sszelltania. Az utastsnak kt f formja van: a termszetes (Natural) vagy bels join, a kls (Outer) join, az egyests alaprtelmezssel. A join utastst s operandusait az SQL nyelvben a SELECT utasts FROM klauzuljban adhatjuk meg. Az operandusokat sszekapcsol join-oszlopokat vagy itt, vagy a WHERE klauzulban jellhetjk ki. (ld. 5.6.3.2. pont). 4.5.6.1. Termszetes join A termszetes join kt relcibl egy j relcit hoz ltre. Lnyegnek megrtshez az albbi pldn mutatjuk be az alkalmazst: A MITHALLGAT tblzatbl megtudhatjuk, hogy a hallgatk milyen trgyakat hallgatnak, de szemlyi adataikbl csak a hallgati azonostt (HID) kaphatjuk meg (ld. a 4-9. oldalon lv 4.2. brt). A hallgatk tovbbi adatait a HALLGAT tblzatbl szerezhetjk meg. Ehhez a kt tblzatot egyestennk kell. A MITHALLGAT minden egyes HID rtkhez tartoz rekordhoz hozz kell kapcsolnunk azt a HALLGAT rekordot, amelyikben a hallgat azonostjnak rtke megegyezik (ugyancsak HID, de most ez a HALLGAT tblzat egy oszlopa) a MITHALLGAT-ban lev hallgat-azonost rtkvel. Ezt a mveletet nevezzk a HALLGAT s a MITHALLGAT tblzatok termszetes vagy bels egyestsnek vagy sszekapcsolsnak, vagy a szoksos angol elnevezsvel Natural Joinjnak, azzal kiegsztve, hogy az egyests a HID oszlopok egyenlsge alapjn trtnik. Jellse

4-17

MITHALLGAT JOIN HALLGAT (HID) Ha az egyes relcik adatai a kvetkezk: MITHALLGAT


HID 11111 11111 11111 22222 22222 33333 33333 33333 44444 44444 TID ORA DB2 ADB ORA DB2 ADB ORA ACCS DBMS ORA GYAKPONT 31 81 91 52 62 63 83 93 84 94 OSZTALYZAT 1 4 5 2 3 3 4 5 4 5

HALLGAT
VNEV Antal Balogh Csaba Dani Elek KNEV Alfonz Benedek Ceclia Demeter Etelka HID 11111 22222 33333 44444 55555 SZDTUM 1980-01-01 1980-02-02 1980-03-03 1980-04-04 1980-11-11 EVF 1 2 3 4 1

akkor a MITHALLGAT JOIN HALLGAT (HID)-t az albbi ideiglenes relcibl kapjuk az sszekapcsolst ltrehoz, azonos MITHALLGAT.HID s HALLGAT.HID oszlopok egyiknek elhagysval.
TID GYAKPONT OSZTLYZAT VNEV KNEV SZDTUM VF HID HID (MITHALLGAT) (HALLGAT) 11111 ORA 31 1 Antal Alfonz 11111 1980-01-01 1 11111 DB2 81 4 Antal Alfonz 11111 1980-01-01 1 11111 ADB 91 5 Antal Alfonz 11111 1980-01-01 1 22222 ORA 52 2 Balogh Benedek 22222 1980-02-02 2 22222 DB2 62 3 Balogh Benedek 22222 1980-02-02 2 33333 ADB 63 3 Csaba Ceclia 33333 1980-03-03 3 33333 ORA 83 4 Csaba Ceclia 33333 1980-03-03 3 33333 ACCS 93 5 Csaba Ceclia 33333 1980-03-03 3 44444 DBMS 84 4 Dani Demeter 44444 1980-04-04 4 44444 ORA 94 5 Dani Demeter 44444 1980-04-04 4

Az 55555 azonostj hallgat nem szerepel MITHALLGAT-ban, ezrt a join eredmnyben sem kapjuk meg. A fenti plda utn definiljuk pontosabban is a mveletet. A termszetes join-nak a gyakorlatban hasznlatos defincija a kvetkez: Az R relci oszlopai legyenek r1, r2, , rn, k1 , k2 , ,ki , az S- pedig k1, k2, , ki, s1, s2, , sm, ahol a kj oszlopok mindkt relciban ugyanarra az attribtumra vonatkoznak s nevk pronknt azonos, mg az rj s sj oszlopok kztt nincsen azonos nev1. R s S

Az oszlopok sorrendje mindkt relciban tetszleges lehet. Az azonos attribtumokat jelent oszlopokat csak az ttekinthetsg kedvrt rtuk az egyik relcinak a vgre, a msiknak pedig az elejre. Amennyiben a

4-18

termszetes egyestse, sszekapcsolsa (Natural Join) a k1, k2, , ki oszlopok alapjn az a relci, amelyiknek oszlopai r1, r2, , rn, k1, k2, , ki, s1, s2, , sm sorait pedig gy kapjuk, hogy R-nek minden egyes sorhoz hozzrjuk S-nek minden olyan sort, amelyben a k1 ,k2, , ki oszlopok rtkei mindkt relciban pronknt megegyeznek. (ld. 4.6. bra). A kt relci kzs oszlopait nevezzk join oszlopoknak. Ha a relciknak nincsenek kzs oszlopai, akkor a termszetes join megegyezik a keresztszorzattal. Ha a kzs join oszlopokban nincsenek azonos rtkek, akkor a termszetes join eredmnye egy res, egyetlen sort sem tartalmaz relci lesz. Az R s S relcik termszetes join-ja a k1, k2, , ki join oszlopok alapjn, R JOIN S (k1, k2, , ki) elvileg az albbi elemi mveletekbl tevdik ssze1: T1 = R TIMES S T2 = RESTRICT T1 WHERE R.k1 =S.k1 AND R.k2 = S.k2 AND R.ki = S.ki R JOIN S(k1,k2,,ki) = PROJECT T2(r1,r2,,rn,R.k1,R.k2,,R.ki,s1,s2,,sm), ahol T1 s T2 kzbens eredmnyknt kapott relcik. A termszetes egyestst, sszekapcsolst (Natural Join) az ltalnos szhasznlatban jelz nlkl, csak egyestsnek, sszekapcsolsnak vagy joinnak nevezik. A tovbbiakban, amikor jelz nlkl hasznljuk a joint vagy valamelyik szinonimjt, mindig a termszetes joint fogjuk ezen rteni. Az egyests eredmnyeknt kapott relci oszlopainak szma, fokszma n+i+m. Sorainak szma, kardinalitsa fgg a join-oszlopokban lv rtkektl, nulltl elvileg a maximlis keresztszorzat kardinalitsig vltozhat. A gyakorlatban azonban ennl ltalban nagysgrenddel kisebb. Elsdleges kulcsa, ha a join oszlopok tartalmazzk valamelyik relci elsdleges kulcst, akkor a msiknak az elsdleges kulcsa lesz. Ha nem tartalmazzk, akkor az operandusok elsdleges kulcsainak konkatencija, esetleg annak valamely rsze adja az elsdleges kulcsot. A gyakorlatban az egyests legtbbszr egyetlen egy kzs oszlop (R.k1 = S.k1) azonos rtkeinek sszekapcsolsa alapjn trtnik (i=1). A feladat elejn trgyalt pldban s a kvetkez oldalon a 4.6. brn is egy ilyen join lthat. Megjegyezzk, hogy ha a join-oszlopban egy sorban mindkt relciban NULL rtk van, akkor ezek nem azonosak. Az operandusoknak a join oszlop(ok)ban NULL rtket tartalmaz sorai nem szerepelnek az eredmnyben. A termszetes join szimmetrikus. A join operandusainak sorrendje lnyegtelen. Tovbbi pldk a join alkalmazsra: MITHALLGAT JOIN [PROJECT HALLGAT (VNV, KNV, HID)] (HID) PROJECT {[TANTRGY JOIN MITHALLGAT (TID)] JOIN HALLGAT (HID) [VNV, KNV, OKTAT]} Az els join megadja MITHALLGAT adatai mell a hallgat nevt is. A msodik (hrom relci sszekapcsolsa) megadja a hallgatk neve mell az oktatinak a nevt is. Azok a hallgatk, akiket senki sem tant, s azok az oktatk, akiknek egy tantvnya sincs, nem szerepelnek ebben a relciban. Ezeket csak a kvetkez pontban ismertetend kls join segtsgvel kaphatjuk meg.
nevekre a felttelek nem teljeslnnek, akkor az egyests eltt elbb az tnevezs mveletet kell alkalmaznunk legalbb az egyik operandusra. 1 A gyakorlatban a mveletek nem gy s nem ebben a sorrendben hajtdnak vgre, hisz gy mindig ltrejnne a keresztszorzat, amit pedig clszer hatkonysgi okok miatt elkerlni. A jellsben R.kj az R, S.kj az S relci kj oszlopt jelenti.

4-19

4.6. bra:

A join mvelet. Az egyests alapjul a mindkt relciban szerepl k1 oszlop szolgl.

4.5.6.2. Kls join A TANTRGY JOIN MITHALLGAT (TID) relciban minden MITHALLGAT sorhoz tartozik egy s pontosan egy TANTRGY sor, mert MITHALLGAT-ban TID nem lehet NULL rtk, s idegen kulcsknt hivatkozik TANTRGY elsdleges kulcsra. (ld. 4.4.3.1. pont). Azokat a tantrgyakat azonban, amelyeket senki nem vett fel, a termszetes join nem tartalmazza, mivel ezek TID azonostjhoz nem kapcsoldik egy MITHALLGAT rekord sem. Hasonlkppen nem kapjuk meg a HALLGAT JOIN MITHALLGAT (HID) relcibl azokat a hallgatkat, akik egy tantrgyat sem vettek fel, holott gyakran ezekre is szksgnk lehet. Az ilyen feladatok egyszer megoldsra definiltk a kls vagy Outer join mveletet. Ennek eredmnye nem csak azokat a sorokat tartalmazza, amelyekben mindkt join tblzat soraira rvnyes a join felttel, hanem azokat is, amelyek vagy a join bal oldaln lev relciban szerepelnek, de a jobb oldaliban nincs olyan sor, amelyik a join felttelnek megfelel. Az eredmnyben a jobb oldali operandus nem join oszlopai a NULL rtket veszik fel. Ez a LEFT OUTER JOIN vagy rviden LEFT JOIN , egyests balrl. A 4.5.6.1. pontban lv plda a MITHALLGAT s HALLGATO tblzatok (ebben a sorrendben) LEFT OUTER JOIN-jnak eredmnye is lehetne, mivel az idegen kulcs felttel miatt MITHALLGAT minden sorhoz tartozik vele azonos HID rtkkel rendelkez sor a HALLGAT-ban. a join jobb oldaln lev relciban szerepelnek, de a bal oldaliban nincs olyan sor, amelyik a join felttelnek megfelel. Az eredmnyben ennek oszlopai a NULL rtket veszik fel. Ez a RIGHT OUTER JOIN vagy rviden RIGHT JOIN, egyests jobbrl. Az emltett pldban a MITHALLGAT s HALLGAT tblzatok (ebben a sorrendben) RIGHT OUTER JOIN-jnak eredmnyben szerepel az 55555 azonostj hallgat is az albbi rtkekkel:

4-20

HID 55555

TID NULL rtk

GYAKPONT OSZTALYZAT VNEV KNEV SZDTUM NULL rtk NULL rtk Elek Etelka 1980-11-11

EVF 1

a join brmelyik relcijban szerepelnek. Ez a FULL OUTER JOIN vagy rviden FULL JOIN , teljes egyests. Az eredmny a kt join komponens left outer joinjnak s right outer join-jnak uni-ja (ld. 4.5.7. pont) lesz. Tartalmazza mindazon sorokat, melyek vagy a balrl vagy a jobbrl val egyestsben szerepelnek. Azok a sorok, amelyek mindkettben benne vannak, (a termszetes join eredmnye) csak egyszer jelennek meg a vgeredmnyben. A pldban a kt relci jobboldali s teljes join-ja megegyezik. A kls join nem alapmvelet. A jobb- s a baloldali join nem is szimmetrikus. Ezekben a relcik sorrendje nem cserlhet fel. 4.5.7. Uni (UNION) Gyakran szksgnk van arra, hogy azonos egyedtpusokat tartalmaz tblzatok sorait egytt hasznljuk Az egyetemi pldnknl maradva, tegyk fel, hogy minden egyetem ezen a mdon felpti a sajt, nll adatbzis rszt s szksgnk van pldul minden egyetemi hallgat adataira, azaz az egyes egyetemek HALLGAT tblzatainak sszessgre, az sszes HALLGAT tblzat minden sorra. Ezt kapjuk meg a klnbz egyetemek HALLGAT relciinak unijaknt1.

4.7. bra:
1

Uni mvelete

Ha ezek egy adatbzisban szerepelnek, akkor gondoskodnunk kell a relci nevek egyedisgrl. Ezt meg tehetjk gy, hogy a HALLGAT el tesszk az egyetem nevt, pl. CORVINUS.HALLGAT, ELTE.HALLGAT.

4-21

Az uni ktrelcis, elemi mvelet. Kt relci unijt, R UNION S-t akkor tudjuk kpezni, ha azok uni-kompatibilisek, azaz mindkt relci ugyanazon attribtumokat tartalmazza ugyanabban a sorrendben. Ebben az esetben az unit azok a sorok alkotjk, melyek vagy az R, vagy az S relciban bent vannak, de azok, amelyek mindkettben megtallhatak csak egyszer szerepelnek (ld. 4.7. bra). Az eredmny-relcinak mind az oszlopai, mind az elsdleges kulcsa megegyezik az operandus relcik (kzs) oszlopaival illetve elsdleges kulcsval. Ha az oszlopoknak csak a neve vagy a sorrendje klnbzik, akkor a RENAME utastssal uni-kompatibiliss tehetjk a komponenseket. Ha ms attribtumokbl llnak, formailag akkor is uni-kompatibiliss tehetk j oszlopok definilsval, melyeknek alaprtelmezst, ltalban NULL rtket adunk. 4.5.8. Metszet (INTERSECT) s klnbsg (DIFFERENCE) Mindkt mvelet ktrelcis mvelet. Csak uni-kompatibilis relcikon valsthatk meg. Az eredmnyrelci oszlopai s elsdleges kulcsa az unival hasonlan megegyeznek az operandus relcik (kzs) oszlopaival illetve elsdleges kulcsval.

4.8. bra: Uni, metszet s klnbsg brzolsa rendezett relcikkal. R s S azonos sorai a rendezs kvetkeztben lefedik egymst. Az R INTERSECT S relci R s S azon s csak azon sorait tartalmazza, melyek mindkt relciban benne vannak. Az R DIFFERENCE S relci sorait R-nek azon s csak azon sorai alkotjk, amelyek bent vannak R-ben, de nincsenek bent S-ben. Ebben a mveletben az operandusok nem cserlhetk fel.

4-22

Azokat a hallgatkat, akik az ELTE-re s a Corvinus-ra is jrnak a CORVINUS.HALLGAT INTERSECT ELTE.HALLGAT relci szolgltatja1. A mveletek nem elemiek. Knnyen belthat, hogy pldul az R s S relcik metszete elllthat az albbi mveletek eredmnyeknt: R JOIN RENAME S (s1, r1; s2, r2; , sn, rn) (,r1,r2,,rn) azaz kpezzk a kt relci join-jt az sszes oszlop egyezsge alapjn. Szemlletesen gy tudjuk rzkeltetni az uni, a metszet s a klnbsg mvelett, ha az brzolsban eltekintnk attl, hogy a sorok sorrendjnek nincsen szerepe, s a kt relci megegyez sorait R-nek a vgre, S-nek pedig az elejre tennnk. (ld. 4.8. bra) Az unit, metszetet s a klnbsget az SQL nyelvben a SELECT utastsban klnbz SELECT utastsok eredmnynek sszevonsakor (ld. 5.3.4.4. pont) hasznljuk. 4.5.9. Bvts (EXTEND) Ltez relcibl j relcit kpezhetnk azltal, hogy j oszlopot adunk hozz. Az utasts ismtelt alkalmazsval akrhny oszloppal bvthetnk egy relcit. ltalnos formja: EXTEND R TO Rj ADD oszlopkpzs mdja AS rj, ahol rj a mdosts eredmnyeknt ltrejv Rj relci j oszlopa. Az j oszlopot gyakran a relci meglv oszlopaibl kpezzk aritmetikai mveletekkel, pl. az eredeti relciban szerepl ALAP s RTK oszlopokbl a SZZALKOS-RTK = 100* RTK/ALAP oszlopot. Ilyenkor Rj csak virtulis relci, nzet vagy lekrdezs eredmnye lehet. Ezt a mveletet az SQL nyelvben a nzetek ltrehozsval, a CREATE VIEW utastssal (ld. 5.14. tblzat:. pont) valstjuk meg. Ha egy fizikailag is ltez tblzatot adatainak, nevnek s szerkezetnek a megtartsval csak egy j oszloppal akarunk bvteni (R = Rj), akkor az oszlopkpzs mdja az j oszlop defincijt jelenti. Termszetesen ilyenkor az j oszlopnak alaprtelmezst kell adnunk, vagy meg kell engednnk benne a NULL rtket. A tblzat mr eddig ltez soraiban ez lesz az j oszlop rtke. Ezt a mveletet a gyakorlatban az SQL ALTER TABLE utastssal (ld. 5.6.2.3. pont) segtsgvel hajthatjuk vgre. Ez az utasts lehetsget ad meglv oszlop trlsre is, amit a bvts egy specilis formjnak is tekinthetnk. 4.5.10. Csoportkpzs (SUMMARIZE) A gyakorlati munkban igen sokszor elfordul, hogy nem kzvetlenl a kivlasztott adatokra, hanem azok klnbz csoportjaira jellemz adatokra, gynevezett aggregtumokra akarunk rtkeket megkapni. Ilyen lehet pldul egy szemlyi nyilvntartsban az sszes dolgoz fizetsnek az sszege, tlaga, a legalacsonyabb, vagy a legmagasabb fizets, vagy ugyanezek az rtkek a dolgozk egyes csoportjaira, pldul az azonos osztlyokon, vagy azonos munkakrben dolgozkra vonatkoztatva. Az ilyen relcikat tudjuk ltrehozni a csoportkpzs mveletvel.

Ez termszetesen csak akkor igaz, ha regisztrlskor a hallgatknak minden adatt (belertve az azonost HID-t is) azonosan vesznk fel mindkt egyetemen.

4-23

Ez az sszetett mvelet a bvts ltalnostsa. Az j relci sorai az eredeti soraibl csak a csoportra jellemz rtkeket (pl. maximum), vagy a kpzett rtket (pl. csoport tlag) tartalmazzk. ltalnos formja: SUMMARIZE R TO Rgroup GROUP BY csoportosts mdja ADD f1(r1) AS rgroup-1, f2(r2) AS rgroup-2, fi(ri) AS rgroup-i A csoportosts mdja hatrozza meg, hogy milyen csoportokra (pl. osztlyonknt, munkakrnknt) akarjuk meghatrozni az egyes rj attribtumoknak (pl. fizets, letkor) az fj(rj) csoportkpz mvelettel (pl. fizetsek tlaga, letkor maximuma) a kivlasztott csoportokra jellemz rtkt. Ha a csoportosts mdjt elhagyjuk, akkor az eredmny az egsz relcira vonatkozik. Ekkor Rgroup-nak csak egyetlen sora lesz. Ha megadjuk, akkor annyi sort kapunk, ahny csoportot tudunk R soraibl kpezni (ahny osztlyunk, vagy munkakrnk van a szemlyi nyilvntartsban). R eredeti oszlopaibl csak azokat tartjuk meg, amelyeknek rtkeit a csoportkpzs utn is rtelmezhetjk1. SUMMARIZE HALLGAT TO VFOLYAM-LETKOR GROUP BY VFOLYAM ADD VF AS VFOLYAM, MAXIMUM(SZDTUM) AS LEGIFJABB, MINIMUM(SZDTUM) AS LEGIDSEBB ellltja azt a relcit, amelyik minden vfolyamra egy sort ad, amelyik az vfolyamot, s az vfolyamra jr hallgatk szletsi dtumbl a legnagyobbat s a legkisebbet tartalmazza. A relci oszlopainak neve: VFOLYAM, LEGIFJABB, LEGIDSEBB. A csoportostst az SQL-ben a SELECT utasts (ld. 5.6.3.2. pont) GROUP BY klauzuljval valstjuk meg. 4.5.11. Kijells Clszer eddigi mveleteinket kiegszteni mg egy tovbbival. Ennek segtsgvel a relcis mveletek ltal ltrehozott relcinak egy nevet tudunk adni. Ezltal egy j, ltalban virtulis objektumot hozunk ltre az adatbzisban, mellyel mr egyszeren, a nevre val hivatkozssal dolgozhatunk, fggetlenl attl, hogy ellltsa a vals adatokbl milyen bonyolultan, hny lpsben trtnik. Formja: CREATE R(r1,r2,,rn) AS relcis mveletekkel ellltott relci A tetszleges relcis mveletek eredmnye az r1,r2,,rn oszlopokbl ll R relci. Az SQL nyelvben ennek a CREAT VIEW utasts (ld. 5.14. tblzat:. pont) felel meg.

Ha pldul osztlyonknt csoportostunk, akkor az OSZTLY oszlopot megtarthatjuk, hiszen ez ugyangy, mint a csoport rtkek (pl. osztlyonknti tlag fizets, vagy a maximlis fizets) egyrtelmen egy adott osztlyhoz kapcsoldik. Az egyes dolgozk nevei viszont nem lehetnek elemei az Rgroup relcinak, mert az osztly sok dolgozja kzl nem tudjuk eldnteni, ki legyen az az egy, aki az osztlyra jellemz sorban szerepeljen.

4-24

A relcis mveletek hasznossgnak illusztrlsra lltsuk el azt a relcit, amelyik az egyetemi adatbzisunk minden adatt tartalmazza. Ez az albbi mveletekkel hozhat ltre: [HALLGAT FULL JOIN MITHALLGAT (HID)] FULL JOIN TANTRGY (TID) A FULL JOIN-ra azrt van szksgnk, hogy megkapjuk azokat a hallgatkat is, akik egy tantrgyat sem vettek fel s azokat a tantrgyakat is, melyeket senki sem hallgat. A tovbbiakban, hogy ne kelljen esetleg klnbz tblzatokbl sszeszedni az adatokat, ezzel a relcival, melyben minden informci benne van, akarunk dolgozni. Ezrt kln nevet (TELJES-OKTATS) adunk neki. CREATE TELJES-OKTATS (VNV, KNV, HID, SZDTUM, VF, TID, GYAKPONT, OSZTLYZAT, TMEGNEV, OKTAT, RASZM, VIZSGA) AS [HALLGAT FULL JOIN MITHALLGAT (HID)] FULL JOIN TANTRGY (TID) Ebbl azoknak a hallgatknak a nevt s az azonostjt, akik egy tantrgyat sem vettek fel a PROJECT [RESTRICT TELJES-OKTATS WHERE TID IS NULL] (VNV, KNV, HID) mvelettel kaphatjuk meg1. Az elsves hallgatknak az egyes tantrgyakbl elrt tlagt2, s a legjobb osztlyzatot a SUMMARIZE [RESTRICT TELJES-OKTATS WHERE VF = 1] GROUP BY TMEGNEV ADD TMEGNEV AS TANTRGY, TLAG(OSZTLYZAT) AS TLAG, MAXIMUM(OSZTLYZAT) AS LEGJOBB-JEGY relcis mveletsorozat lltja el.3 Ha nem hoztuk volna ltre a TELJES-OKTATS (virtulis) relcit, akkor mindkt esetben join-ok segtsgvel kellene sszeszednnk a klnbz relcikbl az sszetartoz adatokat. 4.6. Normalizls Az adatbzis tervezs els lpse az, hogy sszegyjtjk, melyek azok az adatok, amelyekre a klnbz feldolgozsoknak szksgk van, vagy a belthat jvben szksgk lehet. A kvetkez lps az, hogy az gy sszellt s-koszt megprbljuk ttekinthet, jl kezelhet kisebb egysgekbe szervezni. Ez a kt lps adatmodelltl fggetlenl az adatbzis tervezs alfja s megja. A relcis modell egyeduralkodv vlsnak egyik oka az volt,
TELJES-OKTATSBAN azokhoz a HALLGAT azonostkhoz, melyekhez nem tartozik MITHALLGATban rtk (azaz egy tantrgyat sem vettek fel), TID rtke a FULL JOIN kvetkeztben NULL rtk lesz. 2 Azok a sorok, melyekben OSZTLYZAT NULL RTK nem vesznek rszt az tlag kpzsben. 3 A szgletes zrjelben lv RESTRICT kivlasztja az elss hallgatkat, s a TMEGNEV szerint csoportostst csak ezekre vgezzk el. Az TLAG(OSZTLYZAT) s MAXIMUM(OSZTLYZAT) jelli azokat a mveleteket, melyek az egyes csoportok osztlyzataira kiszmoljk az tlagot, illetve kivlasztjk a legmagasabb rtkt. Az j relciban a tantrgy nevt a TANTRGY oszlop tartalmazza.
1

4-25

hogy az adatok szszer, a gyakorlatban jl hasznlhat csoportostshoz, a relcik kialaktshoz elmletileg megalapozott, formlisan algoritmizlhat eljrst adott. Ezt az eljrst nevezzk normalizlsnak vagy normalizcinak. A normalizls mindig az adatok logikai szintjn trtnik. ltalban tbb lpsbl ll, melyek jelents rszt gyakorlott adatbzis-tervez kizrlag a jzan eszre s tapasztalatra alapozva minden elmlet nlkl elvgezne. A normalizlsi szablyoknak az ismerete ppen abban segt, hogy ne alkalmi megoldsokkal kelljen ksrletezni, s nehogy ppen emiatt a tervezskor valamilyen a gyakorlati munkban problmt, hibt okoz adatcsoportostsokat hozzunk ltre. Termszetesen a normalizls sem csodaszer. Szisztematikus alkalmazsval sem tudunk minden gondot mindig megoldani. Sokszor kerl szembe az adatbzis-felgyel azzal a problmval, hogy az elvileg tkletesen normalizlt relcikkal a rendszer lassan mkdik. Ilyenkor gyakran kompromisszumra knyszerl. A hatkonysg rdekben megelgszik a logikailag kevsb ttekinthet s kevsb tiszta, de nagyobb hatkonysgot biztost alacsonyabb fok normalizlssal. Az adattrhzak tervezsnl ez ltalnos is. Mindezek ellenre ltalnos rvnnyel kijelenthetjk, hogy a j normalizls kvetkeztben megsznik a redundancia, az adatok trol ignye kisebb lesz, az elemi adatokat gyorsabban s kevesebb hibalehetsggel vltoztathatjuk meg, az adatbzis logikailag ttekinthetbb lesz. A knnyebb rthetsg rdekben a normalizls folyamatt s problmit egy pldn mutatjuk be. Mieltt azonban erre rtrnnk, egy j fogalmat, a fggsg fogalmt kell bevezetnnk. A normalizcis elmlet s eljrs lnyegben ezen alapszik. 4.6.1. Fggsgek Brmely relciban egyes attribtumok rtkei fggnek ms attribtumok rtkeitl. Ez a fggs lehet Ers, amikor a fggsg ktelez rvny, mindig fennll. Ilyen pldul a hallgat egyetemi azonostja s neve kzti fggsg. Minden azonosthoz tartozik egy meghatrozott nv, s minden nvhez tartozik azonost. Gyenge, amikor a fggsg nem ktelez rvny. Csak akkor ll fenn, ha a fggsgi kapcsolatban lv attribtumoknak vannak rtkei. Ilyen pldul a hallgat egyetemi azonostja s a sportkri igazolvnynak szma kzti fggsg. Nem minden hallgat tagja a sportkrnek, de ha igen, akkor a kt attribtum kztt egyrtelm fggsg van. Hangslyozni kvnjuk, hogy a fggsgnek az adatbzisnak nem csupn egy adott pillanatban aktulis adataira kell fennllni, hanem mindig, minden idben. Termszetesen a fggsgi felttelek megvltoztathatk, de ez az adatmodell mdostst is eredmnyez(het)i. A normalizls folyamatnl a fggsgeket mindig egy relcin bell vizsgljuk. Ezeket is a relcik kzti fggsgekhez hasonlan, a 3.5. alfejezetben ismertetett kapcsolatokkal jellemezzk. Ha az R relciban az egyik attribtum (X), a fggetlen vltoz rtke egyrtelmen meghatrozza egy msik attribtum (Y), a fgg vltoz rtkt, akkor azt mondjuk, hogy Y az R relciban funkcionlisan fgg X-tl. Itt s a tovbbi defincikban is mind X, mind Y lehet sszetett, azaz llhat tbb oszlopbl is. A funkcionlis fggs jellse: R.X R.Y

4-26

Szoksos a fggsget grafikusan, funkcionlis fggsgi diagrammban, rviden fggsgi diagrammban is brzolni. Ezt ltjuk a 4.9. brn. A fggetlen attribtumbl nyl mutat a fggre. Az brn Y s Z is fgg funkcionlisan X-tl, Z pedig Y-tl is.

4.9. bra:

Funkcionlis fggs brzolsa.

Termszetesen arrl, hogy az egyes attribtumok kztt milyen fggsgek llnak fenn, az elvi modell semmit sem tud mondani. Ezt az adatbzis tervezjnek kell kidertenie az adott feladat krlmnyeinek az ismeretben. Egy rura adott kedvezmny mrtke fgghet a vtel idpontjtl (mindenkire rvnyes akcis r), a vev szemlytl, vagy a vsrolt mennyisgtl, esetleg mind a hromtl is. A relci defincijbl kvetkezik, hogy minden attribtum fgg az elsdleges kulcstl s nyilvnvalan ha van, akkor az sszes alternatv kulcstl is. A gyakorlatban elterjedtebb a funkcionlis fggsgnek a fent megadottal egyenrtk defincija: Egy R relciban az Y oszlop akkor s csak akkor fgg funkcionlisan az X oszloptl, ha brmely kt sorban, amelyikben X rtke azonos, azokban az Y rtkek is mindig azonosak. Fordtva termszetesen az llts nem kell, hogy igaz legyen. Azonos Y rtkekhez tartozhatnak klnbz X rtkek. gy pldul a TANTRGY tblzatban (ld. 4.2. alfejezet) a tantrgy megnevezse egyrtelmen meghatrozza az raszmot, de ugyanahhoz az raszmhoz tbb tantrgynv is tartozhat. Az X attribtumot, a relcinak azt az oszlopt, amelyik meghatrozza ms attribtum(ok), oszlop(ok) rtkt a relci meghatroz elemnek (determinant, determinns) nevezzk. A funkcionlis fggs egy 1:N kapcsolatot jelent a relcin bell. Ennek specilis esete az 1:1 kapcsolat, amikor az R relciban nem csak X rtke hatrozza meg egyrtelmen Y rtkt, hanem Y rtke is meghatrozza egyrtelmen X-et. Abban az esetben, ha X elsdleges kulcs, akkor Y alternatv kulcs. A normalizlsi eljrsban az alternatv kulcsoknak nem vizsgljuk a fggsi viszonyait. Az elsdleges kulccsal azonos funkcij attribtumnak tekintjk, s azzal azonos mdon kezeljk. Az egyedli eltrs, hogy a dekomponlssal (ld. 4.6.3. s 4.6.4. pont) ltrehozott j relcikba a kapcsolat biztostsra csak az elsdleges kulcsot visszk t. Plda klcsns fggsgre az rukd s az ru egyrtelm megnevezse, vagy a TAJ szm, adszm, szemlyi szm kzti egyrtelm kapcsolat. Az 1:1 kapcsolatot alternatv kulcsoknl a relcin bell az alternatv kulcsokra ltrehozott egyedi index-szel valsthatjuk meg. Nem alternatv kulcsoknl, illetve 1:N kapcsolatot jelent fggsgnl azonban ennek rvnyessgt egy relcin bell az adatbzis kezel rendszer nem tudja automatikusan biztostani. Ezt csak az alkalmazsokba beptett kln ellenrz eljrssal, programmal tehetnnk meg. A normalizlsi algoritmusnak a lnyege az, hogy a relcin belli fggsgeket a relcik talaktsval megszntetjk. A

4-27

helyesen normalizlt adatbzisba nem kerlhetnek be egymssal logikai ellentmondsban lv adatok. Hangslyozzuk, hogy mind a fgg, mind a fggetlen attribtum lehet sszetett is. Ttelezzk fel, hogy az adatbzisunkban a MITHALLGAT tblzatot (ld. 4.2. alfejezet) gy definiltuk, hogy belevettk a tantrgy nevt s oktatjt is. Termszetesen az elsdleges kulcs (hallgat-azonost, tantrgy-azonost) egyrtelmen meghatrozza az osztlyzatot, az oktatt s a tantrgy megnevezst is, de az utbbi kettt egyrtelmen meghatrozza az elsdleges kulcs egy rsze, a tantrgy azonostja is. Ezt gy mondjuk, hogy az osztlyzat funkcionlisan teljesen fgg a (hallgati-azonost, tantrgy-azonost) fggetlen oszlop kombincitl, mg az oktat s a tantrgy neve funkcionlisan fgg, de csak funkcionlisan nem teljesen fgg tlk. ltalnosan megfogalmazva: Az R relciban az Y attribtum akkor s csak akkor fgg funkcionlisan teljesen az X (sszetett) attribtumtl, ha funkcionlisan fgg X-tl, de nem fgg X egyetlen valdi sszetevjtl sem. Ha X nem sszetett, akkor a funkcionlis s a teljes funkcionlis fggsg ugyanazt jelenti. Tovbbi plda funkcionlis, de nem teljes funkcionlis fggsgre egy tbbtteles szlltlevl, amely tbbek kztt tartalmazza a szlltlevl szmt, az ru kdjt (a kett egytt az elsdleges kulcs), az ru nevt, mennyisgt, rt s a szllts dtumt. Itt a mennyisg funkcionlisan teljesen fgg az elsdleges kulcstl, mg a tbbi mr nem. A dtumot a szlltlevl szma, az ru nevt s rt az rukd, az elsdleges kulcs egyik sszetevje mr egyrtelmen meghatrozza.1 Ezen alapvet fggsgi kapcsolatok mellett szksgnk lesz mg a tbbrtk funkcionlis fggsg definilsra is. Ekkor a fggetlen vltoz a fggnek nem egyetlen egy rtkt hatrozza meg, hanem a lehetsges rtkeknek egy egyrtelmen meghatrozott rszhalmazt. Pldul a TANTRGY relciban egy tantrgyat nem csak egy oktat tanthat, hanem tbb is, de nem mindegyik. Adott trgyat csak meghatrozott oktatk tanthatnak. Az X,Y,Z attribtumokkal rendelkez R relciban Y akkor s csak akkor van tbbrtk funkcionlis fggsgben X-tl, ha brmely adott X s Z rtkhez tartoz lehetsges Y rtkek csak X rtktl fggenek, Z-tl fggetlenek. A tbbrtk funkcionlis fggs jellse R.X R.Y A tovbbiakban megmutatjuk, hogyan tudjuk az adatmodellnket a fggsgek ismeretben a normalizls segtsgvel logikailag tisztbb, gyakorlatilag hasznlhatbb llapotba hozni. 4.6.2. Els norml forma (1NF) A normalizls folyamatnak megrtsre ksztsk el az albbi feladat adatmodelljt: Nyilvntartst kell ksztennk a vllalat alkalmazottairl. Minden alkalmazottrl szksgnk van az albbi adatokra (zrjelben az oszlop elnevezse az adatbzisban):

Felttelezzk, hogy az ru itt feltntetett ra (alapr) mindenkinek ugyanaz, legfljebb ebbl egyesek kedvezmny(eke)t kaphatnak, ami(k) tovbbi attribtum(ok) lehet(nek). Amennyiben idben vltoz rakkal kell szmolnunk, akkor az r pldul az (rukd, szlltsi-dtum), de lehet, hogy egy (rukd, rendelsi-dtum) kombincitl fgg. Ezeket a feltteleket termszetesen a konkrt logikai tervezskor kell szrevenni s bepteni az adatmodellbe.

4-28

szemlyi azonost szm (SZSZM), vezetknv (VEZ-NV), keresztnv (KER-NV), osztly kdja, ahol dolgozik (OSZT), osztly megnevezse (OSZT-NV), tma kdja, amelyen dolgozik (TKD), tma megnevezse (TMA), munkaidejnek hny szzalkban dolgozik a tmn (MEGOSZL), szletsnek ve (SZV), osztlya fnknek szemlyi azonost szma (FNK), A vllalati felttelek tovbbi elemzse alapjn megllaptjuk, hogy a szemlyi azonostszm egyedi, az osztlyok kdja s megnevezse egyedi, a kett kztt egyrtelm kapcsolat ll fenn, ugyanez rvnyes a tmra s tmakdra is, egy dolgoz csak egy osztlyhoz tartozhat, de tbb tmn is dolgozhat, a tmk s az osztlyok kztt nem kell kapcsolatot teremtennk, nem kell automatikusan ellenriznnk, hogy a tmk sszessgre fordtott id a dolgoz teljes munkaideje-e (100%). Az adatokat osztlyonknt gyjtjk be. gy az indul tblzatunk osztlyonknt egyegy rekordot, sort tartalmaz, melynek els mezje az osztly kdja, msodik az osztly neve, utna annyiszor jnnek az egyes dolgozk fent felsorolt adatai, ahny dolgoz van az osztlyon. Vgl az utols mez az osztly vezetjnek azonost szma. (ld. 4.10. bra)

4.10. bra:

Az adatbzis felptshez szksges adatok osztlyonknt sszegyjtve.

4-29

Ez a tblzat, melynek sorai az egyes osztlyok adatai, nem relci.1 Egymsba gyazott ismtld mezk vannak benne. Elszr ismtldnek az alkalmazottak, minden osztlyon bell annyiszor, ahny alkalmazott dolgozik az osztlyon. Ezutn az egyes alkalmazottakat tartalmaz adatcsoporton bell ismtldnek a tmval kapcsolatos adatok, minden alkalmazottnl annyiszor, ahny tmn dolgozik. Ahhoz, hogy a relcis modellben ennek a tblzatnak az adataival dolgozni tudjunk, t kell ezt alaktanunk valdi relciv. Meg kell szntetnnk az ismtld mezket. Ezt gy rjk el, hogy egy olyan j tblzatot hozunk ltre, melynek oszlopai ugyanazok, mint az eredeti tblzat oszlopai, de az ismtld mezk adatait csak egy oszlop tartalmazza ismtlds nlkl. Az ismtld mezk minden egyes rtkhez egy nll sort rendelnk hozz, melynek a tbbi adata azonos az ismtld elem ehhez az rtkhez tartoz tbbi, nem ismtld oszlop rtkvel. Az eljrs algoritmusa a kvetkez: Eredeti relci oszlopai talaktott relci oszlopai Eredeti sor talaktott sorok A A a a a a B B b b b b C (ismtld) D C D c1, c2, c3 c1 c2 c3 d d d d

ahol a, b, d a sor A, B s D nem ismtld oszlopainak az rtkei, c1, c2, c3 pedig ugyanezen sorban a C klnbz ismtld rtkei. Az gy kapott tblzat mr megfelel a relcik legltalnosabb feltteleinek. Azt mondjuk, hogy a relci els norml formban (1NF) van. A 4.10. bra els norml formba talaktott adatait a 4.11. brn lthatjuk. Az egymsba gyazott ismtldst elvileg kt lpsben oldottuk fel. Elszr az alkalmazottak, majd ezutn a tmk szerinti ismtldst eliminltuk. Az brn a kt mvelet egyttes eredmnyt lthatjuk.

4.11. bra: Els norml formba hozott relci. Az ismtld mezk kikszblsvel a 4.10. bra adatait az ALKALMAZOTT-1NF 1NF relciba hoztuk. Az elsdleges kulcs a (SZSZM, TKD) oszlopkombinci.

Szoks ezt nulladik norml formban lv (0NF) relcinak is nevezni.

4-30

ltalnosan azt mondhatjuk, hogy egy tblzat adatai els norml formban vannak, 1NF relcit alkotnak, ha teljeslnek a 4.1. alfejezetben rszletezett felttelek, azaz minden oszlop egy s csak egy attribtumot jelent, minden sor klnbzik, az attribtumok sorrendje minden oszlopban ugyanaz, nincsenek ismtld mezk, minden sorhoz tartozik (legalbb egy) egyedi kulcs, melytl az sszes tbbi oszlop funkcionlisan fgg.1 Minden relcis adatbzis-kezel rendszer megkveteli, hogy az adatok legalbb els norml formban (1NF) legyenek. Br ezen a normalizltsgi szinten mg sok problma s hiba flmerlhet, ennl magasabb normalizls mr nem szksges, de mint azt a kvetkez pontokban ltni fogjuk ltalban javasolt. Egy ilyen hibt rgtn szrevehetnk. Tves adatbevitel, vagy nem az sszes adaton konzisztensen vgrehajtott mdosts miatt a Titkrsg fnke az egyik sorban 01492, mg az sszes tbbiben 69690. Az adatbzisbl nem tudjuk eldnteni, melyik a helyes rtk. Ahhoz, hogy az 1NF felttelei valban teljeslnek-e a pldban, meg kell mg vizsglni, van-e az ALKALMAZOTT-1NF-nek elsdleges kulcsa. A szemlyi azonostszm (SZSZM) nmagban mg nem az, mert br a csak a szemlyhez ktd adatokat (VEZNV, KER-NV, SZV) s az osztllyal kapcsolatos adatokat (OSZT, OSZT-NV, FNK) egyrtelmen meghatrozza, a tmhoz ktdket (TKD, TMA) s a MEGOSZLst mr nem, mivel egy szemly tbb tmn is dolgozhat. De az (SZSZM, TKD) oszlopkombincitl mr minden tovbbi oszlop funkcionlisan fgg. Ezrt ez lesz az elsdleges kulcs. A TKD TMA egyrtelm klcsns fggsg kvetkeztben az (SZSZM, TMA) alternatv kulcs. Az ismtld elemek felismerse ltalban trivilis. Nha azonban nem olyan egyszer ezt szrevennnk. Ilyenkor az ismtld tulajdonsg defincijra tmaszkodhatunk, mely szerint az egyedtpus ismtld elemet tartalmaz, ha ltezik olyan tulajdonsga, amelyik funkcionlisan fggetlen az elsdleges kulcstl. A fentiekre plda lehet egy olyan szemlyi nyilvntarts, melynek egyik oszlopa a legmagasabb iskolai vgzettsg. Nincs problma, ha a Zeneakadmiai s a Blcsszkari diplomt is egybemosva egyformn egyetemnek tekintjk s az oszlopba csak egyetemet runk be. De ha a diploma tpusval is jellemezni akarjuk a legmagasabb vgzettsget, melyik a magasabb, a megyetemi villamosmrnk, az okleveles fizikus, vagy az okleveles kzgazda? Mit rjunk be ebbe a rovatba, ha valakinek tbb egyetemi diplomja van? Ez, ha jl akarjuk megoldani, egy burkolt ismtld mez, amit ha nem oldunk fel, jvtehetetlen hibkhoz vezethet. (Nem talljuk meg a legjobb sebsz orvost vagy adszakrtt, mert az els diplomja alapjn tanrknt van nyilvntartva). 4.6.3. Msodik norml forma (2NF) Nem kell hozz tl nagy intelligencia, hogy lssuk, a 4.11. brn lv 1NF relci nagyon sok redundancit tartalmaz. Azonnal szembetlik, hogy flsleges minden osztly s minden tma megnevezst az sszes sorban kln feltntetni. Elegend lenne osztlyonknt, illetve tmnknt csupn egyszer megadni. De ezeken a nyilvnval redundancikon kvl ms, jobban rejtett hibalehetsgek is vannak ebben a relciban, melyek szrevtele mr egyltalban nem trivilis. Nzzk meg, mi trtnik, ha Andrsfai Bla, vagy Vigcz Jen kilp, azaz adatait trljk a relcibl. Ebben az esetben automatikusan eltnik az O2, Oktats tma, illetve az
Igen sok adatbzis-kezel rendszer nem kveteli meg formailag az elsdleges kulcsot. Ennek ellenre a biztonsgos munkhoz ezekben is clszer minden tblzatra elsdleges kulcsot definilni.
1

4-31

E01, Elads osztly is. Ez egyben azt is jelenti, hogy ha ksbb jra eljn ez a tmakd vagy osztlykd, akkor nem tudjuk, hogy ezekhez az Oktats, s az Elads elnevezsek tartoznak, illetve ezeknek az elnevezseknek mi a kdja. Akaratlanul, de trltnk az adatbzisbl olyan informcikat, amelyekre pedig tovbbra is szksgnk lenne. Ezt hvjuk trlsi anomlinak. Tovbbi problmt okozhat, ha Tth Csilla frjhez megy, vagy pldul a Titkrsgra j fnk kerl. Mindkt esetben tbb sort kell egyidejleg megvltoztatnunk, hogy adataink konzisztensek maradjanak. Azt a problmt, hogy egy adat mdostsakor tbb helyen kell mdostst eszkzlnnk, mdostsi anomlinak nevezzk. Ez arra vezet, hogy ha a mdostst nem hajtjuk vgre konzisztensen, akkor az adatbzisban ellentmonds jhet ltre. Ezt lthatjuk a 4.11. brn is, ahol a Titkrsg fnkt feldolgozsi hiba miatt vagy Mohcsi Gyznl, vagy a Titkrsg tbbi dolgozjnl nem mdostottuk. Gondjaink lehetnek j sorok bersnl is, amit bersi anomlinak neveznk. Ha egy j osztlyt hozunk ltre a vllalatnl, amelyiknek mg nincs egy dolgozja sem, vagy egy j dolgozt vesznk fel, de mg nem tudunk egy tmt sem kijellni a szmra, akkor ezt az informcit nem tudjuk bevinni az adatbzisba. Mindkett olyan sort eredmnyezne az ALKALMAZOTT-1NF relciban, melyben az elsdleges kulcs, vagy annak egy rsze a NULL rtk lenne. A fent ismertetett anomlikat sszefoglal nven vltoztatsi anomliknak nevezzk, s ha elfordulnak, akkor sok gondot okozhatnak. Ahhoz, hogy mindezen problmk gykert tisztn lssuk, rajzoljuk fel a 4.11. brn lthat ALKALMAZOTT-1NF relci fggsgi diagrammjt (4.12. bra). A fggsgi diagrammbl lthatjuk, hogy a szemlyi azonostszm (SZSZM) s tmakd (TKD) sszetett elsdleges kulcstl funkcionlisan teljesen csak a szzalkos megoszls (MEGOSZL) fgg. Az sszes tbbi attribtum az elsdleges kulcsnak csak egy sszetevjtl (TKD illetve SZSZM) fgg.1

4.12. bra:

A 4.11. brn lthat ALKALMAZOTT-1NF relci fggsgi diagrammja.

Msodik norml formban (2NF) akkor s csak akkor van egy relci, ha 1NF-ben van, s az sszes nem kulcs attribtum funkcionlisan teljesen fgg az elsdleges kulcstl. Elemi elsdleges kulcs 1NF relcik automatikusan 2NF-ben is vannak. sszetett elsdleges kulcs relcikat azonban a vltoztatsi anomlik megszntetse rdekben 2NF1

Az brn mg feltntettk azt is, hogy az OSZTLY s a FNK nem csak SZSZM-tl, hanem az OSZT attribtumtl is fgg, ami nem rsze az elsdleges kulcsnak. Ennek a msodik norml formba alaktsnl nincs jelentsge, a harmadik norml formba hozsnl fogjuk majd figyelembe venni.

4-32

re kell hoznunk. (Ez nem biztos, hogy megsznteti az sszes anomlit, de jelentsen cskkentheti a szmukat). Ezt a mveletet nevezzk a relcik sztbontsnak, vagy dekompozcinak. A dekompozci reverzibilis mvelet. A sztbontott relcikat mindig vissza lehet lltani az eredeti llapotukba. Az 1NF 2NF 3NF formk kzti dekompozci mindig vesztesgmentes, az talaktssal nem vesztnk ismereteket. Az ezeknl magasabb norml formkba (ld. 4.6.7. pont) val talaktsnl elfordulhat, hogy a dekompozci kvetkeztben informcit veszthetnk, melynek megtartsrl ms mdn, pldul program segtsgvel kell gondoskodnunk. A sztbonts gy trtnik, hogy az 1NF relcibl projekcival olyan 2NF relcikat lltunk el, melyeknek elsdleges kulcsai az eredeti relci elsdleges kulcsa, illetve annak rszei, oszlopai pedig azok s csak azok, amelyek az j elsdleges kulcstl funkcionlisan teljesen fggenek. ltalnosan megfogalmazva, ha az A,B,C,D oszlopokkal rendelkez 1NF R relciban A,B kombincija az elsdleges kulcs, C funkcionlisan teljesen fgg tle, de D funkcionlisan fgg A-tl, azaz R(A, B, C, D) s R.A R.D, akkor a msodik norml formba trtn talakts az eredeti R relcinak a kvetkez kt j relcira val sztbontsval helyettesthet: R1(A, D) s R2(A, B, C) ahol R2.A idegen kulcsknt hivatkozik R1.A-ra. Az idegen kulcs az adatbzis integritsa s az talakts megfordthatsga s vesztesgmentessge rdekben szksges. Ez biztostja, hogy az R1 s R2 relciknak A alapjn trtn sszekapcsolsa, az R1 JOIN R2 (A) mvelet mindig ellltja az R relci minden egyes sort, csak azokat lltja el, s mindegyik sort pontosan egyszer.1 Amennyiben R sszetett kulcsnak tbb rsztl (melyek mg maguk is lehetnek sszetettek) is fggenek oszlopok, akkor ezek mindegyikre elvgezzk ezt a felbontst, mint ezt a pldnkban is megtesszk a TKD s az SZSZM attribtumokra. Az ALKALMAZOTT-1NF nincs msodik norml formban. Az (SZSZM,TKD) sszetett elsdleges kulcstl csak MEGOSZL fgg funkcionlisan teljesen. Ezrt a dekompozci utn ez lesz az egyik relci. Emellett kt j relcit kapunk. Ezeknek a kulcsai SZSZM illetve TKD, oszlopai pedig az eredeti relcinak azok az oszlopai, melyek ettl funkcionlisan (teljesen) fggenek. A 2NF-re val sztbonts utn az egyes relcik neve, elsdleges s idegen kulcsai, oszlopai: ALKALMAZOTT-2NF (OSZT, OSZT-NV, SZSZM, VEZ-NV, KER-NV, SZV, FNK) MIT-CSINL? (SZSZM, TKD, MEGOSZL)
Ez abbl kvetkezik, hogy az idegen kulcs miatt minden R2(A, B, C) sorhoz kell tallnunk azonos A rtkkel rendelkez R1(A, D) sort, s mivel ebben A elsdleges kulcs, ezrt csak egyet tallhatunk.
1

4-33

ahol SZSZM s TKD idegen kulcsknt hivatkozik ALKALMAZOTT-2NF-re, illetve VLLALATI-TMA-ra. VLLALATI-TMA (TKD, TMA) Az gy ltrejtt tblzatokat a 4.13. brn lthatjuk.

4.13. bra:

A 4.11. brn lthat ALKALMAZOTT-1NF relci sztbontsa 2NF relcikra.

Ezzel a sztbontssal a vltoztatsi anomlik j rszt automatikusan kikszbltk. gy pldul Andrsfai Bla kilpsvel nem sznik meg sem az O2 tmakd, sem az Oktats tma, sem az O2 Oktats kapcsolat (megsznt trlsi anomlia). Tth Csilla nevt csak

4-34

egy helyen, ALKALMAZOTT-2NF-ben kell megvltoztatni (megsznt mdostsi anomlia). j dolgozt is felvehetnk ebbe a relciba anlkl, hogy tmt adnnk neki (megsznt bersi anomlia). A tbbi problma azonban mg tovbbra is fennmarad. Azokat, mint azt a kvetkez pontban ltni fogjuk, a harmadik norml formba val talakts kszbli csak ki. Ez a sztbonts teljes, azaz az sszes olyan informcit tartalmazza, ami az eredeti relcikban benne volt. De ezen kvl tbb is van benne. Az, hogy ltezik O2 tmakd s a megnevezse Oktats, mg az eredeti relci ezeket csak addig tartalmazza, amg van legalbb egy alkalmazott az adatbzisban, aki ezen a tmn dolgozik. 4.6.4. Harmadik norml forma (3NF) A msodik norml formba hozott relcikkal mg mindig lehetnek gondjaink. Az ALKALMAZOTT-2NF-ben a nyilvnvalan redundns osztly nevek s fnk azonostk mellett mg mindig megmaradtak az albbi vltoztatsi anomlik: Vigcz Jen kilpsvel (trlsvel) eltnnek az Elads osztlyra vonatkoz informciink. (Trlsi anomlia) Ha egy osztlynak j fnke lesz, akkor azt tovbbra is tbb helyen kell vgigvezetni.1 (Mdostsi anomlia) Tovbbra sem tudunk j osztlyt felvenni az adatbzisba, amg nincsen legalbb egy dolgozja. (Bersi anomlia) Ha felrajzoljuk a msodik norml formban lv adatmodellnk fggsgi diagrammjt (4.14. bra), akkor lthatjuk, hogy az sszes olyan funkcionlis fggsg, amelyik nem elsdleges kulcsbl indul ki, az osztly kdbl (illetve a vele 1:1 fggsben ll osztlynvbl) indul ki, s az sszes anomlia is ehhez az attribtumhoz kapcsoldik.

4.14. bra:

A 4.13. brn lthat ALKALMAZOTTAK-2NF relci fggsgi diagrammja.

Ha j relcik ltrehozsval ezeket a fggsgeket is megszntetjk, akkor a modellnk minden relcija harmadik norml formban (3NF) lesz. Ekkor, mint ltni fogjuk, a mg megmaradt vltoztatsi anomlik is megsznnek.

A mr szlelt ellentmonds a Titkrsg fnknl, mint ltjuk, mg mindig megmaradhatott ALKALMAZOTT-2NF-ben.

4-35

Egy relci akkor s csak akkor van harmadik norml formban (3NF), ha msodik norml formban van, s az elsdleges kulcshoz nem tartoz attribtumai csak az elsdleges kulcstl fggenek funkcionlisan. Mskppen megfogalmazva, a harmadik norml forma azt jelenti, hogy a nem kulcs elemek funkcionlis fggse csak az elsdleges (s az alternatv) kulcsokbl indulhat ki. Az ALKALMAZOTT-2NF relci nincs 3NF-ben, mert pldul az osztly kd (OSZT) nem elsdleges (vagy alternatv) kulcs, s ms oszlopok (OSZT-NV, FNK) funkcionlisan fggenek tle. Az bra msik kt relcija mr 3NF-ben van.

4.15. bra:

A 4.11. brn lthat ALKALMAZOTT-1NF relci sztbontsa 3NF relcikra (felhasznlva a 4.13. brn lthat 2NF felbontst).

4-36

A sztbonts gy trtnik, hogy elszr vesszk a 2NF relcinak azt a projekcijt, amelyik csak azokat az attribtumokat tartalmazza, melyek kizrlag az elsdleges kulcstl fggnek. Ennek elsdleges kulcsa ugyanaz marad. A msik j relci (vagy relcik, ha tbb attribtumbl is indul ki fggs) elsdleges kulcsa a sztbontott relci fggetlen attribtuma, oszlopai pedig a tle fgg attribtumok. A feladat 3NF-re talaktott relciit a 4.15. brn lthatjuk. Ennl a felbontsnl a 2NF-nl mg megmarad vltoztatsi anomlik, amiket a pont elejn emltettnk, automatikusan eltnnek.1 ltalnosan megfogalmazva, ha az A elsdleges kulcs s a B,C,D tovbbi attribtumokkal (brmelyik lehet sszetett is) rendelkez 2NF R relciban C funkcionlisan fgg B-tl, azaz R(A, B, C, D) s R.B R.C akkor a 3NF-be val sztbonts a kvetkez relcik ltrehozst jelenti: R1(B, C) s R2(A, B, D) ahol R2.B idegen kulcsknt hivatkozik R1.B-re. Az R relcit egyrtelmen vissza tudjuk lltani R1 s R2 relcik B alapjn trtn sszekapcsolsval (join). Lnyeges azonban, hogy a sztbonts a fenti algoritmus alapjn trtnjen. Elvileg ugyanis felbonthatnnk az ALKALMAZOTT-2NF relcit pldul a kvetkez mdon is ALK-ROSSZ-3NF (SZSZM, FNK, VEZ-NV, KER-NV, SZV) OSZTLY (OSZT, OSZT-NV, FNK). A kt relci FNK szerint trtn sszekapcsolsbl nem csak az eredeti ALKALMAZOTT-2NF relci sszes sort kapnnk meg, hanem tovbbi, hamis sorokat is, amik akkor keletkeznnek, ha ugyanaz a szemly tbb osztlyt is vezet, ami el is fordulhat. A relcik alapjn semmifle lehetsgnk nincs ezek kiszrsre, gy ebbl az adatbzisbl azokrl az alkalmazottakrl, akiknek a fnke tbb osztlyt vezet, nem tudnnk egyrtelmen megmondani, melyik osztlyon dolgoznak. Termszetesen addig, amg az adataink kztt nincsen tbb osztlyt is vezet szemly, az adatmodellnek ezt a hibjt nem vennnk szre. A relcis adatmodell realizlshoz meg kell mg adnunk az egyes relcik oszlopainak jellemzit, az adattpust (belertve az adatok hosszt is), esetleges alaprtelmezsket, s a kulcsokon felli tovbbi korltozsokat is. Ezeket a vllalatnl trtn nyilvntarts feltteleinek tovbbi elemzse alapjn llapthatjuk meg. Br a 3NF relcik logikailag tiszta kpet nyjtanak, a gyakorlatban sokszor nem rdemes az adatmodellt, az adatbzis minden relcijt harmadik norml formba hozni. (Emlkeztetnk arra, hogy a relcis adatbzis-kezel rendszereknek elg az 1NF is!) Ebben az esetben ugyanis a felhasznl szmra tnylegesen szksges adatokat sokszor tbb relcibl, tbb fizikai rekordbl szedi ssze a rendszer. Ez ltalban jval tbb lemezkezel mveletet, hosszabb feldolgozsi idt jelent. ppen ezrt bizonyos esetekben az adatbzisfelgyel tudatosan nem vgzi el a normalizlst a 3NF szintig, megelgszik a 2NF st az 1NF alakkal is. Klnsen clszer ez, ha az egymstl fgg adatokra rendszeresen egytt van szksgnk, s az adatok rtke arnylag ritkn vltozik. Termszetesen ilyenkor az
1

Termszetesen azt, hogy a Titkrsg fnke 01492, vagy 69690, azt ms informcikbl kell eldntennk.

4-37

esetleg fellphet vltoztatsi anomlik kikszblsrl az adatbzis-felgyelnek, vagy a felhasznlnak sajt magnak kell gondoskodnia. Tipikus gyakorlati plda a 3NF elhagysra egy szemlyi nyilvntarts, mely a pontos cmben az irnytszmot is tartalmazza. Mivel az orszg, vros (helysg), kerlet, utca hzszm egyttesen egyrtelmen meghatrozza az irnytszmot (legalbbis egy jl szervezett vrosban), ez a relci nem lesz harmadik norml formban. Ennek ellenre minden sszer alkalmazsban a cm az irnytszmot is tartalmazza. Elssorban azrt, mert ezek mindig egytt kellenek. Msodsorban azrt, mert az irnytszm szinte soha sem vltozik, teht csak egyszer kell jl sszeprostani a tbbi cm adattal. s vgl azrt, mert ha az rtkt mindig ki akarnnk szmolni a tbbi cmadatbl, azt csak meglehetsen bonyolult s hosszadalmas algoritmussal tudnnk megtenni, s ezt a mveletet minden cm meghatrozsakor vgre kellene hajtani. Az adattrhzakban (ld. 9. fejezet), melyeknek egyszer bert sorai nem mdosthatk rendszeresen dolgozunk 1NF s 2NF relcikkal is. 4.6.5. A dekomponls ms lehetsgei Az els norml formba alaktshoz (ld. 4.6.2. pont) az ismtld mezket ms eljrssal is kikszblhetjk. Az ismtlds ltalban egy N:M, specilis esetben egy 1:N kapcsolatot fed el. Amikor az osztly rekordban feltntettk az alkalmazottakat, illetve az alkalmazott rekordjban feltntetjk azt is, hogy milyen tmkon dolgozik, akkor valjban az osztlyok s alkalmazottak kztt fennll egy-tbb kapcsolatot (egy osztlynak tbb dolgozja lehet, de egy dolgoz csak egy osztlyhoz tartozhat), illetve az alkalmazottak s tmk kzt fennll tbb-tbb kapcsolatot (egy alkalmazott tbb tmn dolgozhat, s egy tmn tbb alkalmazott dolgozhat) vittnk be egy relciba. Az egy-tbb kapcsolat megvalstst idegen kulccsal, a tbb-tbb kapcsolat sztbontst kapcsol rekordok kzbeiktatsval a 3. fejezetben ismertettk. Ugyanezt alkalmazhatjuk itt is. Az ismtld elemet egy j relciba visszk ki, s idegen kulccsal (1:N kapcsolatot jelent ismtlds) vagy kapcsol rekorddal kapcsoljuk az eredeti rekord ismtldst nem tartalmaz rszhez (N:M kapcsolatot jelent ismtlds). gy a 4.10. brn lthat, ismtld elemeket tartalmaz mlesztett osztly-sorok oszlopaibl kiemeljk az ismtld alkalmazott adatokat (SZSZM, VEZ-NV, KER-NV, SZV) s az idegen kulcs kapcsolatot biztost OSZT attribtumot egy nll ALKALMAZOTT relciba, mely hivatkozik a nem ismtld osztly adatokat tartalmaz OSZTLY (OSZT, OSZT-NV, FNK) relcira. Ezutn az ALKALMAZOTT-on bell ismtld TKOD,TMA attribtumokat is kivisszk egy nll VLLALATI-TMA relciba amit egy kapcsol rekorddal (clszer elnevezse MITCSINL) ktnk hozz az alkalmazott nem ismtld adatait (SZSZM, VEZ-NV, KERNV, SZV) tartalmaz ALKALMAZOTT relcihoz. Ezzel ugyanahhoz a 3NF adatmodellhez jutottunk, mint az egyms utn kvetkez magasabb norml formkba lpsenknt trtn talaktssal. Ugyanezt az adatmodellt megkaphatjuk egy jl tgondolt Entity Relationship Modellbl is. A feladat lers alapjn nyilvnval, hogy a kiindul entitsaink: ALKALMAZOTT (SZSZM, VEZ-NV, KER-NV, SZV) OSZTLY (OSZT, OSZTLY, FNK) VLLALATI-TMA (TKD, TMA) A kztk fennll 1:N ALKAMAZOTT OSZTLY s az N:M ALKALMAZOTT VLLALATI-TMA kapcsolatok alapjn beiktatott MIT-CSINL kapcsol relcival ugyangy a 4.15. brn lthat, a normalizls vgeredmnyeknt kapott adatmodellhez jutunk el. 4-38

4.6.6. Nzetek definilsa normalizlt relcikbl Mindezideig a hatkonysg rdekben tett esetleges kivtelektl eltekintve a normalizlsnak csak elnyeit lthattuk. Az tlagos felhasznl szmra azonban ezek az elnyk semmiv zsugorodnak, ha pldul a 4.15. brn lthat normalizlt relcikbl az egyik leggyakoribb krdst Egy adott nev alkalmazott milyen nev osztlyon, milyen elnevezs tmkon, s azokon milyen megoszlsban, munkaideje hny szzalkban dolgozik mindig csak a ngy tblzat sszekapcsolsnak explicit megadsval tudn csak megfogalmazni. ppen ezrt a normalizlst a felhasznlk munkjnak megknnytsre az adatbzisokban csak a fizikailag is trolt adatokra, az SQL tblzatokra (ld. 5.3.6. pont) vgzik el. Ezekbl aztn a relcis mveletek segtsgvel az sszes olyan virtulis relcit, SQL nzetet (ld. 5.3.6. pont) el lehet lltani, melyekre a felhasznlnak rendszeresen szksge lehet. Ezek a nzetek mr gyakran csak 1NF relcik. A felhasznlk azonban ezekre a nzetekre hivatkoznak, melyekben az adatok az ltaluk kvnt mdon, ltszlag redundnsan, de egyszeren kezelheten, egytt jelennek meg. gy pldul az ezen pont elejn megfogalmazott krdsre definilhatunk egy KI-HOLMIN-DOLGOZIK nzetet, mely adatmodellnk mind a ngy relcijnak joinjbl projekcival jtt ltre s minden dolgozra az albbi adatokat tartalmazza: Szemlyi azonost szm (SZSZM), vezetknv (VEZ-NV), keresztnv (KER-NV), osztlynak megnevezse (OSZT-NV), azoknak a tmknak a megnevezse, melyeken dolgozik (TMA), munkaidejnek hny szzalkban dolgozik az egyes tmkon (MEGOSZL). Az j, virtulis relci a mr meglv tblzatokbl az albbi relcis mveletekkel jn ltre: KI-HOL-MIN-DOLGOZIK = PROJECT {[[ALKALMAZOTT-3NF JOIN OSZTLY (OSZT)] JOIN MIT-CSINL (SZSZM)] JOIN VLLALATI-TMA (TKD)} (SZSZM, VEZ-NV, KER-NV, OSZT-NV, TMA, MEGOSZL) A nzetben minden dolgozrl annyi sor lesz, ahny tmn dolgozik.1 A KI-HOL-MIN-DOLGOZIK nzet oszlopainak ismeretben, a fent emltett krds az albbira egyszersdik: Krem a KI-HOL-MIN-DOLGOZIK adott nev alkalmazottal jellemzett sorait. PROJECT {RESTRICT KI-MIN-HOL-DOLGOZIK? WHERE VEZ-NV = keresett dolgoz vezetkneve AND KER-NV = keresett dolgoz keresztneve} (VEZ-NV, KER-NV, SZSZM, OSZT-NV, TMA, MEGOSZL) A krdeznek semmi szksge nincs arra, hogy tudja, miknt jtt ltre ez a nzet az eredeti tblzatokbl, s hogy a krds megvlaszolshoz milyen utakon fog hozzfrni a rendszer. A feldolgozs egyszerbb ttele mellett gyakran hoznak ltre nzeteket adatvdelmi szempontokbl is. Ha egy felhasznl nem dolgozhat egy relci minden sorval/oszlopval,
Ha lehet olyan dolgoz, aki egy tmn sem dolgozik, vagy nem tartozik osztlyhoz, akkor kls joint kellene hasznlnunk.
1

4-39

akkor egy olyan nzetet hozunk ltre korltozssal/projekcival, amelyik ennek csak az ltala feldolgozhat rszt tartalmazza. A felhasznl a jogosultsgot nem a relcira kapja, hanem csak erre a nzetre. Hangslyozni kvnjuk, hogy a virtulis relcik, a nzetek ltrehozsa csak a feladat megfogalmazst knnyti, gyorstja meg, az adatokhoz val fizikai hozzfrs nem vlik gyorsabb. St, ha rosszul hasznljuk ket, pldul tbb tblzatra pl nzetbl csak egy tblzat adataira van szksgnk, akkor a nzetre val hivatkozs mg lassthatja is a feldolgozst. Az adatbzis-kezel rendszer ahelyett, hogy egy tblzatbl kzvetlenl kivlasztan a krt adatokat, elbb sszelltja tbb tblzatbl a nzetet, majd ebbl veszi ki az ugyangy csak egy tblzatra pl elrsi t alapjn az adatokat. 4.6.7. Magasabb norml formk Mint azt mr tbbszr megllaptottuk, a gyakorlatban a legtbb esetben clszer s elegend is az adatmodellt harmadik norml formban lv relcikra alapozni. Az let azonban sokszn, s elfordulhatnak olyan felttelek, melyeket jl sztbontott 3NF relcikkal sem tudunk automatikusan biztostani. Ezek kzl most kt feladatot mutatunk be, melyek elvezetnek a Boyce-Codd (BCNF), illetve a negyedik (4NF) norml formhoz. 4.6.7.1. Boyce-Codd norml forma Egy tancsad vllalatnl az gyfeleknek klnbz tmkbl nyjtanak konzultnsok, tancsadk segtsget. Minden konzultns csak egy tmakrrel foglalkozik, de ugyanabbl a tmbl ms s ms gyfeleknek klnbz konzulensek adhatnak tancsokat. Egy gyflnek tbb tmbl lehet tancsadja, de egy adott tmban mindig ugyanaz a konzultnsa van. Nyilvntartjuk mg minden gyflnl a konzultnsoknak az egyes tmakrkben trtnt tancsadsra fordtott munkaidejt is. Az sszes informcit tartalmaz TANCSADS relci a mintaadatokkal a 4.16. brn lthat. TANCSADS GYFL TMA TANCSAD MUNKAID Richter Gygyszerkutats Ehrlich 100 EGIS Gygyszerkutats Ehrlich 99 Bayer Gygyszerkutats Flemming 77 Richter Piac kutats Marco Polo 55 Bayer Piac kutats Marco Polo 2000 Richter Informcis rendszerek Quittner 11 EGIS Informcis rendszerek Baksa-Hask 111 APEH Ad csals Al Capone 10000 4.16. bra: TANCSADS relci

Ennek a relcinak alternatv kulcsai vannak. Elsdleges kulcs lehet (GYFL, TANCSAD) vagy (GYFL, TMA). Brmelyiket is vlasztjuk is, problmk lpnek fel. Ha (GYFL, TANCSAD) lesz az elsdleges kulcs, akkor, a relci nincs mg msodik formban sem. A kulcs egy rsze, TANCSAD, meghatrozza a nem kulcs komponens TM-t. Ezrt a korbban megismert vltoztatsi anomlik ebben a relciban is fellpnek. Nhny plda: Ha a gygyszerkutatsban Ehrlich helyett Flemming adn a tancsokat, akkor tbb helyen kellene vltoztatnunk.

4-40

Nem alkalmazhatunk j tancsadt, amg nincs legalbb egy gyfele. Ha az APEH nem lesz tovbb az gyfelnk, nem tudjuk, hogy Al Capone szakrt adcsalsi gyekben. Ha a relcit a normalizlsi eljrs szablyai szerint talaktjuk az albbi 3NF relcikk: TANCSADS-1 (GYFL, TANCSAD, MUNKAID) s KONZULTNS (TANCSAD, TMA) ahol TANCSADS-1.TANCSAD idegen kulcsknt hivatkozik KONZULTNS.TANCSAD-ra, akkor a problminkat megoldottuk. Ha viszont balszerencsnkre (vagy ms meggondolsokbl) az (GYFL, TMA) kombincit vlasztjuk elsdleges kulcsnak, akkor a TANCSADS (GYFL, TMA, TANCSAD, MUNKAID) relci 3NF-ben van, mgis problmk merlnek fel. Nem tudjuk pldul automatikusan biztostani, hogy egy tmhoz olyan tancsadt rendeljnk hozz, aki valban azzal a tmval foglalkozik, s azt sem, hogy minden tancsadnak csak egy tmja legyen. Az integritsi felttelek nem biztostjk, hogy pldul a Richternek adcsalsi gyekben ne Quittnert, az EGISnek pedig ne Baksa-Haskt jelljk ki tancsadnak, holott mindketten az informcis rendszerek szakrti. Ezek a problmk abbl addnak, hogy a nem kulcs TANCSAD meghatrozza a kulcs egy rszt, TM-t. A relcinak van olyan meghatroz, determinns eleme (ld. 4.6.1. pont), mely nem elsdleges s nem alternatv kulcs. Ez a relci, br 3NF, de nincsen Boyce-Codd norml formban (BCNF). Egy relci akkor s csak akkor van Boyce-Codd norml formban (BCNF), ha harmadik norml formban van s minden meghatroz eleme elsdleges vagy alternatv kulcs. Azok a 3NF relcik, melyeknek nincs alternatv kulcsuk automatikusan BCNF-ben is vannak. A TANCSADS pldnknl maradva, a mr BCNF-ben lv TANCSADS-2 (GYFL, TMA, MUNKAID) s KONZULTNS (TANCSAD, TMA) talakts nem vezet clra. Ezekbl ugyanis nem tudjuk megkapni, hogy a tma klnbz szakrti kzl melyik foglakozik az adott gyfllel. Megolds lehet a kvetkez, meglehetsen mesterklt megolds: TANCSADS-3 (GYFL, TMA, TANCSAD, MUNKAID) s KONZULTNS (TANCSAD, TMA), ahol (TANCSADS-3.TANCSAD, TANCSADS-3.TMA) egyttesen idegen kulcsknt hivatkozik (KONZULTNS.TANCSAD, KONZULTNS.TMA)-ra.1 Ehelyett azonban clszerbb, ha az alternatv kulcsok kzl az elsknt javasolt (GYFL, TANCSAD) kombincit vlasztjuk elsdleges kulcsnak.

Tovbb bonyolthatja a helyzetet, hogy a gyakorlatban sok rendszerben csak elsdleges kulcsra hivatkozhatunk idegen kulccsal. Ezrt KONZULTNS-ban (TANCSAD, TMA)-t kell elsdleges kulcsnak definilni, s annak biztostsra, hogy minden tancsadnak csak egy tmja lehessen, kln egyedi indexet kell ltrehoznunk KONZULTNS.TANCSAD-ra.

4-41

4.6.7.2. Negyedik norml forma A kvetkez pldban sem vezet a harmadik norml formba val talakts tkletes eredmnyre. Adva vannak Tantrgyak, Oktatk, Knyvek. Tovbbi felttelek egy tantrgyat tbb oktat is tanthat, s egy oktat tbb trgyat is tanthat, egy tantrgyat tbb knyvbl is tanthatnak s ugyanazt a knyvet tbb trgynl is hasznljk, brki is oktatja a trgyat, ugyanazokat a knyveket kell hasznlnia, minden oktat csak meghatrozott tantrgyakat tant, s minden trgyat csak meghatrozott oktatk tanthatnak. A nem normalizlt adatokat a 4.17. brn lthatjuk.

4.17. bra:

Tantrgyak, oktatk, tanknyvek kzti sszefggs nem normalizlt formban.

Az sszetartoz (TANTRGY, OKTAT, TANKNYV) adatokat az ismtld mezk kikszblsvel els norml formba hozhatjuk. Az gy ltrejtt TOK (TANTRGY, OKTAT, TANKNYV) relci (ld. 4.18. bra) csak elsdleges kulcsbl ll, gy egyben BCNF-ben is van. Ennek ellenre ez az elrendezs igen sok redundancit tartalmaz. (Flsleges pldul hromszor megadni, hogy Quittner Pl tantja a fizikt, ktszer, hogy informatikhoz mik a ktelez tanknyvek, stb.). Radsul a szoksos mdostsi anomlik mellett mg j problmk is jelentkeznek. Pldul egy fizikt tant j oktat felvtele hrom j sor ltrehozst jelenti, gy, hogy ezekben TANKNYV meghatrozott rtkeket (Neutronfizika, t az atomfizikhoz, Gyakorlati fizika) vehet csak fel, amit azonban nem tudunk integritsi felttelekkel automatikusan biztostani. Hasonlan, egy ktelez knyv trlse vagy mdostsa is ltalban tbb sort rint.

4-42

Mindezek a nehzsgek abbl addnak, hogy az elsdleges kulcs egyes oszlopai kztt tbbrtk funkcionlis fggs (ld. 4.6.1. pont) ll fenn. TANTRGY OKTAT s TANTRGY TANKNYV TOK TANTRGY OKTAT TANKNYV Informatika Quittner Pl Adatbzisok Informatika Baksa-Hask Gabriella Adatbzisok Informatika Quittner Pl Adatbzis-kezels Informatika Baksa-Hask Gabriella Adatbzis-kezels Fizika Quittner Pl Neutronfizika Fizika Kiss Dezs Neutronfizika Fizika Quittner Pl t az atomfizikhoz Fizika Kiss Dezs t az atomfizikhoz Fizika Quittner Pl Gyakorlati fizika Fizika Kiss Dezs Gyakorlati fizika Matematika Millhoffer Hugn Kalkulus Matematika Kiss Dezs Kalkulus Matematika Bolyai Jnos Kalkulus 4.18. bra: A 4.17. brn lthat adatok elrendezse normalizlt relciban. Az elsdleges kulcs (TANTRGY, OKAT, TANKNYV). A tbbrtk funkcionlis fggsbl add problmk kikszblsre vezettk be a negyedik norml formt (4NF). Egy R relci akkor s csak akkor van negyedik norml formban, ha 3NF-ben van s csak olyan tbbrtk funkcionlis fggsg van benne, melyre igaz, hogy ha R.A R.B, akkor a relci sszes tbbi C,D, oszlopa funkcionlisan fgg A-tl. A fent pldban szerepl relci nyilvn nem 4NF, mivel TANTRGY OKTAT igaz, de TANTRGY TANKNYV nem rvnyes, (csak TANTRGY TANKNYV igaz). A 4NF-re bonts a tbbszrs fggsgben ll oszlopokat bontja kln relcikra. Ez pldnkban a TANT-OKT (TANTRGY, OKTAT) s a TANT-TKNYV (TANTRGY, TANKNYV) relcikat jelenti. Ezzel a redundancit megszntettk s az eredeti adatokat teljesen vissza tudjuk lltani a TANT-OKT JOIN TANT-TKNYV (TANTRGY) mvelettel. Egyetlenegy problmnk azrt mg maradt, br ez lehet gyakorlati szempontbl elnys is. Az eredeti TOK relciba csak akkor vehettnk fel egy j tantrgyat, ha legalbb egy oktat s legalbb egy tanknyv volt mr hozz.1 (Hasonl jelleg korltozs rvnyes az j oktatra s tanknyvre is). A 4NF relcikbl ll modellbe mr akkor is felvehetnk j tantrgyat, ha legalbb egy oktatt vagy egy tanknyvet rendeltnk hozz.
1

Ezt megkerlhettk az adatbzis-technikai szempontbl nem igen ajnlott NINCS mestersges oktat s tanknyv rtkek bevezetsvel.

4-43

4.6.8. A norml formk sszefoglalsa Az egyms utn kvetkez norml formk (1NF, 2NF, 3NF, BCNF, 4NF, 5NF) az adatbzist alkot relcik matematikai jsgt jelzik. Az alacsonyabb fok relcikbl a matematikailag jobb magasabb formkba a relcik tulajdonsgai kzti klnfle fggssgek tervszer megszntetsvel juthatunk el. A norml formk egymsba skatulyzottak. Ez azt jelenti, hogy a magasabb fokban levk egyben az alacsonyabb fok kritriumait is teljestik. Egy 3NF relci egyben 1NF s 2NF formban is van, egy BCNF pedig egyben 3NF, 2NF s 1NF-ben is. A jsg termszetesen csak matematikailag rtend, a logikai rthetsg, az ttekinthetsg, az ellentmonds mentessg fokt jelenti. Az adatbzis tervezsekor a relcikat ltalban 3NF-be hozzuk. De a gyakorlatban sokszor hatkonyabban tudunk alacsonyabb norml formban lv relcikkal dolgozni. Klnsen igaz ez az adattrhzakra, ahol a lekrdezsek felgyorstsa rdekben igen sok relcit els vagy msodik norml formban trolunk. A 3NF-nl magasabb norml formk inkbb csak elmleti szempontbl rdekesek. Egyedl a BCNF-re val talakts fordul nha el a gyakorlatban.. Amikor erre szksg lehet, akkor is clszerbb a formlis normalizlsi mveletek helyett a feladat logikus vgiggondolsval a kulcsok kztti fggsgekbl add problmkat megoldani. A 4.1.tblzatban sszefoglaltuk az egyes norml formk relcin belli jellegzetessgeit. 4.1. tblzat: Az egyes norml formk jellegzetessgei. Norml forma tpusa Els norml forma (1NF) Msodik norml forma (2NF) Harmadik norml forma (3NF) Boyce-Codd norml forma (BCNF) Negyedik norml forma (4NF) tdik norml forma (5NF) Jellemzi Nincsenek ismtld elemek (csoportok). Minden oszlop csak egy rtket (ez lehet a NULL rtk is) vehet fel. Csak teljes funkcionlis fggs lehet a kulcs s a nem kulcs66 tulajdonsgok (attribtumok) kztt. Minden nem kulcs tulajdonsg csak az elsdleges kulcstl fgg s attl funkcionlisan teljesen. Minden funkcionlis fggs a kulcson bell is s a nem kulcs elemek kztt is ki van kszblve. Nincsenek tbb rtk fggsgek sem. Semmifle fggsg nincs az egyes tulajdonsgok kztt.

4.7. A relcis modellen alapul adatbzisok sszefoglalsa Ebben a pontban ismtlsknt sszefoglaljuk a relcis rendszer alapkvetelmnyeit s az adatbzisok megtervezsnek s ltrehozsnak legfontosabb lpseit.

Kulcson itt az elsdleges kulcsot, nem kulcs elemen pedig az elsdleges s az esetleges alternatv kulcson kvl az sszes tbbi attribtumot rtjk.

66

4-44

4.7.1. Alapkvetelmnyek A relcis modell hrom pillren nyugszik. Ezek a kvetkezk: a relcis adatstruktra megvalstsa, az adatok integritsnak biztostsa, adatkezels relcis mveletek segtsgvel. A relcis adatstruktra azt jelenti, hogy minden egyedtpust n-ed fok relcikban (tblzatokban) brzolunk, melyeknek egyedi elfordulsai (sorai, rekordjai) elemi tartomnyokra (domain) pl tulajdonsg (attribtum, oszlop) rtkekbl llnak. Egyrtelm azonostsuk a relcin bell az elsdleges kulcs segtsgvel trtnik. Az adatbzison bell minden sor egyrtelmen azonosthat a relci nevvel s elsdleges kulcsnak rtkvel, minden eleme pedig a relci s az oszlop nevvel valamint a sor elsdleges kulcsnak az rtkvel. A modellben meghatrozott adatstruktra ltrehozshoz s mdostshoz rendelkezni kell egy adatler lehetsggel, mellyel az adatokat tartalmaz alaprelcik, illetve ezekbl relcis mveletekkel szrmaztatott virtulis relcik ltrehozhatk. Az adatok integritsa az elsdleges s az idegen kulcsok segtsgvel valsul meg. Az elsdleges kulcs rtke mindig egyedi egy relcin bell s egy sszetevje sem lehet NULL rtk. Az idegen kulcsok rtke mindig meg kell egyezzen a hivatkozott relci hivatkozott elemnek (ltalban elsdleges kulcsnak) valamelyik aktulis rtkvel, vagy a NULL rtkkel egyenl. Az adatkezels a relcis mveletek segtsgvel lehetv kell tegye az adatok kivlasztst olvasshoz, mdostshoz, trlshez, j relcik ltrehozshoz. Technikailag erre az SQL nyelvet hasznljuk. Azokat a rendszereket, amelyek a fenti alapkvetelmnyeket a tovbbiakban mg bvebben rtelmezett mdon minden szempontbl kielgtik, teljes relcis rendszernek nevezzk. Ezek mg az albbi kvetelmnyek mindegyiknek is eleget tesznek: 1. Az adatbzisban minden adatot relcikban s csak relcikban trolnak. Ezekbl kaphat meg minden informci a relcis mveletek segtsgvel. 2. Minden adat egyrtelmen elrhet a megfelel relci, ezen bell pedig a kvnt oszlop nevnek s a sor elsdleges kulcsnak a megadsval. Ezekbl a kvnt informci elllthat. A NULL rtket egyrtelmen s megfelel mdon kezeli a rendszer. Brmikor hozzfrhet, napraksz, automatikusan karbantartott katalgussal (adatsztrral) rendelkezik. Van olyan prbeszdes s programba bepthet nyelve (SQL), amely lehetv teszi adatok definilst, relcis mveletek elvgzst, integritsi s adatbiztonsgi felttelek definilst, sszetett tranzakcik egysges kezelst (ld. a COMMIT s ROLLBACK az 5.6.4. pontban). Tblzatok mdosthatk nzeteken keresztl is, amennyiben ez egyrtelmen, ellentmonds-mentesen elvgezhet. Rendelkezik adatok csoportos berst, mdostst, trlst lehetv tev mveletekkel. Biztostja a fizikai s a logikai adatfggetlensget. 4-45

3. 4. 5.

6. 7. 8.

9.

Az integritsi feltteleket maga az adatbzis tartalmazza. Betartsuk fggetlen az alkalmazsi programoktl. Ezek a felttelek mdosthatk, de az j felttelek az adatbzisban mr bennlv adatokra is rvnyben kell legyenek.

10. A fenti szablyoknak rvnyben kell maradni, fggetlenl attl, hogy az adatbzist centralizltan, vagy osztott formban ptik fel. 11. Az integritsi s biztonsgi korltozsoknak akkor is rvnyben kell maradni, ha alacsonyabb szinten lehetsg van egyes rekordokhoz az adatbzis-kezel rendszer megkerlsvel val hozzfrsre is. A mai relcis adatbzis-kezel rendszerek ezen feltteleket ltalban kielgtik, de vannak olyanok, amelyek nem mindegyiket s/vagy nem maradktalanul. Ennek ellenre a mindennapi felhasznl szmra ezek is gyakorlatilag teljes (vagy majdnem teljes) relcis rendszereknek tekinthetk. 4.7.2. Fbb lpsek A relcis adatbzisok tervezsnek s ltrehozsnak a legfontosabb lpsei a kvetkezk: 1. A szksges adatok kivlasztsa. 2. 3. 4. 5. 6. 7. 8. 9. Az sszetartoz adatok, az entitsok (egyedtpusok) meghatrozsa. Az entitsok tulajdonsgainak s elsdleges kulcsnak meghatrozsa. Az entitsok kztti kapcsolatok meghatrozsa. A tbb-tbb kapcsolatok felbontsa j relcik segtsgvel. A relcik legalbb els norml formban val definilsa. Idegen kulcsok definilsa a relcik kzti kapcsolatok biztostsra. A szksges normalizls elvgzse. A relcik magasabb fok norml formba trtn talaktsa. Az entitsok tovbbi tulajdonsgainak (adattpus, hossz, alaprtelmezs, korltoz felttelek) rszletes meghatrozsa.

10. Tblzatok ltrehozsa a normalizlt relcik alapjn. 11. A vrhat feladatok optimlis vgrehajtst elsegt fizikai adatszerkezet kialaktsa, indexek ltrehozsa. 12. A vrhat feladatok adatait egyttesen, egyben tartalmaz virtulis relcik (nzetek) meghatrozsa, definilsa. 13. Hozzfrsi jogok meghatrozsa, az adatok vdelmnek biztostsa. 14. Adatok betltse, mveletek az adatokkal. 15. Szksg esetn az adatbzis szerkezetnek a mdostsa, j tblzatok, nzetek, indexek ltrehozsa az 1-14. lpsekben lertak szerint. 4.7.3. Egy adatbzis megtervezse Az eddig elmondottak sszefoglalsaknt tervezzk meg a feladat lersban szerepl csomagkld szolglat adatbzisnak Entity-Relationship diagrammjt,

4-46

hatrozzuk meg az elsdleges s az idegen kulcsokat, adjuk meg az egyes entitsok legfontosabb tulajdonsgait, hatrozzuk meg, hogy az adatintegrits s a hatkony feldolgozs rdekben mire, milyen tpus indexeket clszer ltrehoznunk, definiljuk az adatbzis egyszerbb hasznlatt elsegt nzeteket.

4.7.3.1. Feladatlers Egy csomagkld szolglattl katalgus alapjn lehet rukat megrendelni. A katalgus tartalmazza az ruk lerst s az rakat is. Ugyanaz az ru klnbz kivitelben (mret, szn) is megrendelhet. A szn s a mret az rat nem befolysolja. A katalgusban szerepl rakat negyedvenknt frisstik fel. Az rukat klnbz raktrakban troljk. Egy adott ru csak egy raktrban tallhat. A megrendelk egy megrendelsben akrhny rut akrhny kivitelben megrendelhetnek. A szllts egy megrendelhz naponta egyszer trtnik. Egy szlltsban akrhny rut akrhny kivitelben kiszllthatunk. Egy szllts ttelei klnbz megrendelsekbl is szrmazhatnak, de egy adott rendelsi ttelt mindig teljes mrtkben teljesteni kell. (Ha egy megrendelsben kt kk s kt fehr 44-es Benetton ing szerepelt, akkor lehet, hogy egy szlltsban csak a kt kk inget kldjk el s a kt fehret egy msikban szlltjuk, de az nem lehet, hogy egy szlltmny csak egy fehr s/vagy egy kk inget tartalmazzon. Ugyanakkor leszllthatjuk ezekkel egytt egy msik rendels sszes ingt is). A vevk klnbz kedvezmnyekben rszeslhetnek. Minden vevnek van egy sajt kialkudott, r jellemz kedvezmnye. Ezen kvl minden vev egyformn rszeslhet a tvolsgi kedvezmnyben, melynek mrtke minden vevre s rura azonos s csak attl fgg, hogy melyik vrosban van a vev. (Ha valakinek tbb vrosba is szlltunk, akkor minden vrosban nll vevknt tartjuk nyilvn). Emellett ltezik minden rura egy mennyisgi kedvezmny is, melynek nagysga, s az, hogy hny darab felett adhat, az runknt vltoz. (Azt, hogy a klnbz kedvezmnyek sszegzseknt vgl tnylegesen mekkora kedvezmny jr az egyes megrendelsek utn, a feldolgoz program llaptja meg, de az ehhez szksges adatokat az adatbzisbl veszi.) A vev egy szllts minden rujt tveszi. Az esetleges reklamcik kezelst a modellnek nem kell tartalmazni. Az idbeli vltozsokat az rak kivtelvel nem kell nyomon kvetni. 4.7.3.2. A tervezsi feladat megoldsa Els lpsknt meghatrozzuk, hogy milyen kzenfekv egyedtpusokat definilunk, ezeknek mik lesznek az azonostik (elsdleges kulcs, vastagtva jellve), s milyen tulajdonsgaik vannak (milyen adatokat fognak tartalmazni). VEV (Vevkd, Vevnv, Vevcm, Vev_bankszmla, Vev_kedvezmny, Vros, Tvolsgi_kedvezmny) RUKATALGUS (Negyedv, rukd, Szn, Mret, runv, ru-kpe, Rendelsi egysg, Raktr melyik raktrban troljk + a raktr tbbi adata , Kedvezmny_hatr amely fltti rendels esetn kedvezmny jr, Mennyisgi_kedvezmny, Raktrkszlet, Egysgr, Rendelsi egysg) RENDELS (Rendelsszm, Vevkd, Rendelsi_Dtum, vev tbbi adata, Negyedv, rukd, Szn, Mret, ru tbbi adata, Rendelt mennyisg, Leszlltva) 4-47

SZLLTS (Szlltsszm67, Vevkd, Szlltsi_Dtum, vev tbbi adata, Negyedv, rukd, Szn, Mret, ru tbbi adata, Szlltott_mennyisg) Msodik lpsknt meghatrozzuk az gy definilt entitsok kzti kapcsolatokat. Ezt a 4.19. brn lthatjuk.

4.19. bra:

Csomagkld szolglat Entity Relationship diagrammjnak els vltozata.

A kvetkez lpsben felbontjuk az RUKATALGUS s a RENDELS illetve a SZLLTS kzti tbb-tbb kapcsolatot a RENDELS-TTEL s a SZLLTS-TTEL bevezetsvel. Ennek megfelelen mdostjuk a RENDELS s a SZLLTS relcikat s meghatrozzuk az idegen kulcsokat (dlt betkkel jellve). RENDELS-TTEL (Rendelsszm, Negyedv, rukd, Szn, Mret, ru egyb jellemzi, Rendelt_mennyisg, Leszlltva) SZLLTS-TTEL (Szlltsszm, Negyedv, rukd, Szn, Mret, ru egyb jellemzi, Szlltott_mennyisg)68 RENDELS (Rendelsszm, Vevkd, vev tbbi adata, Rendelsi-Dtum) SZLLTS (Szlltsszm, Vevkd, vev tbbi adata, Szlltsi-Dtum) Az idegen kulcsok: RENDELS-TTEL-ben: Rendelsszm hivatkozik RENDELS-re, Negyedv, rukd, Szn, Mret RUKATALGUS-ra

Mivel feltteleink szerint egy vevnek egy nap csak egyszer szlltunk, nem kellene mestersgesen bevezetni elsdleges kulcs cljbl a Szlltsszm attribtumot. Mgis megtesszk ezt. Egyrszt azrt, mert a gyakorlatban knyvelsi okokbl gyis szksg van r. Msrszt azrt, mert ha ksbb mgis megengednnk a napi tbbszri szlltst, akkor ezt a ((Vevkd, Szlltsi_Dtum) egyedi index (ld. ezen pont vgn) dupliklt indexre val mdostsval igen egyszeren meg tudjuk tenni, mg egy j elsdleges kulcs beillesztse SZLLTS-ba vagy a Szlltsi_Dtumnak az egyrtelmv ttele a szllts pontos idpontjval (ra, perc) val kibvtsvel elg bonyolult vltoztatsokat ignyelne. 68 Mivel egy szlltsban lehetnek klnbz katalgusok alapjn megrendelt ttelek, ezrt a katalgusra jellemz negyedv rtkt itt s nem SZLLTS-ban kell megadnunk. A megrendels nyilvn csak egy katalgus alapjn trtnhet, gy a negyedvet RENDELS-TTEL-bl kivihetnnk RENDELS-be. A rendelsek s szlltsok egysges kezelse rdekben mgis RENDELS-TTEL-ben adjuk meg.

67

4-48

SZLLTS-TTEL-ben: Szlltsszm hivatkozik SZLLTS-ra, Negyedv, rukd, Szn, Mret RUKATALGUS-ra RENDELS-ben s SZLLTS-ban: Vevkd hivatkozik VEV-re. Ezek a relcik mind els norml formban vannak. Kvetkez feladatunk ezeknek 3NF-be val talaktsa lesz. VEV nincsen 3NF-ben, mivel a Tvolsgi-kedvezmny csak a nem elsdleges kulcs Vrostl fgg. Ezrt ezt felbontjuk kt relcira: VEV (Vevkd, Vevnv, Vevcm, Vev_bankszmla, Vev_kedvezmny, Vros) SZLLTSI-KEDVEZMNY (Vros, Tvolsgi_kedvezmny) VEV-ben idegen kulcs Vros, hivatkozik SZLLTSI-KEDVEZMNY-re. RENDELS s SZLLTS sincs 3NF-ben. A vev tbbi adata a vevkd-tl fgg, ami nem elsdleges kulcs. gy azokat egy j tblzatba kellene kivinnnk. Ez azonban mr ltezik, VEV-knt definiltuk. Ezrt a vev tbbi adatait, mint redundnsakat mindkt relcibl egyszeren elhagyhatjuk. RENDELS-TTEL s SZLLTS-TTEL nincs 2NF-ben. Az ru egyb jellemzi csak a Negyedv, rukd, Szn, Mret oszlopoktl, az elsdleges kulcs egy rsztl fggnek. Ezeket kivisszk egy j tblzatba. Mivel az idbeli vltozsokat (Negyedvtl val fggs) csak az rnl kell figyelembe vennnk, a szn s a mret pedig nem befolysolja egy adott ru tovbbi jellemzit ezt rgtn tovbb bontjuk az albbi mdon: RUKATALGUS (Negyedv, rukd, Egysgr) RULERS1 (rukd, runv, ru-kpe, Rendelsi egysg, Raktrkd, raktr tbbi adata, Mennyisgi_kedvezmny, Kedvezmny_hatr) RUVLASZTK (rukd, Szn, Mret, Raktrkszlet) Az RULERS1 relcit, mivel ebben a raktr tbbi adata csak a Raktr-kdtl fgg, mg tovbb bontjuk: RULERS (rukd, runv, ru-kpe, Rendelsi egysg, Raktrkd, Mennyisgi_kedvezmny, Kedvezmny_hatr) RAKTR (Raktrkd, Raktr-cm, Raktr-vezet, Raktr_telefon)

4-49

j idegen kulcsok: RUKATALGUS-ban rukd hivatkozik RULERS-ra. RULERS-ban Raktrkd hivatkozik RAKTR-ra. RUVLASZTK-ban rukd hivatkozik RULERS-ra. A felbontsok miatt RENDELS-TTEL s SZLLTS-TTEL-ben Negyedv, rukd hivatkozik RUKATALGUS-ra, rukd, Szn, Mret hivatkozik RUVLASZTK-ra. Az gy ltrejtt vgleges adatmodellt a 4.20. brn lthatjuk.

4.20. bra:

Csomagkld szolglat harmadik norml formban lv adatmodellje.

Az egyes relcikat, tulajdonsgaikat, az elsdleges s az idegen kulcsokat az ttekinthetsg rdekben jra megadjuk. VEV Vevkd Vevnv Vevcm Vev_bankszmla Vev_kedvezmny Vros (SZLLTSI-KEDVEZMNY) SZLLTSI-KEDVEZMNY Vros Tvolsgi_Kedvezmny

4-50

SZLLTS Szlltsszm Vevkd (VEV) Szlltsi_Dtum SZLLTS-TTEL Szlltsszm (SZLLTS) Negyedv (RUKATALGUS) rukd Szn Mret (RUVLASZTK) Szlltott_mennyisg RUKATALGUS Negyedv rukd (RULERS) Egysgr RULERS rukd runv ru_kpe Rendelsi_egysg Raktrkd (RAKTR) Mennyisgi_kedvezmny Kedvezmny_hatr

RENDELS Rendelsszm Vevkd (VEV) Rendelsi_Dtum RENDELS-TTEL Rendelsszm (RENDELS) Negyedv (RUKATALGUS) rukd Szn Mret (RUVLASZTK) Rendelt_mennyisg Leszlltva RUVLASZTK rukd (RULERS) Szn Mret Raktrkszlet RAKTR Raktrkd Raktr_cm Raktr_vezet Raktr_telefon

Az adatbzis hatkony mkdtetshez az albbi indexeket hozzuk ltre: Egyedi indexet ptnk fel minden elsdleges kulcsra. Egyedi index SZLLTS-ban (Vevkd, Szlltsi_Dtum)-ra. (A napi egyszeri szllts felttele miatt). Dupliklt indexet ksztnk az albbi oszlopokra: minden idegen kulcs, rukd, vevkd, runv, szlltsi-dtum, rendelsi-dtum, vevnv, vev_bankszmla. Az oszlopok tulajdonsgainak meghatrozst s az adatbzis egyszerbb hasznlathoz szksges nzetek definilst az olvasra bzzuk (ld. a fejezet 19. feladatt). 4-51

4.8. Ellenrz krdsek 1. 2. 3. 4. 5. 6. 7. 8. Milyen szempontokat clszer figyelembe venni az objektumok s attribtumaik elnevezsnl? Milyen kulcsokat ismer, s mi ezeknek a szerepe? Adjon pldkat olyan idegen kulcs kapcsolatokra, amikor kaszkd mdostst vagy trlst clszer definilnunk! rja le, hogyan lehet a 4.3.c brn (4-10. oldal) lthat relcikba j osztlyt felvenni! Flcserlhet-e egy relcin a korltozs s a vetlet elvgzsnek a sorrendje? Foglalja ssze, hogy az egyes relcis mveleteknek milyen SQL utastsok felelnek meg! lltsa el azt a relcit, amelyik minden oktathoz megadja a hallgatinak a nevt! lltsa el azt a relcit, amelyik 9. minden hallgathoz minden hozzkapcsold adatot (nv, vfolyam, milyen trgyakat kinl vett fel, hogy vizsgzott, stb.) tartalmaz csak azokra a hallgatkra tartalmazza ezeket az adatokat, akik legalbb egy tantrgyat felvettek.

Mi a normalizls clja?

10. Sorolja fel, milyen norml formkat ismer, s mik ezek jellemzi! 11. Adjon pldt olyan relcira, amelyik nincsen els norml formban. els norml formban van, de nincsen msodik norml formban. msodik norml formban van, de nincsen harmadik norml formban. harmadik norml formban van, de nincsen Boyce-Codd norml formban. Boyce-Codd norml formban van, de nincsen negyedik norml formban.

12. Hnyadik norml formban van a kvetkez adatokat tartalmaz egyedtpus? (Az elsdleges kulcsot vastag betkkel jelljk.) RENDELS Rendelsszm Rendels-dtum R10 2006-10-16 R20 2006-10-17 rukd A1 A2 A1 Rendelt-mennyisg 10 20 30 Egysgr 100 200 100

13. Hnyadik norml formban van a kvetkez adatokat tartalmaz egyedtpus? RENDELS Rendelsszm R11 R12 R21 Rendels-dtum 2006-10-16 2006-10-16 2006-10-17 rukd A1 A2 A1 Rendelt-mennyisg 10 20 30 Egysgr 100 200 100

4-52

14. Hnyadik norml formban van a kvetkez adatokat tartalmaz egyedtpus? RENDELS Rendelsszm R11 R12 R21 Rendels-dtum 2006-10-16 2006-10-16 2006-10-17 rukd A1 A2 A1 Rendelt-mennyisg 10 20 30

15. Mik lehetnek alternatv kulcsok a kvetkez egyedtpusban? GPJRM Rendszm, Alvzszm, Tulajdonos-neve, Motorszm, Teljestmny, Szn, CASCO-ktvny-szma, Ktelez-biztostsi-ktvny-szma, zembe-helyezs-napja 16. Bizonytsa be, hogy a 4.6.7.1. pontban megadott felbonts az eredeti relci minden sort egyszer s csak egyszer adja vissza! 17. Fel tudja-e a 4.6.7.1. pontban megadott TANCSADS relcit ms mdon is vesztesg mentesen s teljesen reverzibilisen bontani BCNF relcikra? 18. Ksztse el az albbi feladat normalizlt adatmodelljt: A sportolk sportganknt klnbz versenyeken vesznek rszt. Egy szemly tbb szmban is indulhat. Elemezze azt a relcit, amelyik megadja, hogy ki, milyen sportgban milyen helyezst rt el! Nincs megosztott helyezs. Hogyan pti fel a relci(ka)t, ha nyilvn kell tartani azokat a sportolkat is, akik elindultak, de nem rtek el helyezst? 19. Definilja a 4.7.3. pontban megadott csomagkld rendszer oszlopainak jellemzit s ksztse el az egyszerbb hasznlathoz szksges nzeteket, melyek tartalmazzk minden runak minden tulajdonsgt. a megrendelsek minden fontos adatt egy megrendellevlben. a szlltsok minden adatt egy szlltlevlben az ignybe kedvezmnyekkel egytt.

vehet

20. Ksztse el egy vllalat dolgozi nyilvntartsnak Entity Relationship diagrammjt, definilja az egyes relcik oszlopait s kulcsait! Minden dolgoznl szksgnk van a kvetkez adatokra (zrjelben az oszlop neve): szemlyi azonost szm (SZEMSZ) nv (NV) osztly kdja, ahol dolgozik (O-KD) osztly megnevezse (O-NV) tma kdja, amelyen dolgozik (T-KD) tma megnevezse (T-NV) munkaidejnek hny szzalkban dolgozik a tmn (MEGOSZL) beosztsa (BEOSZT)

4-53

a beosztshoz tartoz maximlis s minimlis fizets (MAX-FIZ, MIN-FIZ) osztlya fnknek szemlyi azonost szma (FNK) A vllalati felttelek tovbbi elemzse alapjn megllaptjuk, hogy

a szemlyi azonostszm egyedi, az osztlyok kdja s megnevezse egyedi, a kett kztt egyrtelm kapcsolat ll fenn, ugyanez rvnyes a tmra s tmakdra is, a beoszts egyrtelmen meghatrozza a hozztartoz maximlis s minimlis fizetst, egy dolgoz tbb osztlyhoz is tartozhat s tbb tmn is dolgozhat, egy dolgoz egy adott osztlyon csak egy beosztsban dolgozhat, a klnbz osztlyokon azonban ms lehet a beosztsa, a tmk, beosztsok s osztlyok kztt nem kell kapcsolatot teremtennk, nem kell automatikusan ellenriznnk, hogy a tmk sszessgre fordtott id a dolgoz teljes munkaideje-e (100%).

4-54

5. AZ SQL NYELV
Ebben a fejezetben megismeri az olvas az SQL nyelv felptst s hasznlatt. Mivel az SQL nyelv nagymrtkben szabvnyostott, az itt lertakat a gyakorlatban elfordul feladatok legnagyobb rszben minden adatbzis-kezel rendszerben egy az egyben alkalmazni lehet. Ezrt a anyagot gy lltottuk ssze, hogy a tanuls mellett kziknyvknt is hasznlhat legyen. Emiatt bizonyos dolgokat tbb helyen is megismtelnk, hiszen munka kzben igen kellemetlen, ha a referenciaknt hasznlt knyvben llandan kereszthivatkozsokra kell lapozni. A gyakorlati felhasznl szmra igyekeztnk minl tbb pldn bemutatni az egyes elemek hasznlatt. Ez magval vonta azt, hogy bizonyos esetekben a pldban olyan funkcik is szerepelnek, melyeket csak ksbb fogunk trgyalni. Ilyenkor az els olvassnl ezeket a rszeket t lehet ugorni s csak a fejezet megfelel rsznek megrtse utn trjen r vissza az olvas. 5.1. SQL szabvny Az SQL (a Magyarorszgon nem hasznlatos angolul szkvel-nek mondott rvidts) a Structured Query Language, sz szerint Strukturlt Lekrdez Nyelv elnevezs rvidtse. Valjban azonban sokkal tbb ennl. Egy teljes relcis adatbzis-kezel nyelv, ami szabvnny lett. Napjainkban minden adatbzis-kezel rendszer ezt illetve ennek valamely rszhalmazt hasznlja. A grafikus felleteken kommunikl rendszerek, mint pldul a 6.1. alfejezetben ismertetett ACCESS is erre a nyelvre fordtjk t a kijellt feladatokat. Az SQL nyelv kifejlesztse s szabvnyknt val elfogadsa egyike az informatika azon terleteinek, ahol a szmtstechnika gyakorlati kivitelezi s a szmtstudomny elmleti szakemberei szinte a kezdetektl vgig eredmnyesen mkdtek egytt. A relcis adatmodell elvi alapjait E. F. Codd rakta le 1970-ben megjelent cikkvel. Erre alapozva dolgoztk ki az IBM San Jose-i (Kalifornia) kutatlaboratriumban az SQL nyelvet s ksztettk el az els, erre a nyelvre pl adatbzis-kezel rendszert. A mdszert ms szoftvergyrt cgek is tvettk s hamarosan a legklnbzbb hardvereken s opercis rendszerek alatt nagy szmban mkdtek SQL-en alapul rendszerek. Az American National Standards Institute (ANSI) s az International Standards Organization (ISO) mr 1978-ban ajnlsokat dolgozott ki a nyelv szabvnyostsra s ezeket tbb zben (1986, 1989, 1992, 1999) pontostotta. Ennek eredmnyekppen alakult ki a nyelv mai formja. Az SQL ismeretben elvileg akrmilyen relcis adatbzis-kezel rendszerrel dolgozni tudunk, s az egyik rendszerben elksztett megoldsokat tvihetjk brmelyik msikra. A valsgban termszetesen nem ilyen szp a helyzet. A szmtgppel kapcsolatot biztost opercis rendszer ms-ms krnyezetet szolgltat, st, mg ugyanazon opercis rendszerhez illeszked adatbzis-kezel rendszerek is kiss ms dialektusban beszlhetnek. ltalban a szabvnyostott SQL-nek ms-ms rszhalmazt engedik meg, de idnknt specilis egyedi bvtsi lehetsgeket is nyjtanak. Ennek ellenre biztosan llthatjuk, hogy az SQL nyelv ismeretben brmely adatbzis-kezel rendszerrel rvid idn bell el fogunk boldogulni. Az SQL lnyegben egy nem-procedurlis nyelvnek felel meg. A felhasznl csak azt mondja meg, hogy mit akar. Azt, hogy ez miknt, milyen lpsek sorozatval valsuljon meg, a nyelv rtelmezje, fordtprogramja fogja meghatrozni az adatbzis szerkezetnek s az adatok eloszlsnak ismeretben. Az optimlis feldolgozs egyes lpseinek meghatrozshoz az SQL rtelmez az adatbzis adatsztrbl, a katalgusbl (ld. 7. fejezet) nyeri ki az informcikat. 5-1

Az SQL nyelvet hasznlhatjuk interaktvan, nll nyelvknt is, s bepthetjk programokba is. A leggyakoribb befogad nyelvek a C, C++, Java, PHP s a rgta zemel nagy feldolgozsoknl a szobatudsok ltal igazsgtalanul mr rg eltemetett COBOL. A legtbb SQL utastsnak az nll s a programba bepthet formja megegyezik. Kivtel ez all a SELECT utasts, mert ennek programba val kiadsakor biztostanunk kell azokat a programvltozkat, ahov az adatokat beolvassuk. Ezen kvl van nhny olyan SQL utasts is (Pl. DECLARE CURSOR, FETCH), amit csak programbl hasznlhatunk. 5.2. Szintaxis jells Az SQL utastsoknak szigor szintaktikai szablyai vannak. Amennyiben ezeket nem tartjuk be, akkor az utastsrtelmez nem fogja tudni rtelmezni ket. Ezrt ismernnk kell, hogy az egyes utastsokat pontosan milyen formban adhatjuk ki. Az utastsok szintaktikjt legpontosabban metanyelven definilhatnnk. Ez azonban az tlagos felhasznlk tbbsge szmra tl bonyolult lenne. Ezrt a gyakorlatban rgebben egy csupn alfanumerikus jeleket hasznl formtumot hasznltak, mg az utbbi idkben az egyszer grafikai szimblumokat alkalmaz szintaxis diagramok terjedtek el. Ezek gyrt cgenknt kiss klnbznek, de felptsket tekintve lnyegben azonosak. A tovbbiakban az ORACLE ltal hasznlatos szintaxis diagrammokat ismertetjk. Az SQL utastsokat kis- s nagybetkkel egyarnt rhatjuk. Klnbsg csak a szveges literlknt (llandknt) megadott paramtereknl van. Ezekben a kis- s nagybetk klnbznek. CREATE TABLE HALLGATO , CREATE TABLE hallgato , create table hallgato, egyarnt helyes s ugyanazt eredmnyezi, de SELECT WHERE VNEV=Nemecsek s SELECT WHERE VNEV=nemecsek klnbz eredmnyt szolgltatnak. A csak a megadott formban rhat parancs- s kulcsszavakat tglalapba zrva nagybetkkel rva jelljk. (A nagybetk csak a szintaxis diagrammban ktelezek. A konkrt utastsban kis- s nagybetket egyarnt hasznlhatunk.) Az ltalunk megvlaszthat formban megadhat paramtereket, vltozkat legmblytett alakzatban, kisbetkkel rva jelljk. A kizrlag az adott formban rhat elvlaszt jeleket (pl. vessz, pont, stb.) krbe zrva jelezzk. A szintaxis diagrammot balrl jobbra, illetve ha szksges, akkor a sor vgtl fentrl lefel a kvetkez sor elejtl kezdve olvassuk. Amennyiben ettl az irnytl eltrhetnk, akkor ezt nyllal jelezzk. A visszafel mutat nyl az elem elvileg tetszleges szm megismtelhetsgt jelenti.

Az ELEM1-et s ELEM3-at pontosan ebben a formban kell rnunk. Az elem2-t, mint azt a visszafel mutat, nyllal jelzett tvonal mutatja, tbbszr s tetszleges nvvel, az adott paramterre engedlyezett formban adhatjuk meg. Az egyes elfordulsok kz a szintaxis diagramm ltal jelzett mdon vesszt (,) kell tennnk. (Az utols elforduls utn mr nem kell a vessz!) Az ELEM3 az elem2 utols elfordulsa utn kvetkezik. A fenti szintaxis elem egy lehetsges megadsi formja: elem1 PARAM2,para2,Pr2 ELEM3 ahol PARAM2, para2, Pr2 az elem2 megengedett alakjai. 5-2

A ftvonalon, az utasts elejtl a vgig viv vzszintes vonalon lev elemeket ktelez megadni. gy az elz pldban mindegyik elemet meg kell adnunk. Ha tbb lehetsg kztt vlaszthatunk, akkor az tvonal sztgazik. Ha az elem opcionlis (elhagyhat), akkor van egy egyenesen halad, tretlen tvonal a ftvonal. Ha egy s csakis egy lehetsget kell megadnunk, akkor mindegyik tvonal valamelyik elemen keresztl vezet s nincs visszaviv t. Ha az elemek ismtelhetek, akkor van egy visszaviv t is s ebben jelezzk ha van az elvlaszt jelet is.

Az ELEM1-et ebben a formban kell rnunk. Az ELEM2-t elhagyhatjuk, de ha megadjuk, pontosan gy kell rnunk. Az elem3a, elem3b, elem3c paramterekbl egyet s csak egyet kell megadnunk tetszleges nvvel, az adott paramterre engedlyezett formban. A kvetkez, kt elembl ll tagot elhagyhatjuk. Ha megadjuk, akkor az elem4 paramtert zrjelek kztt akrhnyszor megismtelhetjk, ahogy azt a visszafel mutat, nyllal jelzett tvonal mutatja. A szkzn kvl kln elvlaszt jel nem kell az ismtldsek kz. Utnuk az ELEM5 tagot pontosan gy ki kell rnunk. A fenti szintaxis elem lehetsges megadsi formi pldul: ELem1 PARAM3b ELEM1 ELEM2 pr3c (pr4 param4 PAR4) elem5 ahol PARAM3b, pr3c az elem3b illetve elem3c egy megengedett alakja, pr4, param4, PAR4 pedig elem4 lehetsges rtkei. Az utasts parancsszavait, kulcsszavait s paramtereit legalbb egy szkz vlasztja el. 5.3. A nyelv elemei Formai szempontbl az SQL nyelv a kvetkez elemekbl pl fel: SQL fenntartott szavak, azonostk, llandk (literlok), opertorok, hatrol jelek. Tartalmi szempontbl a kvetkez alapelemeket klnbztetjk meg: objektumok s azok komponensei, adattpusok, NULL rtk, SQL kifejezsek, SQL felttelek, SQL fggvnyek, SQL utastsok.

5-3

Ezek kzl az adattpusokat, az SQL fggvnyeket s utastsokat fontossguk s terjedelmk miatt ezen fejezet kln alfejezeteiben, a tbbieket ebben az alfejezetben ismertetjk. 5.3.1. Fenntartott szavak A fenntartott szavak az SQL utastsok meghatrozsra, pontostsra, olvashatbb ttelre, valamint a klnbz objektumuk tulajdonsgainak lersra szolglnak. Ezeket a szavakat csak az gy meghatrozott mdon s csak az gy kijellt feladatra hasznlhatjuk. A szintaxis jellsben (ld. 5.2. alfejezet) ezeket tglalapba rt nagybetkkel jelljk. A fenntartott szavak listjt az 5.1. tblzat tartalmazza. A dlt betkkel szedett szavak az SQL ANSI szabvny szerint minden rendszerben foglaltak. A tbbiek rendszerspecifikusak, de hasznlatuk a portabilits rdekben nem ajnlott. Ugyancsak kerljk a SYS kezdet azonostkat, mivel sok rendszer (pl. az ORACLE) ilyen kezdet elemeket generl automatikus elnevezsekkor. 5.1. tblzat: SQL fenntartott szavak ACCESS ANY BY COMPRESS DECIMAL DROP FLOAT HAVING INDEX INTO LONG NOAUDIT NUMBER OPTION PRIVILEGES REVOKE SELECT SMALLINT TABLE UNION VALUES WHERE ADD AS CHAR CONNECT DEFAULT ELSE FOR IDENTIFIED INITIAL IS MAXEXTENTS NOCOMPRESS OF OR PUBLIC ROW SESSION START THEN UNIQUE VARCHAR WITH ALL ASC CHECK CREATE DELETE EXCLUSIVE FROM IMMEDIATE INSERT LEVEL MINUS NOT OFFLINE ORDER RAW ROWID SET SUCCESSFUL TO UPDATE VARCHAR2 ALTER AUDIT CLUSTER CURRENT DESC EXISTS GRANT IN INTEGER LIKE MLSLABEL NOWAIT ON PCTFREE RENAME ROWNUM SHARE SYNONYM TRIGGER USER VIEW AND BETWEEN COMMENT DATE DISTINCT FILE GROUP INCREMENT INTERSECT LOCK MODE NULL ONLINE PRIOR RESOURCE ROWS SIZE SYSDATE UID VALIDATE WHENEVER

5.3.2. Azonostk Az SQL objektumoknak s alkotelemeinek nevet kell adnunk, hogy hivatkozhassunk rjuk. Ezt a nevet hvjuk az adott adatbziselem azonostjnak. A klnbz elemek nevnek kpzsre szigor szintaktikai szablyok rvnyesek. Emellett a nvnek az adott krnyezetben egyrtelmnek is kell lenni. Az SQL azonostk az angol ABC betibl, szmokbl s a nv belsejben az _ (alhzs) jelbl llhatnak. Maximlis hosszuk rendszer s objektumfgg. Az adatbzisok neve ltalban maximum 8, mg a tblzatok, nzetek, oszlopok neve 18 illetve egyes 5-4

rendszereknl akr 30 bjt hossz is lehet. Nhny adatbzis-kezel rendszerben az azonostk bizonyos krlmnyek kztt tartalmazhatnak nemzeti karaktereket s a nv belsejben szkzt is, de ezek hasznlatt, mivel ez ms krnyezetbe val ttrsnl problmt okozhat, lehetleg kerljk. Hogy a klnbz felhasznlknak ne kelljen azzal trdnik, hogy a tbbi felhasznl milyen azonostkat hasznl, az SQL azonostk tbb szintbl tevdnek ssze. Az egyes szintek kztt ltalban a . (pont) az elvlaszt jel. Ezek kzl csak a legals szint nevt ktelez megadni. A felhasznlnak csak azzal kell trdnie, hogy az objektumainak az adatbzisban, az objektumok egyes komponenseinek pedig az objektumon bell egyrtelm legyen a neve. gy pldul ugyanaz a felhasznl nem hozhat ltre sajt magnak egy MINTA nev tblzatot s egy msik ugyancsak MINTA nev tblzatot, de ilyen nvvel ms objektumot (pl. nzetet vagy sorszm genertort) sem. Ugyanakkor akrhny felhasznlnak lehet MINTA nev objektuma s abban egy darab, mindegyikben azonosan OSZLOP1-nek nevezett oszlopa is. Az azonost egyrtelmv ttelre minden objektumnv el minstknt odakerl az objektum tulajdonosnak a neve. Ez az objektum ltrehozjnak, vagy annak az azonostja, akinek a nevben azt az adatbzis felgyel ltrehozta. Osztott adatbzisoknl rendszertl fgg, hogy el vagy mg jn mg minstnek az adatbzis helynek a neve. Integrlt adatbzisoknl, amelyek csak egy helyen vannak, ez termszetesen felesleges. Osztott adatbzisoknl, ha kln nem adjuk meg, automatikusan az aktulisan hasznlt helyi adatbzis megfelel nev elemrl beszlnk. Ezek alapjn egy adatbziselem azonostjt a kvetkez mdokon adhatjuk meg: ADATBZIS-HELY.TULAJDONOS.OBJEKTUM-NV.ELEM-NV TULAJDONOS.OBJEKTUM-NV.ELEM-NV@ ADATBZIS-HELY ilyen a teljes osztott adatbzisban csak egy lehet TULAJDONOS.OBJEKTUM-NV.ELEM-NV ilyen egy helyi adatbzison bell csak egy lehet OBJEKTUM-NV.ELEM-NV ilyen egy helyi adatbzison bell egy felhasznlnak csak egy lehet ELEM-NV ilyen egy felhasznlnak egy objektumn bell csak egy lehet. A fenti nvhierarchibl elegend annyi szintet megadnunk, amennyi az adott krnyezetben (ltalban SQL utastsban) az elemet egyrtelmv teszi. gy pldul, ha egy integrlt adatbzisban az SQL00 felhasznl a sajt HALLGATO tblzatbl akarja kivlasztani a vezetknevet tartalmaz VNEV oszlopot, akkor elegend erre a SELECT VNEV, FROM HALLGATO mdon hivatkozni, mert a VNEV-et a rendszer automatikusan kiegszti az utastsbl egyrtelm SQL00.HALLGATO minstett tblzat nvvel. Ha viszont az SQL30 tblzatbl akarja ugyanezt az oszlopot, akkor a

5-5

SELECT VNEV, FROM SQL30.HALLGATO utastsban a VNEV egyrtelmen az SQL30.HALLGATO tblzatra vonatkozik. A SELECT SQL30.HALLGATO.VNEV, FROM SQL30.HALLGATO, HALLGATO utastsban viszont mr egyrtelmv kell tenni, hogy a mindkt tblzatban szerepl VNEV oszlop kzl melyiknek az rtkt kell venni. 5.3.3. llandk (literlok) A llandkat SQL kifejezsekben hasznljuk. Megadsukkal egy lland rtket hatrozunk meg. Tartalmuk szerint megklnbztetnk Numerikus Alfanumerikus (karakter) Dtum/idpont tpus llandkat. A numerikus llandk legalbb 1 s legfeljebb a rendszer szmbrzolsnak megfelel szm szmjegyet (ltalban maximum 18 jegy) s esetleg egy eljelet valamint egy tizedes pontot vagy vesszt tartalmaznak. Az, hogy a rendszer tizedes ponttal vagy tizedes vesszvel dolgozzon, ltalban bellthat. Sok rendszer megengedi a lebegpontos llandk hasznlatt is (Pl. -1.234 E 12 formban, ami -1,234*1012-t jelent). Az alfanumerikus llandk tetszleges alfanumerikus karaktereket (betk, szmjegyek, klnleges karakterek) tartalmazhatnak. Az lland kezdett s vgt (aposztrf) jelzi. Egyes rendszerekben lehet az aposztrf helyett idzjelet () hasznlni. Az aposztrfok kztti jelsorozat az lland rtke. A literlok maximlis hossza rendszertl fgg, ltalban 256 s 4000 bjt kztt van. Egyes adatbzis-kezel rendszerek klnleges ABC-k (japn, knai, stb.) rsjeleit is megengedik. A dtum/idpont tpus llandkkal dtum/idpont tpus (DATE/TIME) adatelemeknek (ld. 5.4.3. pont) adhatunk rtket, hasonlthatjuk ssze velk. rtkket ltalban az alfanumerikus llandkhoz hasonlan aposztrfok kztt adjuk meg s formtumuk meg kell feleljen a rendszerben vagy az utastsban egyedileg meghatrozott dtum formtumnak. Magyarorszgon a leggyakrabban hasznlt dtum formtumok: vvvv-hh-napnap vvvv/hh/napnap vvvv-hh-napnap.rara.percperc.mpmp rara.percperc.mpmp (Az vek kivtelvel az egyes elemeket egy vagy kt szmjeggyel is rhatjuk, a nap 24 rs, pont helyett kettspont vagy pontosvessz is lehet az elvlaszt jel). A llandkra pldkat az 5.2. tblzatban mutatunk be. 5.2. tblzat: Pldk llandkra Numerikus Alfanumerikus Dtum 12 ABC 2006-12-31 -2,3567 abc 1999-1-1 +1234567 12 2008/02/29 -1,23 E 44 A1@b.hu 15.45.58

5-6

5.3.4. Opertorok s felttelek Az SQL opertoroknak egy vagy kt operandusa (argumentuma) lehet. Az opertorok specilis jelek (pl. + vagy *) vagy specilis SQL kulcsszavak (pl. IS NULL vagy LIKE) lehetnek. Az operandus lehet oszlop lland (literl) SQL fggvny kifejezs opertor az operandusaival Egyes specilis opertoroknl (IN, ANY, ALL) a msodik operandus egy tbb elembl ll lista is lehet. Az opertorokkal sszekapcsolt operandusok ltal meghatrozott kifejezs egy egyrtelm rtket hatroz meg. Ennek kirtkelshez figyelembe kell venni az operandusok precedencia sorrendjt. Ez (a legmagasabbal kezdve) a kvetkez: eljel (+, ) szorzs s oszts (*, / ) sszeads s kivons (+, ) sszehasonlt opertorok (pl. <, =) NOT logikai opertor AND logikai opertor OR logikai opertor Azonos precedencia szinten bell a kirtkels balrl jobbra trtnik. A precedencia szablyt zrjelekkel fellbrlhatjuk. Az SQL nyelvben hasznlatos legfontosabb opertor tpusok aritmetikai opertorok, sszehasonlt opertorok, logikai opertorok, halmaz opertorok. Az opertorokat tpusuktl fggen a SELECT utasts kivlasztsi listjban, vagy a WHERE vagy HAVING utasts-kiegsztsben, szubszelektek sszekapcsolsban, (ld. 5.6.3.2. pont) az INSERT utasts VALUE (ld. 5.6.3.5. pont), a DELETE utasts WHERE (ld. 5.6.3.3. pont) s az UPDATE utasts SET s WHERE (ld. 5.6.3.4. pont) utastskiegsztsben hasznlhatjuk. Az opertorok hasznlatt pldkon mutatjuk be. Ezeket az els nekifutskor ha tartalmuk mg nem rthet - az olvas kihagyhatja s az SQL utastsok megrtse utn tanulmnyozza majd t jra. 5.3.4.1. Aritmetikai opertorok Az aritmetikai opertorokat aritmetikai s dtum kifejezsekben, valamint eljelknt hasznljuk ugyangy, mint a matematikai kifejezsekben. Az opertorok precedencia szablyai is ugyanazok. Plda: select * from merleg where egyenleg <= regi_egyenleg 10000

5-7

5.3.4.2. sszehasonlt opertorok Az sszehasonlt opertorokat felttelekben hasznljuk kifejezsek sszehasonltsra. A rendszer az opertor kt oldaln lev elemeket sszehasonltja az opertor ltal meghatrozott mdon. Ennek az eredmnye vagy IGAZ (TRUE) vagy HAMIS (FALSE). A matematikban hasznlatos opertorok (=, <, <=, >, >=, <> nem egyenl jellse) mellett hasznlhatjuk mg az 5.3. tblzatban lthat specilis SQL sszehasonlt opertorokat is. 5.3. tblzat: Specilis SQL sszehasonlt opertorok Operandus IN Feladata Plda Brmelyikkel Select * from tantargy egyenl vizsglata. where tid IN ('SQL', 'DB', 'ORCL') (Kivlasztja TANTARGY-bl azokat a sorokat, melyeknl a TID tantrgykd a felsorolt rtkek brmelyikvel egyenl.) Brmelyikre igaz select * from hallgato vizsglata. where hid = ANY (select distinct hid from mithallgat where osztalyzat = 5 ) (Kivlasztja HALLGATO-bl azon hallgatk adatait, akiknek van jeles osztlyzatuk. A bels begyazott szelekt kivlasztja MITHALLGAT-bl azon hallgatk azonostit, akiknek van jeles osztlyzatuk, a kls szelekt pedig azok sszes adatt, akiknek azonostja brmelyik jeles azonostjval megegyezik) Mindegyikre igaz select * from sql00.mithallgat where gyakpont > ALL vizsglata. (select gyakpont from sql30.mithallgat) (Kivlasztja SQL00.MITHALLGAT-bl azokat a sorokat, ahol a GYAKPONT rtke nagyobb minden SQL30.MITHALLGAT GYAKPONT rtknl. Kt rtk kztt select * from mithallgat ( >= x s <=y ) where gyakpont BETWEEN 51 and 60 vizsglata. (Kivlasztja azokat a sorokat, melyekben GYAKPONT a megadott kt rtk kztt van, a hatrrtkeket is belertve) Ltezs vizsglata. insert into sql30.hallgato select * from sql00.hallgato h00 where EXSISTS (select * from sql80.hallgato h80 where h00.hid = h80.hid) (Csak azokat a sorokat rja be SQL00.HALLGATObl SQL30.HALLGATO-ba, melyek HID-je szerepel SQL80.HALLGATO-ban is.

ANY vagy SOME

ALL

BETWEEN x AND y

EXISTS

5-8

Operandus IS NULL

Feladata NULL rtk vizsglata.

Plda select hid, tid from mithallgat where osztalyzat IS NULL (kivlasztja azokat a hallgatkat s azokat a tantrgyakat, amikbl mg nem vizsgztak le, azaz OSZTLYZAT NULL rtk)

LIKE

Lsd kln felsorolva

Megjegyzsek: Csak azonos tpus operandusokat lehet sszehasonltani. Az sszehasonltsi sorrend numerikus operandusoknl a szmok eljeles rtke dtum tpus operandusoknl az idpont Jelsorozatoknl a bels kd szerinti sorrend. A szoksos ASCII kdnl karaktereknl a nvekv sorrend: szkz, specilis karakterek, szmjegy, nagy betk, kis betk. gyeljnk szmok karakteres brzolsnl! 2 > 12, de 02<12 s 2 < 12 A NOT megfordtja az utna kvetkez opertor igazsgtblzatt. Az ANY s a SOME egyenrtkek. Elttk az =, <>, <, >, <=, >= opertorok valamelyiknek kell llni. A felttel IGAZ, ha az sszehasonlts az ANY-lista legalbb egy elemre igaz, HAMIS, ha egyre sem. Az ALL eltt az =, <>, <, >, <=, >= opertorok valamelyiknek kell llni. A felttel IGAZ, ha az sszehasonlts az ALL-lista mindegyik elemre igaz, HAMIS, ha legalbb egyre nem igaz. A BETWEEN-nl a hatrrtkek is beletartoznak a felttelnek eleget tev rtkek krbe. (>= S <= -nek felel meg.) Az sszehasonlt opertorral meghatrozott (egyszer) feltteleket logikai opertorokkal (AND, OR) sszetett fetttelekk kapcsolhatjuk ssze. gyeljnk a mveletek sorrendjre s ha szksges, akkor ezt zrjelekkel tegyk rthetbb, illetve egyrtelmv. A NULL rtkre vonatkoz specilis szablyok: A NULL rtkre csak az IS NULL vagy az IS NOT NULL opertorokkal krdezhetnk r. Ha az =, <, >, <=, >=, <> opertorok brmelyik operandusa NULL rtk , akkor a felttel rtke se nem IGAZ, se nem HAMIS, hanem MEGHATROZATLAN (ld. 5.3.4.3. pont 5.7. tblzat). A NULL rtket semmilyen ms rtkkel nem hasonlthatjuk kirtkelhet mdon ssze. Ha pl. EVF rtke egy sorban a NULL rtk, akkor ez a sor az EVF = 4, EVF > 4, EVF < 4, EVF <> 4 felttelek egyiknl sem jelenik meg. Kivtel, hogy nvekv rendezettsg sorrendben (ORDER BY ... ASC) val megjelentsnl a NULL rtkek (belltstl fggen) a rendezett halmaz elejre/vgre, cskken sorrendnl pedig (ORDER BY ... DESC) a vgre/elejre kerlnek. Specilis opertor a LIKE opertor, ami egy jelsorozatot hasonlt ssze egy adott mintval. Igen gyakran hasznljuk azokban az esetekben, amikor a keresend jelsorozat rtket nem ismerjk egszen pontosan. 5-9

Formtuma:

Magyarzat: A mvelet a char-1 karakter rtket szolgltat oszlop, kifejezs vagy fggvny rtkt karakterenknt sszehasonltja az ugyancsak karakter rtket ad char-2-ben lev mintval, mely joker, vagy ms nven helyettest, vagy maszk karakter(eke)t is tartalmazhat. A szabvnyos joker karaktereket az 5.4. tblzatban foglaltunk ssze. A joker jelek megvltoztathatk, egyes rendszerekben a % helyett a * (csillag) az alaprtelmezs. 5.4. tblzat: Joker karakterek s funkcijuk Joker karakter % (szzalk jel) _ (alhzs) Funkcija Akrhny karaktert helyettesthet. Pl.: 'ABcd', 'AB', 'ABX12' mindegyikre igaz a LIKE 'AB%' felttel. Pontosan egy karaktert helyettest. Pl.: 'x0123', 'x2123' mindegyikre igaz a LIKE 'x_123' felttel, de 'x11123'-ra hamis. (Erre a LIKE 'x%123' igaz.

Megjegyzsek: A LIKE felttel igaz ha a char-1 tartalma megegyezik a char-2 mintval, azaz a nem joker karakterek sorrendben karakterrl karakterre azonosak mind a kettben. A NOT LIKE felttel igaz ha a char-1 tartalma brmiben eltr a char-2 minta joker(ek) nlkli karaktereitl. Az sszehasonltsnl a kis- s nagybetk klnbznek. Ha ez problmt okozhat, hasznljuk az UPPER vagy a LOWER fggvnyt. (ld. 5.5.2.1. pont s a 2. plda) A joker jel(ek)-et a minta brmely rszn elhelyezhetjk. LONG tpus oszlopra nem hasznlhatjuk a LIKE felttelt. Ha a LIKE felttel char-2 mintjban az els karakter % vagy _ (joker karakter) akkor az SQL nem tud indexet hasznlni. Az ilyen feltteleket rossz hatkonysguk miatt lehetleg kerljk.

Pldk: 1. Ki akarjuk ratni MITHALLGAT-bl azoknak a hallgatknak az adatait, akik az ORCL, DB2, SQL, MSQL tantrgyak brmelyikt felvettk. Utasts: select * from mithallgat where tid in (ORCL, DB2, SQL, MSQL); 2. Meg akarjuk tudni, kik azok a hallgatk, akik asszonynevkn szerepelnek a HALLGATO tblban. Mivel nem tudjuk, hogy a VNEV vezetknv s a KNEV

5-10

keresztnv oszlopokban milyen betkkel adtk meg a neveket, az UPPER fggvnyt is hasznljuk. Utasts: select vnev,knev from hallgato where upper(vnev) like '%N' or upper(knev) like '%N'; Eredmny: Megkapjuk az sszes olyan hallgatt, akinek vagy a vezetk- vagy a keresztneve n, N , vagy a logikailag nem valszn N , vagy n-re vgzdik. (Termszetesen ezek nem biztosan frjezett nk. Akinek pldul Spin Gyrgy a neve, az valsznleg nem az.) 3. (Elgg eltlend mdon) nem ksztettnk idegen kulcsokat a MITHALLGAT tblban a HID hallgat azonostra. Meg akarjuk tudni, hogy van-e a tblzatban nem ltez hallgat. Utasts: select hid, tid from mithallgat where not exists (select hid from hallgato where mithallgat.hid = hallgato.hid); Eredmny: Kirja mindazon HID,TID prokat, melyet olyan azonostval rendelkez hallgat vett fel, aki nem szerepel a HALLGATO tblzatban. 5.3.4.3. Logikai opertorok A logikai opertorok (AND, OR, NOT) egy vagy kt felttelbl egy j felttelt lltanak el. Hasznlatukra a Boole-algebra szablyai rvnyesek. A NULL rtk miatt azonban az sszetett felttelek igazsgtblzatai kiegszlnek az 5.5., 5.6. s 5.7. tblzatban lthat mdon. A ? az jelzi, hogy a felttel (pldul NULL rtk operandus miatt) nem rtkelhet ki, az eredmny meghatrozhatatlan. 5.5. tblzat: A NOT operandus igazsgtblzata Felttel NOT felttel IGAZ hamis HAMIS igaz ? ?

5.6. tblzat: Az AND operandus igazsgtblzata Felttel-1 Felttel-2 AND IGAZ HAMIS ? IGAZ igaz hamis ? HAMIS hamis hamis hamis ? ? hamis ?

5-11

5.7. tblzat: Az OR operandus igazsgtblzata Felttel-1 Felttel-2 OR IGAZ HAMIS ? IGAZ igaz igaz igaz HAMIS igaz hamis ? ? igaz ? ?

Plda: 1. Utasts rszlet: ... where oszlop1_ertek in (1, 4, 8, 88) or (oszlop1_ertek = 0 and oszlop2_ertek between 100 and 9999) Eredmny: Az in, or, =, and, between opertorok (logikai) feltteleket hoznak ltre, melyeknek vgeredmnye az operandusok rtktl fgg. Igaz ha oszlop1_ertek az 1, 4, 8, 88 rtkek brmelyikvel egyenl, vagy az oszlop1_ertek = 0 s ugyanakkor 100 <= oszlop2_ertek <= 9999. 5.3.4.4. Halmaz opertorok A halmazopertorok kt szubszelekt eredmnybl egy j eredmnyt lltanak el. Ez a szubszelektek rszeredmnyeinek a soraibl ll ssze. A kivlasztott sorokat a halmazopertor hatrozza meg. Az SQL halmaz opertorokat s funkciikat az 5.8. tblzatban foglaltuk ssze. 5.8. tblzat: SQL halmaz opertorok Opertor UNION UNION ALL INTERSECT MINUS Funkcija Mindkt szubszelekt minden sort tartalmazza, de az azonos sorokat csak egyszer. Mindkt szubszelekt minden sort tartalmazza. Csak azokat a sorokat tartalmazza, amelyek mindkt szubszelektben elfordulnak, de az azonos sorokat csak egyszer. Csak azokat a sorokat tartalmazza, amelyek az els szubszelektben elfordulnak, de a msodikban nem. Az azonos sorok csak egyszer szerepelnek.

Megjegyzsek: Kettnl tbb szubszelekt eredmnyt a halmaz opertorok ismtelt alkalmazsval kapcsolhatjuk ssze. Az opertorok egyenrangak, a kirtkels balrl jobbra trtnik. Ha nincs utna rendezs, akkor a UNION ALL gyorsabb, mint a UNION. Ezrt ha logikailag tudjuk, hogy nem lehetnek az eredmnyben azonos sorok, akkor mindig a UNION ALL-t hasznljuk. A szubszelekt-ek kivlasztsi listja azonos szm s azonos tpus elemeket kell tartalmazzon azonos sorrendben rendezve. (Az egyes elemek nevei klnbzhetnek az egyes szubszelektekben.)

5-12

Pldk: 1. rassuk ki sajt s SQL30 TANTARGY tblzatbl a tantrgyak neveit (TMEGNEV) s oktatit (OKTATO). Tntessk fel azt is, hogy az adat melyik tblzatbl szrmazik (sajt tblzatunknl a SAJT szveget). Az eredmnyt rendezzk tantrgyak, majd oktatk szerint, ezen bell elbb a sajt soraink jjjenek. Utasts: select tmegnev, oktato, 'SAJT' as TULAJ from tantargy UNION ALL select tmegnev, oktato, 'SQL.30' as TULAJ from sql30.tantargy order by 1,2,3; 2. rassuk ki sajt s SQL30 TANTARGY tblzatbl azon tantrgyak neveit (TMEGNEV) s oktatit, amelyek mindkt tblzatban szerepelnek. Az eredmnyt rendezzk tantrgyak, majd oktatk szerint. Utasts: select tmegnev, oktato from tantargy INTERSECT select tmegnev, oktato from sql30.tantargy order by 1,2; 5.3.4.5. Felttelek A logikai opertorokkal ellltott felttelek kirtkelse a matematikban szoksos mdon trtnik. Klnbsget jelent, ha valamelyik operandusban NULL rtk szerepel. A NULL rtket tartalmaz kifejezsek kirtkelst az 5.3.7. pontban trgyaljuk, az gy kiegsztett igazsg tblzatokat pedig az 5.5., 5.6., 5.7. tblzatokban foglaltuk ssze. A specilis SQL opertorokkal kpzett felttelek kirtkelst az ott megadott pldkon nyomon kvethetjk. 5.3.5. Hatrol jelek Az SQL fenntartott szavakat s azonostkat egyarnt rhatjuk kis- s nagybetkkel is. Minden egyes nll elemet egybe kell rnunk. A nyelv klnbz elemeit viszont szkzzel vlasztjuk el. A szkzk szma tetszleges lehet. Literlon bell a kis- s nagybets brzolsmd s a szkzk szma is lnyeges. Az azonostk klnbz szintjeit egy ponttal (.) vlasztjuk el egymstl. Ha ugyanazon elemtpus ismtldik, akkor ezeket a szintaktikban meghatrozott jel, ltalban vessz (,), esetenknt szkz vlasztja szt. Az utastsok vgt pontosvessz (;), egyes programnyelvekben az END-EXEC kifejezs jelzi. Programban az utasts kezdett is jelezni kell. Erre szolgl az EXEC SQL jelsorozat. 5.3.6. Objektumok Egy adatbzis fizikailag is s logikailag is klnbz tpus hierarchikus elrendezs objektumokbl pl fel. Sajnos a terminolgia csak a hierarchia alsbb szintjein egysges. A fels szinteken pldul az IBM Database fogalma nagyjbl az ORACLE Schema (sma) fogalmval azonos s a logikai s fizikai objektumok sszekapcsolsi mdja is klnbzik. Az tlagfelhasznl azonban szerencsre ebbl nem sokat vesz szre. A legfontosabb objektumok hierarchiban a kvetkezk: 5-13

Adatbzis (Database) logikai feloszts: sma (Schema) tblzat (Table), nzet (View), trolt nzet (Materialized View), sorszm genertor (Sequence), szinonima (Synonym), index (Index), trigger (Trigger) fizikai feloszts: adat fjlok tablespace adat blokk, lap (Page) adatbiztonsgi fjlok, katalgus fjlok. Ezeknek az objektumoknak a tbbsgt rszletesen ismertettk a relcis modellnl (ld. 4.3. alfejezet). Ezrt itt csak nhny kiegsztst tesznk, ami ezen objektumoknak az SQL-hez val kapcsoldst teszi rthetbb. 5.3.6.1. Adatbzis (Database) Az ORACLE s sok ms rendszer terminolgijban ez az adatbzis-kezel rendszer ltal egysgesen kezelend adatok sszessge. A rendszert az adatbzis szerver gp mkdteti. 5.3.6.2. Sma (Schema) A sma egy felhasznl objektumainak az sszessge. A sma neve megegyezik a sma tulajdonosnak az azonostjval Az objektumok azonostjnak els komponense mindig a sma-nv. Ha nem adjuk meg explicit, hogy melyik smban dolgozunk, akkor a rendszer felttelezi, hogy a sajt smnkban vagyunk s ennek megfelelen cselekszik. A sajt smnkban a sajt objektumainknak mi vagyunk a tulajdonosa s ezekre minden jogosultsgunk megvan. Msok objektumaival csak akkor dolgozhatunk, ha erre az objektum tulajdonostl engedlyt kaptunk (ld. 5.6.2.4. pont). Az IBM terminolgiban a smnak lnyegben a Database felel meg, de ott az tbb felhasznl objektumait is tartalmazhatja s a neve sem kttt. Ebben minden jogosultsggal csak az adott adatbzis adatbzis-felgyelje rendelkezik. Az objektumok azonosti a tulajdonos nevvel egszlnek ki. Mindenki automatikusan a sajt objektumaival dolgozik s csak ezekre van meg minden jogosultsga. Smt ltalban csak az adatbzis-felgyel hozhat ltre. A sajt smnk objektumait a CREATE utastsokkal hozhatjuk ltre (ld. 5.14. tblzat:. pont), a DROP utastsokkal szntethetjk meg (ld. 5.6.2.2. pont) s az ALTER-rel mdosthatjuk (ld. 5.6.2.3. pont). TBLZAT (TABLE) Az adatok trolsra szolgl. Megfelel egy fizikailag is ltez relcinak (ld. 4.3. alfejezet). A logikailag sszetartoz adatok alkotjk a tblzat sorait. Ezek felelnek meg a relci egyedeinek, elfordulsainak. Az egyedek tulajdonsgait reprezentljk a tblzat oszlopai. A sorok egyrtelm azonostsra szolgl a tblzat elsdleges kulcsa (Primary

5-14

Key). Ms tblzatokkal val egy tbb (1:N) kapcsolatot az idegen kulcsok (Foreign Key) biztostanak. A tblzatnak minden oszlopt egyenknt definilnunk kell (ld. 5.4. alfejezet). Amikor a tblzatot ltrehozzuk, akkor az alaprtelmezssel vagy explicit megadjuk, hogy az melyik Tablespace-ben, melyik adatfjlban jjjn ltre, hol troljuk fizikailag az adatait. Ugyancsak megadhatjuk azt is, hogy betltskor mennyi helyet hagyjunk szabadon a ksbbi bvtsek beszrsra, mi szerint srsdjenek a rekordok. NZET (VIEW) A nzet egy vagy tbb tblzatbl meghatrozott szempontok alapjn kivlasztott adatok reprezentlsra szolgl (ld. 4.3. alfejezet). Megfelel egy virtulis relcinak, melynek adatait a tblzat(ok)ban tnylegesen trolt aktulis adatokbl a nzet defincijnak megfelelen vlasztja ki a rendszer. Lekrdezsekben a nzeteket ugyangy hasznlhatjuk, mint a tblzatokat. Adatok vltoztatsnl bizonyos korltozsok lehetnek. Vannak olyan nzetek, melyeken keresztl nem lehet adatokat vltoztatni. Ilyenek pldul azok, amelyek csoportkpz fggvnyt vagy joint tartalmaznak. Nem rhatunk be olyan nzeten keresztl, amelyik nem tartalmazza brmely bzistblzatuknak egy NOT NULL-knt definilt oszlopt. Azokat a tblzatokat, amelyekbl a nzet adatait kivlasztjuk nevezzk a nzet alap vagy bzis tblzat(ai)nak. A bzis tblzat adatainak megvltoztatsa magval vonja a nzeten keresztl ltott adatok vltozst is. Hasonlan, ha nzeten keresztl vltoztatunk (ha lehet), akkor ez a bzis tblzat(ok) megvltoztatst jelenti. TROLT NZET (MATERIALIZED VIEW) A nzet adatait a rendszer minden egyes lekrdezsnl jra kiszmolja. Ez, klnsen aggregtumok kiszmolsnl igen hosszadalmas lehet. Ha az adatok csak ritkn vltoznak, akkor az jraszmols ltalban flsleges is. Ilyenkor definilhatunk egy trolt nzetet, amelyik a nzetben definilt adatokat fizikailag is tartalmazza. gy lekrdezskor ezeket nem kell jra kiszmolni. Amennyiben az alaptblzatban brmi vltozs trtnik, a trolt nzet adatai is jraszmtdnak. A trolt nzetek helyet foglalnak el, de ritkn vltoz adatoknl meggyorstjk a lekrdezst. Ezrt gyakran alkalmazzk adattrhzakban (ld. 9. fejezet). SORSZM GENERTOR (SEQUENCE) A sorszmgenertor minden egyes meghvskor egy, az addigiaktl klnbz szmot szolgltat. Ezek lehetnek vletlen szmok, vagy egy monoton szmsorozat egymst kvet elemei. Gyakran hasznljk a rekordokba mestersgesen beillesztett elsdleges kulcs generlsra. Klnsen hasznos akkor, ha j adatok bevitele tbb, egymstl fggetlen helyrl is trtnhet, mert gy biztosthat, hogy dupliklt kulcs hiba nem fog elfordulni. TRIGGER A trigger valjban nem objektum, hanem egy trolt SQL utasts-sorozat, amelyik egy tblzaton vagy nzeten vgrehajtand utasts(ok)hoz kapcsoldik. Minden alkalommal mieltt (BEFORE trigger) vagy miutn (AFTER trigger) a triggert kivlt utasts vgrehajtdik a tblzaton/nzeten, a triggerben definilt trolt utasts-sorozat is automatikusan vgrehajtdik. Ezzel biztosthatjuk az adatok mdosts utni konzisztencijt. A trigger mkdst brmelyik adatmdost utasts (DELETE, INSERT, UPDATE) kivlthatja Triggereket hasznlhatunk tbbek kztt

5-15

ugyanazon vagy klnbz tblzatok/nzetek adatai kzti sszefggsek automatikus biztostshoz, auditlshoz, a felhasznl figyelmeztetsre, tblzatnak/nzetnek vagy rszeinek automatikus dupliklsra, Tipikus plda a trigger hasznlatra, hogy ha egy hallgatt trlnk a HALLGATO tblzatbl, akkor a triggerrel az adatait (vagy azok egy rszt) automatikusan berjuk az erre a clra ltrehozott VOLT_HALLGATO tblzatba. 5.3.7. NULL rtk Ha egy oszlopnak nem adunk explicit vagy alaprtelmezssel rtket, akkor annak tartalma NULL, ms nven a NULL rtk lesz. Ez nem tvesztend ssze sem a 0 szmmal, sem a szkzzel. Lnyeges klnbsg van akztt, hogy valaki nulla fizetsrt nkntesknt dolgozik (ez a 0 rtk), vagy nem tudom, mennyi a jvedelme (ez a NULL rtk). A NULL rtk minden adattpusnl megengedett. Nem hasznlhat azonban olyan oszlopokban, amelyeket NOT NULL-knt definiltunk, elsdleges kulcs-knt, vagy annak rszeknt definiltunk (ld. 5.14. tblzat:. pont). Minden aritmetikai mvelet s fggvny, amelyiknek brmelyik komponense a NULL rtk ugyancsak a NULL rtket adja eredmnyl. gy pldul ha az OSZLOP1 oszlop aktulis rtke a NULL rtk, akkor a 10+OSZLOP1, 10*OSZLOP1 kifejezsek vagy a LOWER(OSZLOP1)) fggvnyek rtke is a NULL rtk lesz. Az argumentumra NULL rtkeket tartalmaz sorokat a COUNT(*) kivtelvel egyik csoport fggvny sem veszi figyelembe. Ezrt elfordulhat, hogy ha NUMERIKUS_OSZLOP NULL rtket is tartalmazhat, akkor AVG(NUMERIKUS_OSZLOP) s SUM(NUMERIKUS_OSZLOP) /COUNT(*) nem egyenl, mivel COUNT(*)-ba a NULL rtk sorok is beszmtdnak, a SUM-ba viszont nem. A NULL rtkkel kapcsolatos mveleti szablyokat az opertoroknl, a logikai opertoroknl (ld. 5.3.4.3. pont) ismertettk. Azrt, hogy a NULL rtkkel is tudjunk kzvetlenl dolgozni, lehetsg van ennek meghatrozott rtkre val tkonvertlsra. Ilyenkor, ha az eredmny NULL rtk lenne, akkor helyette a megadott rtk jelenik meg az eredmnyben. Ennek formja rendszerfgg. Egyik lehetsg az NVL(kifejezs-1, kifejezs-2 ) (ms rendszerben a VALUE vagy COALESCE) fggvny alkalmazsa, amelynek rke kifejezs-1, ha az nem NULL rtk s kifejezs-2 klnben (ld. 5.3.8. pontban a 4. plda). Pldk: 1. Meg akarjuk tudni a HALLGATO tblzatunkbl, hogy kiknek nem ismerjk a szletsi idpontjt (SZDATUM). Utasts: select vnev,knev,hid from hallgato where szdatum is null order by vnev,knev; Eredmny: ABC sorrendben kilistzza azoknak a nevt s azonostjt, akiknek nem ismerjk a szletsi idpontjt.

5-16

2.

Meg akarjuk tudni, kik azok a hallgatk, akik 1980 eltt szlettek. Utasts: select vnev,knev,hid,szdatum from hallgato where szdatum < '1980-01-01' order by vnev,knev;

Eredmny: Megkapjuk az sszes olyan hallgatt, aki 1980. janur 1. eltt szletett. Ez nem biztos, hogy elegend szmunkra, hiszen azok kztt is lehetnek mg 1980 eltt szletettek, akiknek szletsi idejt nem ismerjk. Hogy ezekrl is legyen valami informcink, kiegsztjk az utastst: Utasts: select szdatum,vnev,knev,hid from hallgato where szdatum < '1980-01-01' or szdatum is null order by szdatum, vnev,knev; Eredmny: Elszr szletsi sorrendben kilistzza azoknak a nevt s azonostjt, akik 1980. janur 1. eltt szletettek, majd ABC sorrendben azoknak a nevt s azonostjt, akiknek nem ismerjk a szletsi idpontjt. 5.3.8. SQL kifejezsek Egy SQL kifejezs egy vagy tbb oszlop, lland, SQL kifejezs, SQL fggvny s opertor kombincija, ami eredmnyl egy rtket szolgltat. A kifejezsek brmilyen adattpust reprezentlhatnak. ltalban brmely adattpus helyett hasznlhatk SQL utastsokban, fggvnyekben s felttelekben. A legegyszerbb kifejezs az egy oszlopbl, egy llandbl, egy SQL fggvnybl, vagy egy specilis SQL rtkbl ll egy tag kifejezs. (ld. 1. plda). sszetett kifejezseket kpezhetnk egyszer vagy sszetett kifejezsekbl aritmetikai opertorokkal (ld. 2. plda) vagy, amikor a fggvny argumentuma egy fggvny vagy kifejezs (ld. 3. plda). Egy kifejezsben ltalban csak azonos adattpusok szerepelhetnek. Ha klnbz adattpusokat tartalmaz, azokat azonos tpusra kell konvertlnunk. (Nha a rendszer ezt automatikusan is elvgzi, de ebben ne bzzunk!) A kifejezs adattpusa rendszerint megegyezik a kifejezs sszetevinek adattpusval. Nhny specilis kivteltl eltekintve (pl. CONCAT, NULL rtk talaktsa), ha egy kifejezs brmely tagja a NULL rtk akkor a kifejezs rtke is a NULL rtk lesz. Pldk: 1. Egy elembl ll kifejezsek: vnev 'NINCS ADAT' upper(vnev) sysdate vagy current date 2. sszetett kifejezsek: gyakpont + 10 mithallgat.gyakpont 10 (30 * osztalyzat + gyakpont)/100 (avg(osztalyzat) + avg(sql30.osztalyzat))/2 sql30.mithallgat.gyakpont * 10 current date + 10 SYSDATE + 10 hallgato.vnev 12345 count(*) sql30.hallgato.vnev 12345 '2004-03-30' NULL

5-17

3.

sszetett fggvny kifejezsek: upper(initcap(vnev)) concat(concat(concat(concat('ir_szam',' '),'varos'),' '),'lakcim') round(avg(osztalyzat),1)

4.

Mveletek NULL rtkek esetn.

A FIZETES s a JUTALOM oszlopok egyarnt tartalmazhatnak NULL rtket is. Ekkor az AVG(FIZETES + JUTALOM) s az AVG(FIZETES)+AVG(JUTALOM) rtke eltrhet, mert az elsbe nem szmtanak be azok a sorok, amelyekben akr FIZETES, akr JUTALOM NULL rtk volt. Ha elfogadjuk, hogy ebben az esetben a NULL rtket 0-nak tekintjk, akkor AVG(NVL(FIZETES,0)+NVL(JUTALOM,0)) a helyes. 5.4. Adattpusok Az adatbzis tblzataiban minden oszlopnak s llandnak (literl) megfelel egy adattpus. Ezt a tblzat ltrehozsakor a CREATE TABLE utastsban (ld. 5.14. tblzat:. pont) kell definilnunk. Minden adattpusnak meghatrozott tulajdonsgai vannak s csak az adattpusnak megfelel mveleteket lehet elvgezni velk. gy pldul karakter tpus adatokkal nem lehet aritmetikai mveleteket vgezni, kt dtum tpus adat klnbsgt kpezhetjk, de sszegt nem. Numerikus vagy dtum tpus adatnak nem adhatjuk az egy rtket, mg a 2004-03-30 rtk mind karakter mind dtum adattpusba bevihet. (Utbbiba csak akkor, ha ez megfelel az aktulisan rvnyes dtum formtumnak.) A leggyakoribb adattpusok a kvetkezk: karakter, numerikus, dtum/idpont, sorazonost (ROWID), hossz adatok. A fentieken kvl lteznek ms adattpusok s magunk is definilhatunk klnfle adattpusokat. Mivel azonban ezeket csak igen ritkn s specilis clokra hasznljk, velk a tovbbiakban nem foglalkozunk. Az adatbzisokkal elssorban elmletben, vagy csak az oktatsval foglalkoz szakemberek kedvrt azonban megemltjk mg a logikai (Boolean) adattpust is. Ez egy logikai vltoznak felel meg, amelyik csak az IGAZ (TRUE), vagy a HAMIS (FALSE) rtkeket veheti fel. A gyakorlatban mkd nagy adatbzisokban azonban ezeket szinte sehol sem hasznljk.69 Az adatbzis-kezel rendszerek ltalban nem engedik meg, hogy egy mveletben klnbz adattpusok szerepeljenek. Ezrt ltalban egy kifejezs minden tagjnak, egy felttel operandusainak, az sszetartoz input s output adatelemeknek a tpusa azonos kell legyen. Ha ez nem ll fenn, akkor egy konvertl fggvny segtsgvel azonos adattpusra kell talaktani ket. Bizonyos esetekben az adatbzis-kezel rendszer utastsrtelmezje automatikusan tkonvertl a klnbz adattpusok kztt. gy pldul klnbz karakter tpusok vagy eltr numerikus brzolsmdok kztt soha nem szksges konvertlni. Ennek ellenre javasoljuk, hogy ha pl. egy utasts vagy fggvny eredeti inputja nem a kvnt formban van, akkor azt elbb alaktsuk t a megfelel adattpusra s formtumra.
A szerz 30 ves adatbzisokkal kapcsolatos tevkenysge sorn csak egyszer kerlt olyan helyzetbe, hogy a tiszta elvi koncepcit kedvel elmleti szakrtk kvnsgra egy szemlyi nyilvntartsban a csupn kt rtket (frfi, n) felvehet NEM adattpust logikainak definilja. De vgl ez sem valsult meg, mert a hlgy munkatrsak s felhasznlk kifogsoltk, hogy a nkre gy krdeznk r: HAMIS?
69

5-18

5.4.1. Karakter adattpus Karakter tpus adatok befogadsra szolgl adattpus. Az gy definilt oszlopban brmilyen karakter trolhat. Azt, hogy egy adott bjtnak milyen karakter felel meg, az adatbzis generlsakor meghatrozott kdkszlet hatrozza meg. Ez utna mr nem vltoztathat meg. A legtbb adatbzis-kezel rendszer alaprtelmezsben az ASCII kddal dolgozik, az IBM UDB viszont az EBCDIC-vel. A karakter tpus adatok definilsi formit az 5.9. tblzatban foglaltuk ssze. 5.9. tblzat: Karakter adattpusok definilsa. Adattpus CHAR(n) CHAR VARCHAR(n) VARCHAR2(n) Megjegyzsek: Ha adatbevitelkor a troland karaktersorozat hosszabb az oszlop definilt hossznl, (karakterek-szma > n), akkor hibajelzst kapunk s az rtk nem kerl be az oszlopba. CHAR(n) adattpusnl, ha a karakterek szma kisebb az oszlop hossznl, akkor a jelsorozat a vgn szkzkkel kiegsztve, a rgztett hosszsgban kerl be az oszlopba. A klnbz sszehasonltsok is az gy kiegsztett tartalom alapjn trtnnek meg. VARCHAR (ORACLE-ben VARCHAR2) adattpusnl, ha a karakterek szma kisebb az oszlop maximlis hossznl, a jelsorozat tnyleges hossza lesz az oszlop trolt hossza. Az ilyen formban trolt adatok rendszerint kevesebb helyet foglalnak el, mintha ugyanazokat a karaktereket rgztett hosszsgnak definilt CHAR(n)-knt trolnnk. Figyelembe kell vennnk azonban, hogy az oszlop aktulis hosszt is trolnunk kell (ez 2 bjt) s minden hozzfrsnl mindig dinamikusan meg kell hatroznunk, ami idt jelent. Ezrt a gyakorlatban csak akkor rdemes vltoz hosszsggal dolgoznunk, ha az tlagos helymegtakarts rekordonknt legalbb 10-15 bjt. A VARCHAR tpus adatok tnyleges hosszt a LENGTH fggvnnyel (ld. 5.5.2.1. pont) krdezhetjk le. Karakter tpus s numerikus illetve dtum tpus adatok kztt a klnbz konvertl fggvnyekkel (ld. 5.5.2.4. pont) hajthatunk vgre konverzit. Definci Pontosan n bjtbl ll karaktersorozat. 1<= n <=255. Pontosan egy bjt. Brmilyen karaktert tartalmazhat. Legfeljebb n bjtbl ll karaktersorozat. 1<= n rtkt mindig meg kell adnunk. Maximlis rtke rendszertl fgg, az ORACLE-ben 2000, IBM UDB-ben 32706.

Plda: 1.

FIX_CHAR defincija VARCHAR2(10). A beviend rtk 'A1234' 'x <> -12' '12345678910'

CHAR(10),

VALTOZO_CHAR-

VARCHAR(10)

illetve

FIX_CHAR rtke 'A1234 ' 'x <> -12 ' HIBA! Az adat tl hossz, nem kerl be az oszlopba.

VALTOZO_CHAR rtke 'A1234' 'x <> -12' HIBA! Az adat tl hossz, nem kerl be az oszlopba.

5-19

5.4.2. Numerikus adattpus Numerikus adatok befogadsra szolgl adattpus. Rendszertl fgg, hogy miknt kell definilni a klnbz szmbrzolsban troland szmokat, s hogy milyen szmformtumok megengedettek. A leggyakoribb definilsi formkat az 5.10. tblzatban foglaltuk ssze. (Nem mindegyik rendszerben rvnyes mindegyik forma.) 5.10. tblzat: Numerikus adattpusok definilsa Adattpus NUMBER(p,s) vagy DECIMAL(p,s) vagy DEC(p,s) NUMBER(p) vagy DECIMAL (p) DEC(p) NUMBER REAL vagy FLOAT FLOAT DOUBLE PRECISION INTEGER vagy INT SMALLINT Megjegyzsek: Ha a beviend jelsorozat nem ad a definilt formtumnak megfelel rvnyes szmot, akkor hibajelzst kapunk. Ha a troland adat rtkes jegyei nem frnek be a definilt oszlopba (pl. NUMBER/DECIMALnl az rtkes jegyek szma > p s, SMALLINT abszolt rtke > 32767), akkor hibajelzst kapunk s az rtk nem kerl be az oszlopba. Ha a tizedes jel utni jegyek nem frnek be az oszlopba, akkor az rtk kerektve kerl be az oszlopba. Interaktv SQL-ben a numerikus adatoknak a kpernyn val megjelentsi formjt szablyozhatjuk. Ennek mdja azonban rendszerfgg. Klnbzkppen definilt numerikus adatokat sszehasonltsokban, kifejezsekben a rendszer automatikusan egysges alakra alakt t. Karakter tpus s numerikus adatokat a megfelel konvertl fggvnyekkel (ld. 5.5.2.4. pont) konvertlhatjuk egymsba. brzolt szm sszesen 1 <= p <= 18 (egyes rendszereknl 38) jegybl ll eljeles szm, melybl a s a tizedesjeltl jobbra ll jegyek szma. sszesen 1 <= p <= 18 (egyes rendszereknl 38) jegybl ll eljeles tmrtett formban trolt egsz szm. Egy jegy tmrtett formban trolt eljeles egsz szm. 4 bjton brzolt eljeles lebegpontos szm. 8 bjton brzolt eljeles lebegpontos szm. 4 bjton trolt eljeles egsz szm. 2 bjton trolt eljeles egsz szm.

5-20

Plda: 1. SZAM defincija NUMBER(4,2) illetve DEC(4,2) A beviend rtk 1.23 31.2 1.234 1.235 9 0.001 -12.34 1,2,3 123 A trolt rtk 01.23 31.20 01.23 01.24 09.00 00.00 -12.34 HIBA! Kt tizedes jel HIBA! Tl nagy rtk!

5.4.3. Dtum/idpont adattpus (DATE/TIME) Dtumot s idt tartalmaz adatok befogadsra szolgl adattpus, mely a megfelel dtum/id rtket egy binris szmknt trolja, de a felhasznl szmra az ltala definilt formban jelenti meg. Br ilyen adatokat karakter s numerikus formban is trolhatunk, clszer ezeket mgis mindig dtum/idpont tpus vltozban trolni, mert ezltal automatikusan ellenrizni tudjuk, hogy rvnyes dtumot s/vagy idpontot adtunk meg. (Pl. a 2003-02-29 dtumra hibajelzst kapunk, mg a 2004-02-29 dtumot a rendszer elfogadja.) Knnyen tudjuk a dtumokat klnbz formban megjelenteni. (Pl. a magyar 2007-03-30 vagy 2007.03.30 forma helyett a 30-MARCH-2007 angolt vagy 3/30/2007 amerikait.) Knnyen tudunk velk mveleteket vgezni. (Pl. hny nap van az adott hnap utols napjig, a 2007.02.27 utni 3. nap 2007.03.02, de a 2008.02.27 utni 2008.03.01., hny nap telt el kt dtum kztt, stb.) A dtum/idpont adattpusok definilsa is rendszerfgg. Van, ahol a DATE-knt definilt adattpus a naptri dtum mellett a napi idt is tartalmazza msodperc pontossgra, ms rendszerekben a DATE adattpus csak a dtumot, a TIME csak a napon belli idpontot tartalmazza s a kettt egytt mikroszekundum pontossggal a TIMESTAMP adattpus tartalmazza (IBM UDB/DB2). Az alaprtelmezett dtumformtum rendszer fgg, amit termszetesen ignyeink szerint mdosthatunk. Ennek mdja adatbzis-kezel rendszerenknt eltr. Az ORACLEben pldul az NLS_DATE_FORMAT inicializlsi paramter hatrozza meg. Ha nem adunk meg konvertl fggvnyt, akkor minden dtum/id tpus rtk az alaprtelmezett formban jelenik meg a kpernyn s llandknt is gy kell megadnunk. Karakter s dtum/idpont tpus adatokat a megfelel konvertl fggvnyekkel (ld. 5.5.2.4. pont) konvertlhatjuk egymsba. Az SQL nyelvben leggyakrabban hasznlt konvertl s dtum fggvnyeket az 5.5.2.3. s az 5.5.2.4. pontokban ismertetjk. A dtum aritmetika szablyai szerint az albbi mveleteket vgezhetjk el dtum/idpont tpus vltozkkal: Hozzadhatunk vagy kivonhatunk napokat egy adott dtumbl. Az eljeles egszszm a dtumhoz hozzadand/kivonand napok szmt adja meg. (ld. 1. plda).

5-21

Pldk: 1.

Hozzadhatunk vagy kivonhatunk rkat, perceket egy adott dtumbl. Az rkat (ra/24), a perceket (perc/1440) formban kell megadnunk. Kt dtum tpus adat klnbsge a kett kztt eltelt napok szmt adja meg. (ld. 2. plda). gyeljnk arra, hogy dtum/idpont rtkek NEM lehetnek szorzk, osztk, osztandk s kt ilyen tpus rtket NEM adhatunk ssze.

A DATUM oszlop DATE tpusknt van definilva. Utasts: select datum+1 as holnap, datum-7 egy_hete from

Eredmny: a holnapknt kivlasztott oszlop rtke a datum utni nap lesz, egy_hete pedig az egy httel eltti nap. 2. Ha az ESEDEKES oszlop aktulis rtke '2007-05-31', akkor ESEDEKES - '2007-04-30' rtke 31 lesz.

5.4.4. Sorazonost (ROWID) Minden sornak van egy bels cme a tblzatban. Ezt tartalmazza hexadecimlis formban a minden rekordnak rszt kpez ROWID pszeudooszlop. Ez a teljes rekord kiolvassakor (SELECT * FROM ) nem jelenik meg, csak ha kln rkrdeznk. Ha ismerjk a ROWID rtkt, akkor a rekordhoz a leggyorsabban ennek alapjn frhetnk hozz. Ennek ellenre, ezt ne hasznljuk elsdleges kulcsknt, mert ha az adatokat jraszervezzk, ez a cm megvltozhat. A ROWID rtkt az adatbzis-kezel rendszer hatrozza meg, ezrt adat berskor nem adhatjuk meg az rtkt s nem is mdosthatjuk. 5.4.5. Hossz adatok Az igen hossz adatok befogadsra klnbz rendszerspecifikus lehetsgek vannak. Az egyik a LONG adattpus deklarlsa (pl. ORACLE). Ez maximlisan 2 Gbjt hosszsg karaktersorozatok befogadsra szolgl. A trolt hossz vltoz, a tnyleges adattartalomtl fgg. Aktulis rtkt a LENGTH fggvnnyel (ld. 5.5.2.1. pont) krdezhetjk le. A hossz adattpusok hasznlata hasonl a karakter adattpushoz, de bizonyos korltozsok vannak. Ezek kzl a legfontosabbak: Egy tblzat csak egy LONG oszlopot tartalmazhat. LONG oszlopra nem pthet index. Csak NULL vagy NOT NULL tpus integritsi felttel adhat meg r. LONG oszlop nem szerepelhet WHERE, GROUP BY, ORDER BY klauzulban, SQL fggvnyben, kifejezsben, felttelben. Sok rendszerben lehetsg van sok adatot tartalmaz objektumoknak, pldul MSWord dokumentumoknak, kpeknek a tblzathoz val csatolsra. Ezt pldul az IBM UDB/DB2 nagy objektumok (LOB) trolsra szolgl segdtblzatok definilsval oldja meg. ACCESS-ben trtn realizlst a 6.1.2.1. pontban ismertetjk.

5-22

5.5. A legfontosabb SQL fggvnyek Igen knyelmess teszik az SQL hasznlatt a rendszerbe beptett SQL fggvnyek. Az SQL fggvnyek ltalnos formja:

A fggvny mindig egy eredmnyt szolgltat, melynek rtke fgg a fggvny fajtjtl s az argumentum(ok) aktulis rtktl. Ha egy fggvnyben argumentum rtke a NULL rtk, akkor nhny kivteltl eltekintve (pl. CONCAT, NVL) az eredmnye is a NULL rtk lesz. A fggvnyek argumentuma(i) lehetnek: oszlop rtkek, llandk (literlok), SQL fggvnyek, SQL kifejezsek. Az SQL fggvnyeket a SELECT utasts kivlasztsi listjban, vagy a WHERE vagy HAVING klauzuljban, az INSERT utasts VALUE, a DELETE utasts WHERE s az UPDATE utasts SET s WHERE klauzuljban hasznljuk (ld. 5.6. pont). Ha a fggvny a SELECT utasts kivlasztsi listjban szerepel, akkor clszer lehet a fejlcben az adott oszlopnak nevet adni az AS fejlc_nv kiegsztssel. Attl fggen, hogy a fggvny az adatok egy csoportjra jellemz eredmnyt ad, vagy egy adott oszlop (illetve ami ezzel egyenrtk, egy argumentum) aktulis rtkbl lltja el a fggvnyrtket beszlnk csoport fggvnyekrl, oszlop vagy ms nven skalr fggvnyekrl. 5.5.1. Csoport fggvnyek A csoport fggvnyek aggregtum kpzsre szolglnak. Nem az egyes sorokra, hanem a kivlasztott sorok sszessgre, vagy azok meghatrozott csoportjaira szolgltatnak egy, az sszes sorra, vagy a csoportok minden sorra jellemz rtket. Az SQL nyelvben leggyakrabban hasznlt csoport fggvnyeket az 5.11. tblzat tartalmazza. 5.11. tblzat: Legfontosabb csoport fggvnyek Fggvny AVG (numerikus argumentum) COUNT(*) vagy COUNT(argumentum) MAX(argumentum) MIN (argumentum) SUM (numerikus argumentum) Funkci A kivlasztott sorokbl az argumentum rtkek tlaga. A kivlasztott sorok szma. COUNT(argumentum) csak azon sorok szma, melyekben az argumentum rtke nem NULL rtk. A kivlasztott sorokbl az argumentum legnagyobb rtknek meghatrozsa. A kivlasztott sorokbl az argumentum legkisebb rtknek meghatrozsa. A kivlasztott sorokban az argumentum sszegnek kiszmtsa.

5-23

Megjegyzsek: Az tlag s az sszegfggvny argumentuma csak numerikusan definilt oszlop, numerikus lland, numerikus kifejezs vagy numerikus eredmnyt szolgltat SQL fggvny lehet. A maximum s a minimum meghatrozsnl az SQL rendszer rendezsi sorrendje (ltalban ASCII vagy EBCDIC) rvnyes. Az argumentumra NULL rtkeket tartalmaz sorokat a COUNT(*) kivtelvel egyik fggvny sem veszi figyelembe. Ezrt vigyznunk kell, mert ha az argumentum NULL rtk is lehet, akkor AVG(argumentum) s SUM(argumentum)/COUNT(*) eltrhetnek egymstl. A NULL rtket tartalmaz sorokat az NVL fggvny segtsgvel vehetjk szmtsba. Az AVG, SUM s a COUNT fggvnyekben az argumentum eltt megadhatjuk a DISTINCT kulcsszt is. Ekkor az aggregtum kpzsben az SQL csak a klnbz argumentum rtkeket veszi figyelembe. Ilyenkor a COUNT fggvnyben is az oszlop nevt kell megadnunk. (ld. 2. plda). Ha a kivlasztott csoportban a WHERE vagy HAVING felttelnek egy rekord sem tesz eleget, akkor a fggvny rtke a NULL rtk lesz, kivve a COUNT fggvnyt, amely a 0 numerikus rtket veszi fel.

Pldk: 1. Szmoljuk ki minden tantrgyra (TID) a tantrgy osztlyzatainak tlagt, s a tantrgybl elrt legnagyobb pontszmot. Utasts: select tid,avg(osztalyzat) as atlag_osztalyzat,max(gyakpont) as max_gyakpont from mithallgat group by tid; Eredmny: Azok osztlyzata, akik mg nem vizsgztak (NULL rtk) nem szmtdik be az tlagba. 2. Adjuk meg az sszes levizsgzott hallgat szmt. Ha valaki tbb trgybl vizsgzott, akkor is csak egyszer vegyk figyelembe. Utasts: select count(distinct hid) as vizsgazok_szama from mithallgat where osztalyzat is not hull; Magyarzat: Mivel nem egyes csoportokra, hanem az egsz tblzatra kell a rekordok szmt meghatroznunk, a GROUP BY klauzult nem adjuk meg. A DISTINCT megadsval biztostjuk, hogy ha egy hallgatnak tbb vizsgja is van , akkor is csak egyszer szerepeljen az eredmnyben. 5.5.2. Oszlop fggvnyek Az oszlop fggvnyek elnevezse s formja korntsem olyan csoport fggvnyek. gy pldul az aktulis dtumot s idt szolgltat ORACLE-ben SYSDATE, az ACCESS-ben DATE() illetve TIME(), mg CURRENT DATE, CURRENT TIME, CURRENT TIMESTAMP. Ezrt egysges, mint a fggvny neve az az UDB/DB2-ben a tovbbiakban a

5-24

fggvnyeknek ltalban csupn a funkciira utalunk. Csak azoknak a fggvnyeknek adjuk meg a leggyakoribb formjt, melyek (szinte) minden rendszerben azonosak. Az oszlop fggvnyek az argumentum(ok) rtkt alaktjk t ms formba. A fggvnytl fgg, hogy az argumentum milyen adattpus lehet, s hogy az eredmny milyen adattpus lesz. Amennyiben az argumentumon nem megengedett mveletet akarunk vgrehajtani, az utasts mr az rtelmezskor vagy a vgrehajtskor hibajelzssel lell. Az argumentum tpustl fggen vannak karakter fggvnyek, numerikus fggvnyek, dtum/idpont fggvnyek, konvertl fggvnyek, specilis fggvnyek. 5.5.2.1. Karakter fggvnyek Az SQL karakter fggvnyeknek karakter rtket szolgltat argumentuma(i) van(nak), melyeket kiegszthet(nek) a funkcit rszletez numerikus argumentum(ok). A fggvnyek eredmnyknt egy karakter tpus rtket adnak vissza. (Kivtel a LENGTH fggvny, amelyik egy numerikus rtket szolgltat). Az 5.12. tblzat az SQL nyelvben leggyakrabban hasznlt karakter fggvnyeket s f formjukat tartalmazza. 5.12. tblzat: SQL karakter fggvnyek Fggvny CONCAT(char-1,char-2) INITCAP(char) LENGTH(char) LOWER(char) | UPPER(char) LTRIM(char) | RTRIM(char) REPLACE(char,c1,c2) | TRANSLATE (char,c1,c2) SUBSTR(char,n,m) Funkci Konkatenlja a kt argumentumot (ld. 1. plda). talakts nagy kezdbetkre. Visszaadja az argumentum aktulis hosszt. Az argumentumban minden alfanumerikus karaktert kisilletve nagybetsre alakt t (ld. 2. plda). Levgja a kezd ill. a befejez szkzket. A char argumentumban minden c1 karaktert kicserl c2re. Visszaadja az argumentumnak az n-edik bjttl kezdd m bjt hosszsg rszt. Ha m-et nem adjuk meg, akkor az n-edik bjttl az argumentum vgig lv karaktereket adja vissza.

5.5.2.2. Numerikus fggvnyek Az SQL numerikus fggvnyeknek numerikus rtket szolgltat argumentuma(i) van(nak), s eredmnyknt egy numerikus rtket adnak vissza. Amennyiben az operandus nem numerikus tpus s erre lehetsg van, akkor azt az SQL rtelmez tkonvertlja numerikus formba. A leggyakrabban hasznlt numerikus fggvnyek: ABS - Abszolt rtk kiszmolsa. FLOOR - A legnagyobb, de az argumentumnl mg nem nagyobb egsz meghatrozsa. MOD - Egsz oszts maradknak kiszmolsa. POWER Hatvnyozs. 5-25

ROUND Kerekts. SIGN - Eljel meghatrozsa. SQRT - Ngyzetgykvons. TRUNC Levgs. A fentieken kvl hasznlhatjuk a szoksos jellsi mddal a szgfggvnyeket (argument radinban), a hiperbolikus szgfggvnyeket, a logaritmus s az exponencilis fggvnyt is. (A felsorols nem teljes.) A numerikus fggvnyek kzl fontossga miatt bemutatjuk a ROUND fggvny hasznlatt. Szintaktikja:

A ROUND SQL fggvny a numerikus eredmnyt ad n argumentumot m tizedes jegyre kerektve adja vissza. Megjegyzsek: Az n argumentum lehet NUMBER adattpus oszlop, numerikus lland (literl), numerikus SQL fggvny, vagy numerikus kifejezs. n rtke tetszleges szm, m rtke viszont csak egsz szm lehet. Ha m = 0 , vagy elhagyjuk, akkor n-t egszre kerekti. Ha m < 0 , akkor 10-nek a (-m)-ik hatvnyra kerekt. Az 5 rtket flfel kerekti. 5.5.2.3. Dtum/idpont fggvnyek Az SQL dtum/idpont fggvnyek dtum/idpont tpus rtk(ek)bl lltanak el meghatrozott algoritmus alapjn ltalban egy dtum/idpont vagy ms tpus rtket. Formjuk ersen rendszerfgg, de szinte mindegyik rendszerben megtallhat a YEAR(dtum), MONTH(dtum), DAY(dtum) fggvny, ami a dtum tpus vltozbl visszaadja annak az v, hnap, nap rszt. (ld. 4. plda). Ezekkel a kifejezsekkel argumentum nlkl szmolhatunk is. Pldul a DATUM + 2 MONTH kifejezs a DTUM 2 hnappal megnvelt rtkt adja. (DATUM=2006-12-31 esetn 2007-02-28-at). 5.5.2.4. Konvertl fggvnyek Az SQL konvertl fggvnyek egy adott adattpus rtkbl lltanak el egy msik adattpusnak megfelel rtket. Az ORACLE-ben ezek a TO_DATE, TO_NUMBER, TO_CHAR fggvnyek, amelyek dtum vagy. numerikus tpus adatot konvertlnak t karakterre, illetve karakter tpus adatot konvertlnak t dtumra illetve szmra. A DB2/UDB-ben ezt a feladatot a DATE illetve a DIGITS fggvny vgzi el. A klnbz adattpusok tartalmt ltalban csak gy tudjuk sszehasonltani, hogy azonos tpusra konvertljuk ket. Ugyanakkor azonos tpus, de klnbz formtum adatokat (pl. fix s vltoz hosszsg karakterek vagy decimlis, lebeg pontos s egsz szmok) korltozs nlkl is sszehasonlthatunk.

5-26

5.5.2.5. Egyb fggvnyek Az SQL nyelvben leggyakrabban hasznlt egyb fggvnyek: NVL (argumentum-1,argumentum-2): ha argumentum-1 aktulis rtke NULL rtk, akkor a fggvny az argumentum-2 rtket szolgltatja (ld. 3. plda). (UDB/DB2-ben a fggvny neve VALUE, ACCESS-ben nem fggvnyknt, hanem formtumknt lehet belltani, ld. 6.1.2.1. pont) USER: rtke az aktulis felhasznl azonostja lesz. A leggyakoribb numerikus, dtum, konvertl s egyb fggvnyeknek az Oracle-ben illetve az IBM UDB/DB2-ben hasznlt elnevezst az 5.13. tblzatban foglaltuk ssze. Az SQL fggvnyeknek az ACCESS-ben hasznlhat formjt a 6.1.2.3. pontban ismertetjk rszletesen. 5.13. tblzat: A leggyakoribb numerikus, dtum, konvertl s egyb fggvnyek, s az Oracle-ben, illetve az IBM UDB/DB2-ben hasznlt elnevezsk. Funkci Dtum s numerikus fggvnyek ABS Abszolt rtk kiszmolsa. FLOOR A legnagyobb, de az argumentumnl mg nem nagyobb egsz. MOD Egszoszts maradka. POWER Hatvnyozs. SIGN Eljel meghatrozsa. SQRT Ngyzetgykvons. ADD_MONTHS Hnap hozzadsa. LAST_DAY Hnap utols napjnak megadsa. ROUND Dtum vagy szm kerektse. SYSDATE vagy CURRENT DATE, A pillanatnyi dtum s pontos id CURRENT TIMESTAMP meghatrozsa. TRUNC Dtum vagy szm lervidtse. YEAR, MONTH, DAY Dtum megfelel rsznek a kivgsa. Konvertl fggvnyek TO_CHAR vagy VARCHAR Dtum vagy numerikus adattpus tkonvertlsa karakterre. TO_DATE vagy DATE Karakter adattpus konvertlsa dtumra. TO_NUMBER vagy DECIMAL Karakter adattpus konvertlsa numerikusra. Egyb fggvnyek: NVL vagy VALUE, COALESCE NULL rtk talaktsa. USER Aktulis felhasznl meghatrozsa. Pldk: 1. IR_SZAM, VAROS s LAKCIM vltoz hosszsg karakter tpus vltozk aktulis rtkei: 1098, Budapest, Fvm tr 8. A hrom oszlopbl egy oszlopot akarunk sszelltani TELJES_CIM nven. Fggvny nv

5-27

Utasts: select concat(concat(concat(concat(ir_szam,' '),varos),' '),lakcim) as TELJES_CIM from ... Eredmny: TELJES_CIM ----------------------------1098 Budapest Fvm tr 8 Megjegyzs: Az egyes mezk rtkeit szkzzel akarjuk elvlasztani. Ezrt kzjk egy szkzt is konkatenlni kell. 2. A tantrgynevet tartalmaz TMEGNEV oszlop aktulis rtke: Oracle-1, de nem tudjuk, hogy ez gy, ORACLE-1 vagy oracle-1 formban van trolva. Egyrtelmv tehetjk az sszehasonltst az UPPER (vagy a LOWER) fggvnnyel. Utasts: select tid,upper(tmegnev) as tantargy_nev,oktato from tantargy where upper(tmegnev) = 'ORACLE-1' Eredmny: A WHERE felttel fggetlenl attl, hogy melyik formban troltuk a tantrgy megnevezst IGAZ lesz. Ha nem hasznlnnk az UPPER fggvnyt, akkor csak abban az esetben lenne igaz, ha az adatbzisban is pontosan gy, csupa nagybetvel troltuk volna. 3. Ha az OKTATO mg nem ismert, akkor a lekrdezsben a helyn a MG NINCS KIJELLVE szveget akarjuk az eredmnyben megjelenteni. Utasts: select tid,tmegnev,nvl(oktato,'MG NINCS KIJELLVE') from tantargy; Eredmny: Az sszes olyan sorban, ahol OKTATO NULL rtk, a megadott szveg fog megjelenni, a tbbiben OKTATO aktulis rtke lesz. 4. Listt ksztnk az 1988-ban szletett hallgatkrl. Utasts: select vnev, knev from hallgato where year(szdatum) = 1988 order by vnev, knev; Eredmny: Kivlasztja az 1988-ban szletettek nevt s ABC sorrendben kirja. 5. OSZLOP_1 aktulis rtke 1234.56789. Utasts: select round(oszlop_1,3) as oszlop_1 , round(oszlop_1, -2) as oszlop_1_szazasok from ... Eredmny: OSZLOP_1 rtke 1234.568, OSZLOP_1_SZAZASOK- pedig 1200 lesz. 5-28

5.6. SQL utastsok 5.6.1. SQL utastsok sszefoglalsa A relcis adatbzisokban minden mveletet SQL utastsok segtsgvel vgznk el. Ebben meghatrozzuk az elvgzend feladatot. Hogy ez miknt hajtdik vgre, azt ltalban az SQL optimalizl hatrozza meg. Az SQL utastsokat kiadhatjuk interaktvan vagy magas szint nyelven (ltalban COBOL, C++, Java) megrt programbl az alkalmazsi programba beptett utastsknt. A legtbb SQL utasts interaktv s bepthet formja megegyezik. Az interaktv mdban megadand illetve eredmnyknt megjelen adatoknak a programban megadott specilis vltozk, gynevezett host vltozk felelnek meg. Az SQL utastsok formailag SQL fenntartott szavakbl, az utasts ltal rintett objektumokbl illetve rszeikbl, valamint elvlaszt, hatrol jelekbl llnak. Az utasts els szava vagy els szavai meghatrozzk, milyen utasts kerl vgrehajtsra (Pl. CREATE TABLE vagy UPDATE). Az utasts vgt ltalban a pontosvessz (;) jelzi. Az utastsokat szigor szintaktikai szablyok szerint kell megadnunk. Ezrt minden egyes utastshoz mellkeljk a hasznlathoz szksges szintaktikai szablyok brjt is. A szintaxis diagrammok rtelmezst az 5.2. pontban trgyaltuk. Amennyiben egy utasts nem felel meg a szintaktikai szablyoknak (pl. hibsan rt kulcssz, ktelezen megadand elem hinya, hibs elvlaszt jel), akkor az utasts nem kerl vgrehajtsra s hibajelzst kapunk. A vgrehajtott utasts eredmnyrl az adatbzis-kezel rendszer visszajelzst ad, melyben jelzi, mi trtnt. Interaktv zemmdban ez valamilyen zenet (pl. Table created, No rows updated, vagy A tbla ltrejtt, Egy sor sem mdosult). Programban ez egy kommunikcis terlet (SQLCA = SQL Communication Area) feltltse az utastsok ltal kivltott esemnyek pontos lersval. Ezek kzl legfontosabbak az SQLCODE illetve az SQLSTATE vltozk, amelyek rtke 0, ha az utasts hibtlanul hajtdott vgre. Ettl eltr rtk az utasts hibjra, vagy a normlistl valamilyen mdon eltr eredmnyre utal (pldul a mdostand rekord nem ltezik). ltalban minden olyan objektummal dolgozhatunk, amelyiknek mi vagyunk a tulajdonosa. Ezeken minden SQL utastst vgrehajthatunk. Ms objektumaival csak akkor dolgozhatunk s csak olyan mveleteket vgezhetnk el, amelyekre az objektum tulajdonostl engedlyt kaptunk (GRANT), vagy specilis rendszer privilgiumunk (pl. adatbzis-felgyel) van Az SQL utastsokat a kvetkez csoportokba oszthatjuk: adatler (Data Definition Language, DDL) utastsok, adatkezel (Data Management Language, DML) utastsok, tranzakci vezrl utastsok, interaktv SQL lst vezrl utastsok, rendszervezrl utastsok, programba begyazott specilis utastsok. Mivel az SQL utastsok alapvet funkcii s formi minden adatbzis-kezel rendszerben azonosak, ezrt a kvetkezkben ismertetend utastsok lerst olyan formban adjuk meg, hogy azt az olvas a gyakorlati munkjhoz referencia knyvknt is hasznlhassa. Termszetesen az utastsok specilis lehetsgeit az adott rendszer dokumentcijban tallhatja meg.

5-29

5.6.2. Adatler utastsok Az adatler (Data Definition Language, DDL) utastsok legfontosabb feladatai: Objektumok ltrehozsa (CREATE utastsok), mdostsa (ALTER utastsok), megszntetse (DROP utastsok). Jogosultsgok megadsa, visszavonsa (GRANT, REVOKE). Az adatbzis optimlis mkdshez szksges statisztikk sszegyjtse. A CREATE, ALTER s DROP tpus utastsok a vgrehajtsuk ideje alatt kizrlagos mdon lezrjk a szban forg objektumot. gy ahhoz addig, amg a mvelet vget nem r, ms semmilyen mdon nem frhet hozz. A tbbi mveletet egymssal s ms mveletekkel prhuzamosan is vgezhetjk ugyanazon az objektumon a prhuzamos feldolgozs ltalnos szablyai szerint (ld. 8. fejezet). A legfontosabb adatler utastsokat s funkcijukat az 5.14. tblzatban foglaltuk ssze. Ezek kzl a leggyakrabban hasznlatos utastsokat az albbiakban ismertetjk. Lteznek ezeken kvl olyan adatler utastsok, amelyek egy felhasznl objektumait tartalmaz logikai/fizikai egysgeket (DATABASE/SCHEMA) illetve az egyes objektumok fizikai trolsi mdjt (TABLESPACE) kezelik. Ezekkel elssorban az adatbzisfelgyel dolgozik. Hasznlata ersen rendszerfgg, ismertetsk meghaladja ennek a knyvnek a kereteit. 5.14. tblzat: Legfontosabb adatler utastsok s funkcijuk. Utasts ALTER SEQUENCE ALTER TABLE ALTER TRIGGER CREATE INDEX CREATE SEQUENCE CREATE SYNONYM CREATE TABLE CREATE TRIGGER CREATE VIEW DROP INDEX DROP SEQUENCE DROP SYNONYM DROP TABLE DROP TRIGGER DROP VIEW GRANT REVOKE Funkci Szekvencia (szmgenertor) paramtereinek megvltoztatsa. Tblzat felptsnek mdostsa. Trigger aktivlsa, felfggesztse. Index ltrehozsa. Szekvencia (szmgenertor) ltrehozsa. Szinonima ltrehozsa. Tblzat ltrehozsa. Trigger ltrehozsa. Nzet ltrehozsa. Index megszntetse. Szekvencia (szmgenertor) megszntetse. Szinonima megszntetse. Tblzat megszntetse. Trigger megszntetse. Nzet megszntetse. Jogosultsgok adsa objektumokra. Jogosultsgok visszavonsa.

5.6.2.1. Objektumok ltrehozsa (CREATE ) Az objektumokat ltrehoz SQL utastsokbl a tblzatokat, nzeteket s az indexeket ltrehoz utastsokat trgyaljuk rszletesebben. CREATE TABLE Funkcija: Tblzat ltrehozsa.

5-30

Magyarzat: A tblzatok tartalmazzk fizikailag a felhasznlk adatait. A logikailag sszetartoz adatokat (egy egyedtpus elfordulsait) egy tblzatban troljuk. A tblzat sorai ezen logikailag sszetartoz egyedtpus egyes elfordulsai, elemei, oszlopai pedig ezen elemek klnbz tulajdonsgai. A tblzat ltrehozsakor definiljuk az albbiakat (a felsorols nem teljes): A tblzat nevt. Ez a tblzat tulajdonosnak a nevbl s a definilskor adott tblzat nvbl tevdik ssze. A kettt pont (.) vlasztja szt. Osztott adatbzisoknl ez mg kiegszl az adatbzis helynek nevvel is. A tblzat oszlopainak definciit. A tblzatot tartalmaz fizikai adathordozt, a tablespace-t. Ezt gyakran nem adjuk meg. Ekkor az alaprtelmezett terletre kerl a tblzat. A tblzatra rvnyes ltalnos integritsi feltteleket (elsdleges kulcs, idegen kulcsok). Az egyes oszlopok adataira fennll korltozsokat. (CHECK felttelek). Adattrolsi jellemzket (srsds, teltettsg). ltalban ezekre is meghagyjuk az alaprtelmezst. A CREATE TABLE egyszerstett szintaxisa:

ahol oszlop felttel:

5-31

tblzat felttel:

Jogosultsg: Sajt tblzatot akkor hozhatunk ltre, ha van CREATE TABLE jogosultsgunk. Ez a jogosultsgunk ltalban megvan. Ezen kvl felhasznlhat trolsi hellyel kell rendelkeznnk abban a tablespaceben, amelyikben a tblzatot ltre kvnjuk hozni. Kulcsszavak s paramterek: Kulcssz vagy paramter CREATE TABLE tulajdonos tblzat oszlop adattpus Jelentse Ktelez kulcsszavak. Megadjk, milyen utasts kerl vgrehajtsra. A tblzat tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajtunk. A ltrehozott tblzat neve. A tblzat oszlopainak neve (s sorrendje). Az n-ediknek felsorolt oszlop lesz a tblzat n-edik oszlopa. Ktelez megadni Megszabja milyen tpus adatokat tartalmaz az oszlop. A legfontosabb adattpusok (ld. 5.4. alfejezet): CHAR (fix hosszsg karakter) VARCHAR vagyVARCHAR2 (vltoz hosszsg karakter) NUMBER vagy DECIMAL(numerikus) DATE, TIME vagy TIMESTAMP (dtum/idpont) LONG (hossz karakter) Az adattpust ktelez megadni az oszlop definilsnl. Nem ktelez kulcssz. Jelzi, hogy az oszlopnak van alaprtelmezett rtke. Ha berskor nem adunk explicit rtket ennek az oszlopnak, akkor annak tartalma az alaprtelmezett rtk lesz. Ez lesz az alaprtelmezett rtk. Tpusa meg kell feleljen az oszlop adattpusnak s be kell frjen az oszlop ltal meghatrozott adatterletre. Nem ktelez kulcssz. Jelzi, hogy az oszlopra vagy a tblzatra felttel-t definiltunk. Csak olyan rtk, vihet be a tblzatba, amelyik a korltozsban meghatrozott felttelnek megfelel.

DEFAULT

kifejezs CONSTRAINT

5-32

Kulcssz vagy paramter felttelnv

NULL NOT NULL PRIMARY KEY oszlop-2 FOREIGN KEY , REFERENCES oszlop-3 tulajdonos-1 tblzat-1 oszlop-1 ON DELETE CASCADE

ON DELETE SET NULL

Jelentse A megadott felttel elnevezse. A rendszer automatikusan kiegszti a tblzat tulajdonosnak a nevvel. Ez jelenik meg a hibazenetekben, ha a felttelnek nem megfelel adatot akarunk bevinni az oszlopba, s ezt a nevet kell megadnunk, ha a felttelt mdostani vagy trlni akarjuk az ALTER TABLE utastssal. Ha nem adjuk meg, akkor a rendszer automatikusan hozzrendel egy nevet, ami egyrtelmen azonostja a felttelt az adatbzisban. Nem ktelez kulcssz. Jelzi, hogy az oszlop tartalmazhat NULL rtket. Nem ktelez kulcssz sszettel. Jelzi, hogy az oszlop nem tartalmazhat NULL rtket. Nem ktelez kulcssz sszettel. Jelzi, hogy az oszlop (kombinci) elsleges kulcs lesz. Csak tblzat felttelnl adhat meg. Erre az oszlop(ok)ra pl az egyedi index illetve az elsdleges kulcs. Nem ktelez kulcssz kombincik. Jelzik, hogy a tblzatban idegen kulcs-ot definilunk. A FOREIGN KEY-t csak tblzat felttelnl adhatjuk meg, ott viszont ha ltezik ez a felttel ktelez. Csak tblzat felttelnl adhat meg. Ez az oszlop (kombinci) lesz az idegen kulcs. Az idegen kulccsal hivatkozott tblzat tulajdonosa. Ha nem adjuk meg, akkor a sajt tblzatunk. Erre a tblzatra hivatkozunk az idegen kulccsal. tblzat-1-nek erre az oszlopra/oszlopaira hivatkozunk az idegen kulccsal. Ez ott elsdleges kulcs, vagy egyedi index kell legyen rajta. Nem ktelez kulcssz kombinci. Definilja, hogy ha az idegen kulccsal hivatkozott rekordot trlik a hivatkozott tblzatbl, akkor az sszes r hivatkoz rekord is trldik a hivatkoz tblzatbl. Ha nem adjuk meg sem ezt, sem az ON DELETE SET NULL klauzult, akkor a hivatkozott tblzatbl olyan rekordot, amelyikre hivatkozs van, nem lehet trlni. Nem ktelez kulcssz kombinci. Definilja, hogy ha az idegen kulccsal hivatkozott rekordot trlik a hivatkozott tblzatbl, akkor az sszes r hivatkoz rekordban az idegen kulcs rtke a NULL rtk lesz. Ha nem adjuk meg sem ezt, sem az ON DELETE CASCADE klauzult, akkor a hivatkozott tblzatbl olyan rekordot, amelyikre hivatkozs van nem lehet trlni.

5-33

Kulcssz vagy paramter CHECK felttel

Jelentse Nem ktelez kulcssz. Jelzi, hogy az oszlopba illetve a tblzatba berhat adatokra ellenrzsi felttelt adtunk meg. A berand adatoknak eleget kell tennik ennek a felttelnek. Amennyiben ez nem teljesl, akkor a rekordot nem tudjuk berni.

Megjegyzsek: A tblzat neve nem lehet azonos a tulajdonosa egy msik tblzatnak, nzetnek, szekvencijnak, szinonimjnak nevvel sem. Az oszlopok nevnek egy tblzaton bell egyrtelmnek kell lennik. Klnbz tblzatoknak azokat az oszlopait, amik ugyanazokat az adatokat tartalmazzk clszer azonos nvvel definilni. A tblzat-feltteleket az oszlop defincik utn kell megadnunk. A felttel-nevek a smn bell egyrtelmek kell legyenek. Clszer a neveket beszdess tennnk, mert gy az zeneteket knnyebben rtelmezhetjk. Miutn a CREATE TABLE utastssal ltrehoztunk egy res tblzatot, azt az INSERT utastssal tlthetjk fel adatokkal, a DELETE utastssal trlhetnk, a SELECT utastssal vlaszthatunk ki belle s az UPDATE utastssal mdosthatunk benne adatokat. Meglev tblzatot a DROP TABLE utastssal szntethetnk meg s az ALTER TABLE utastssal mdosthatjuk a felptst. Elsdleges kulcs, vagy annak sszetevje nem tartalmazhat NULL rtket s nem lehet LONG tpus oszlop. Ahhoz, hogy egy tblzatra idegen kulccsal hivatkozhassunk, a tblzatnak mr lteznie kell, a hivatkozott oszlopokon elsdleges kulcs vagy egyedi index kell legyen s REFERENCES jogosultsgunk kell legyen r. sszetett (tbb oszlopbl ll) elsdleges s idegen kulcsot csak tblzat felttelknt definilhatunk (ld. 3. plda). Ha nem adunk meg tablespace-t, akkor a tblzat az alaprtelmezett tablespaceben jn ltre. Ha sem NULL, sem NOT NULL felttelt nem adunk meg, akkor az oszlop tartalmazhat NULL rtket.

Pldk: 1.

Ltrehozzuk a hallgatk adatait tartalmaz HALLGATO tblzatunkat. A HID hallgati azonostt definiljuk elsdleges kulcsnak s megkveteljk, hogy ezen kvl legalbb a vezetknevt (VNEV) megadjk a hallgatnak s ellenrizzk, hogy az vfolyam (EVF) rtke csak 1 s 5 kztt lehet. A keresztnevet (KNEV) s a szletsi dtumot (SZDATUM) nem ktelez megadni, A TULAJ oszlopot, mely a rekord berjnak azonostjt tartalmazza majd ksbb, mdostsknt adjuk hozz a tblzathoz az ALTER TABLE utastssal. (ld. 5.6.2.3. pont 1. plda) Utastsok: create table hallgato(vnev char(20) constraint con_hallg_vnev not null ,knev char(20) ,hid char(5) constraint con_hallg_hid not null constraint pk_hallg_hid primary key 5-34

,szdatum date ,evf number(1) constraint con_hallg_evf check(evf between 1 and 5)); Eredmny: A tblzat a sajt smnkban ltrejn. Msok ha csak nincs specilis adatbzis felgyeli privilgiumuk csak akkor dolgozhatnak vele, ha erre jogosultsgot adunk nekik. Ha a feltteleknek a CONSTRAINTS felttelnv megadsval nem adtunk volna beszdes nevet, akkor a rendszer rendelt volna hozz. Ez a 2. s 3. feladatban ltrehozott tblzatokra is rvnyes. A vezetk s keresztnevet definilhattuk volna vltoz hosszsgura is (ld. 5.6.2.3. pont 1. plda). 2. Ltrehozzuk a tantrgyak adatait tartalmaz TANTARGY tblzatunkat. A TID tantrgy azonostt definiljuk elsdleges kulcsnak s megkveteljk, hogy ezen kvl legalbb a tantrgy megnevezst (TMEGNEV) megadjk. Ellenrizzk, hogy az raszm (ORASZAM) nem negatv s a vizsgaktelezettsg (VIZSGA) rtke csak I vagy N lehet. Definiljuk, hogy ha nem adunk VIZSGA-nak rtket, akkor az automatikusan I legyen. Az raszmot s az oktat nevt (OKTATO) nem ktelez megadni. Utasts: create table tantargy( tid char(4) constraint con_tant_tid not null constraint pk_tant_tid primary key ,tmegnev char(12) constraint con_tant_tmegnev not null ,oktato char(20) ,oraszam number(1) constraint con_tant_oraszam check(oraszam >=0) ,vizsga char(1) default 'I' constraint con_tant_vizsga check (vizsga in('I','N')) ); 3. Ltrehozzuk a hallgatkat s a tantrgyakat sszekapcsol MITHALLGAT tblzatunkat. Az elsdleges kulcs (HID,TID) sszetett, ezrt csak tblzat-felttel-knt tudjuk definilni. A HID s TID idegen kulcsokat oszlop-felttel-knt definiljuk. A gyakorlatokon szerzett pontok szmnak (GYAKPONT) alaprtelmezse 0, Ellenrizzk az osztlyzatot, 1<= OSZTALYZAT <=5. Utasts: create table mithallgat( hid char(5) constraint con_mithlg_hid not null constraint fk_mithlg_hallg references hallgato(hid) ,tid char(4) constraint con_mithlg_tid not null constraint fk_mithlg_tant references tantargy(tid) ,gyakpont number(3) default 0 ,osztalyzat number(1) constraint con_mithlg_osztalyzat check(osztalyzat between 1 and 5) ,constraint pk_mithlg_hid_tid primary key(hid,tid) );

5-35

CREATE VIEW Funkcija: Nzet ltrehozsa. Magyarzat: A nzetben fizikailag nincsenek adatok. Csak logikailag tartalmazza a bzistblzat(ok) azon adatait, amelyeket a nzet definilsakor jelltnk ki. A nzetet definil szubszelekt sorai adjk a nzet sorait, oszlopai a nzet oszlopait. A nzet logikai s a bzis tblzat(ok) fizikai adatai mindig megegyeznek. Ezrt, ha egy tblzat adatait mdostjuk, ez automatikusan az sszes rpl nzet adatait is mdostja. Hasonlkppen, ha egy nzetben mdostjuk a logikai adatokat, ez egyben a megfelel bzis tblzatok adatainak fizikai mdostst is jelenti. Nzeteket a kvetkez clokbl hozunk ltre: Adatbiztonsg rdekben. A teljes tblzat helyett annak csak a nzet ltal meghatrozott soraihoz s oszlopaihoz engedlyezzk a hozzfrst. Utastsok egyszerbb ttele rdekben. Egy vagy tbb tblzatbl bonyolult mdon kivlasztott adatokat nzetknt definilhatunk. A tovbbiakban a hosszas kivlaszts jra lersa helyett a nzetnvvel hivatkozhatunk ugyanazokra az adatokra. Tblzatok oszlopainak ms nven val megjelentsre, az eredeti adatok mellett vagy helyett azokbl szrmaztatott j adatok lland megjelentsre. A CREATE VIEW egyszerstett szintaxisa:

Jogosultsg: Nzetet ltalban akkor hozhatunk ltre, ha rendelkeznk a SELECT, INSERT, DELETE vagy UPDATE privilgiumok valamelyikvel az sszes olyan tblzatra, amelyikre a nzet hivatkozik. Kulcsszavak s paramterek: Kulcssz vagy paramter CREATE, VIEW, AS OR REPLACE Jelentse Ktelez kulcsszavak. Megadjk, milyen utasts kerl vgrehajtsra. Elhagyhat kulcsszavak. Ha megadjuk s ltezik mr azonos nev nzet, akkor az trldik. Ha nem adjuk meg s mr ltezik azonos nev nzet, akkor az utasts nem hajtdik vgre.

5-36

Kulcssz vagy paramter FORCE

NO FORCE tulajdonos nzet oszlop

szubszelekt WITH READ ONLY WITH CHECK OPTION

CONSTRAINT felttelnv

Jelentse Akkor is ltrehozza a nzetet, ha van olyan bzis tblzata, amelyik nem ltezik, vagy hasznlatra nincs jogosultsgunk. A nzet ltrehozsakor figyelmeztetst kapunk. A nzetet ilyenkor nem tudjuk hasznlni. A nzet csak akkor jn ltre, ha az sszes bzis tblzat ltezik s a hasznlatukra meg van a jogosultsgunk. Ez az alaprtelmezs. A nzet tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajtunk. A ltrehozott nzet neve. a nzet oszlopainak neve (s sorrendje). Az n-edik oszlop tartalmazza a szubszelekt kivlasztsi listja nedik elemnek adatait. Ha nem adjuk meg, akkor a nzet oszlopai megegyeznek a szubszelekt oszlopaival. Meghatrozza, hogy a bzis tblzat(ok)bl hogyan vlasztjuk ki a nzet oszlopait s sorait Nem ktelez kulcsszavak. Jelzik, hogy a nzetet csak olvasni lehet. A nzeten keresztl nem lehet sem berni, sem trlni, sem mdostani adatokat. Nem ktelez kulcsszavak. Jelzik, hogy a nzetbe csak olyan rtkeket rhatunk be, illetve csak olyan rtkre mdosthatunk, amelyek megfelelnek a nzet defincijnak. (ld. 5.6.3.4. pont 3. plda) Ha nem gy definiltuk, akkor bevihetnk, illetve mdosthatunk a bzis tblban a nzet feltteleit nem teljest rtkekre is. Ezeket termszetesen nem ltjuk a nzetben. Nem ktelez kulcssz. Jelzi, hogy a nzet sorainak kivlasztsra szolgl felttelnek nevet adtunk. A nzet sorainak kivlasztsra szolgl felttel neve. Ha nem adjuk meg, akkor a rendszer automatikusan hozzrendel egy nevet, ami egyrtelmen azonostja a felttelt az adatbzisban.

Megjegyzsek: Nzetet pthetnk tblzat(ok)ra s/vagy ms nzetekre is. Azokat a tblzatokat, amelyekbl a nzet adatai szrmaznak nevezzk a nzet bzis tblzatainak. A nzet neve nem lehet azonos ugyanannak a tulajdonosnak egy msik nzete, tblzata, szekvencija vagy szinonimja nevvel. Ha a ltrehozand nzettel azonos nev tblzat, szekvencia vagy nzet van mr, akkor hiba jelzst kapunk. Kivtel, ha megadtuk az OR REPLACE opcit, amikor is az azonos nev nzet automatikusan fellrdik az jjal. Nzetet kzvetlenl nem tudunk mdostani. Meglev nzet defincijt gy tudjuk megvltoztatni, hogy a CREATE VIEW utastsban megadjuk az OR REPLACE opcit. Ez trli a korbb defincit s az j lers alapjn hozza ltre a nzetet. A korbban kiadott jogosultsgok tovbbra is rvnyben maradnak. Nzetre, mivel azok fizikailag nem tartalmaznak adatokat, nem pthetnk indexet.

5-37

Nzeteket a tblzatokhoz hasonlan hasznlhatunk az SQL utastsokban. Kivtelek ezek all a csak olvashat nzetek, amelyek nem szerepelhetnek az INSERT, DELETE, UPDATE utastsok egyikben sem. Egy nzet csak olvashat, ha a defincijban megadtuk a WITH READ ONLY kiegsztst, vagy ha a nzet adatait kivlaszt szubszelekt JOIN-t, szmtott rtket vagy GROUP klauzult tartalmaz. Nzeten keresztl csak akkor vihetnk be adatokat, ha a bzis tblzat minden NOT NULL-knt definilt oszlopnak rtket adunk. Az oszlop neveket akkor clszer megadni, ha a nzet oszlopait a bzis tblzat(ok) oszlopaitl eltr mdon akarjuk elnevezni. Meg kell adnunk a nzet oszlopainak neveit, ha a szubszelekt listjban nem csak oszlopnevek, vagy oszlopnvknt hasznlhat AS lista-elem-helyettest nevek szerepelnek. Ha a nzet definciban oszlopnevet adunk, akkor minden oszlopot meg kell neveznnk. A sajt nzeteinkre minden jogosultsgunk meg van. Msok, ha nincsen ltalnos adatbzis-felgyeli jogosultsguk, csak akkor dolgozhatnak velk, ha erre a GRANT utastssal jogosultsgot adunk nekik. A GRANT utastssal kiadott jogosultsgokat a REVOKE utastssal vonhatjuk vissza. (ld. 5.6.2.4. pont)

Pldk: 1. A szemlyisgi jogok vdelme miatt ltrehozzuk a MITHALLGAT1 tblzatot, amelyik a MITHALLGAT adatait tartalmazza a hallgatk azonostsra szolgl HID oszlop nlkl. Ezt a nzetet mr mindenki olvashatja. Utastsok: create view mithallgat1 as select tid,gyakpont,osztalyzat from mithallgat; grant select on mithallgat1 to public; Eredmny: Mindenki megtekintheti minden egyes tantrgy eredmnyeit, de azokat nem tudja a hallgatkhoz hozzkapcsolni. 2. Ltrehozzuk a mintaadatbzisunk minden adatt tartalmaz OKTATAS nzetet. Ebbl kzvetlen lekrdezssel megkaphatunk minden olyan informcit, amit e nlkl a bzistblzatokbl csak JOIN mveletek segtsgvel tudnnk ellltani. (A nzet a join miatt automatikusan csak olvashat, gy nem kell megadnunk a WITH CHECK OPTION-t). Utasts: create or replace view oktatas (hid,vnev,knev,szdatum,evf,tulaj,tid,tmegnev,oktato,oraszam,vizsga, gyakpont,osztalyzat) as select h.hid,h.vnev,h.knev,h.szdatum,h.evf,h.tulaj,t.tid,t.tmegnev,t.oktato, t.oraszam,t.vizsga,m.gyakpont,m.osztalyzat from hallgato h,tantargy t,mithallgat m where h.hid=m.hid and t.tid = m.tid;

5-38

Eredmny: Brmely informcit megkaphatunk az OKTATAS nzetbl. gy pldul azt, hogy Kiss Endre, milyen tantrgyakbl hogyan vizsgzott, a joinokkal sszekapcsolt HALLGATO, TANTARGY s MITHALLGAT tblzatok helyett egyszeren a select vnev,knev,tmegnev,osztalyzat from oktatas where vnev='Kiss' and knev='Endre'; utasts szolgltatja. Az ttekinthetsg rdekben a nzet definilsban az egyes tblzatok neve helyett, ahol lehetett a rvidebb h,t,m minst neveket hasznltuk. Hatkonysgi szempontbl azonban clszerbb azokat az informcikat, amelyek ugyanabbl az egy tblzatbl elrhetek a tblzat kzvetlen lekrdezsvel ellltani. CREATE INDEX Funkcija: Index ltrehozsa. Magyarzat: Indexet hoz ltre a megadott tblzat egy vagy tbb oszlopn. Az indexek segtsgvel meggyorsthatjuk az indexelt oszlopok rtke alapjn egyes rekordok elrst, rekordok szekvencilis feldolgozst. A CREATE INDEX egyszerstett szintaxisa:

Jogosultsg: Indexet akkor hozhatunk ltre egy tblzaton, ha az a sajtunk vagy van r index privilgiumunk. Kulcsszavak s paramterek: Kulcssz vagy paramter CREATE, INDEX, ON UNIQUE BITMAP tulajdonos index Jelentse Ktelez kulcsszavak. Megadjk, milyen utasts kerl vgrehajtsra. A definilt index egyedi. A tblzatban nem lehet kt rekord, amelyikben az index rtke megegyezik. Bit-trkp index jn ltre. Az index tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajtunk. A ltrehozott index neve. 5-39

tulajdonos1 tblzat oszlop ASC DESC Megjegyzsek:

Az indexet tartalmaz tblzat tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt tblzatunk Annak a tblzatnak a neve, amelyikre az indexet felptjk. Erre az oszlop(ok)ra pl az index Az index az oszlop rtkekre nvekv sorrendben szolgltatja a rekordokat. Ez az alaprtelmezs. Az index cskken sorrendben szolgltatja a rekordokat.

Ha nem adtunk meg UNIQUE-ot, akkor az index dupliklt lesz. Egy tblzatra akrhny indexet pthetnk. A gyakorlatban csak azokra az oszlopokra vagy oszlopkombincikra rdemes indexet kszteni, amelyek alapjn gyakran el kell rni rekordokat. A felesleges indexek helyet foglalnak el s lelasstjk az adatok vltoztatst. Dtum/TIMESTAMP tpus rtkekre clszer cskken indexet pteni. gy a legjabb adatokat ltjuk legelszr. Clszer az indexek elnevezsre egysges logikt alkalmazni. Pldul minden indexnv I vagy IND-del kezddik, utna kvetkezik rvidtve a tblzat neve s az oszlop(ok) neve, amely(ek)re pl. Az egyes elemeket alhzs vlasztja el. Eszerint a HALLGATO tblzat VNEV (vezetknv) oszlopra pl index neve pldul clszeren I_HALLG_VNEV vagy. IND_HLG_VNEV. sszetett indexnl az indexoszlopok megadsnak sorrendje lnyeges. A keress mindig az els oszlop rtkeivel kezddik. Ezrt a nvszerinti keressre szolgl indexben az indexoszlopok sorrendje VNEV,KNEV. Ez az index egyben alkalmas a vezetknv alapjn trtn keressre is, arra flsleges mg egy indexet felptennk. Ha viszont nvnapok nneplsre gyakran keressk a megadott keresztnev hallgatkat is, akkor clszer egy kln indexet felpteni a KNEV (keresztnv) oszlopra is (lsd a kvetkez megjegyzst). Ha nem adjuk meg az index teljes rtkt, akkor a keresst az index csak akkor gyorstja meg, ha a keresend rtk pontosan ismert rsze az index legelejn van. gy hiba ptettnk fel a HALLGATO tblzatra egy a vezetk- (VNEV) s keresztnevet (KNEV) egyttesen tartalmaz sszetett indexet ebben az oszlop sorrendben (I_HALLG_VNEV_KNEV), ez semmit nem gyorst sem a WHERE KNEV='Hug' sem a WHERE VNEV LIKE '%agy' tpus felttelek kirtkelsnl.

Plda: 1. Ksztsnk indexet a HALLGATO tblzat nv alapjn val hozzfrsnek a felgyorstsra. Utasts: create index i_hallg_vnev_knev on hallgato(vnev,knev); Eredmny Az index ltrejn. Ha eddig nem volt index a vezetknvre, akkor a hallgatk nv vagy vezetknv alapjn val megtallsa a tblzatbl nagy tblzat esetn nagysgrendekkel gyorsabb lesz.

5-40

5.6.2.2. Objektumok megszntetse (DROP ) Funkcijuk: A DROP tpus utastsokkal meglv objektumokat szntethetnk meg. ltalnos szintaxisuk:

Jogosultsg: Objektumot akkor szntethetnk meg, ha az a sajt objektumunk, vagy ltalnos rendszerjogosultsgunk van az adott tpus objektum megszntetsre (Pl. adatbzisfelgyel). Kulcsszavak s paramterek: Kulcssz vagy paramter DROP tulajdonos INDEX | SEQUENCE | SYNONYM | TABLE |TRIGGER | VIEW objektum nv kiegszts Megjegyzsek: A kiegsztsek kzl a legfontosabb a CASCADE CONSTRAINT. Ha megadjuk, akkor megsznteti a tblzat-ra hivatkoz idegen kulcsokat. Ha ezt nem adjuk meg, akkor olyan tblzatot, amelyikre idegen kulccsal hivatkozunk, nem tudunk megszntetni. Mind a DROP TABLE tblzat vagy nzet, mind a DELETE FROM tblzat vagy nzet utasts trli a tblzat vagy nzet sszes sort. A kett kztt az a klnbsg, hogy DELETE esetn az res tblzat illetve nzet megmarad, gy abba jra vihetnk be adatokat. A DROP TABLE illetve a DROP VIEW utasts viszont nemcsak az adatokat, hanem a teljes tblzatot/nzetet is trli. gy abba csak akkor vihetnk be jra adatokat, ha ismt ltrehozzuk. Ha sok adatot tartalmaz tblzatot akarunk ress tenni, akkor a DROP TABLE sokkal gyorsabb. Jelentse Ktelez kulcssz. Megadja, hogy egy objektumot megszntet utasts kerl vgrehajtsra. Az objektum tulajdonosnak a neve. Ha nem adjuk meg, akkor az a sajt objektumunk. Ktelez kulcsszavak, melyekbl egyet s csak egyet kell megadni. Meghatrozza a megszntetend objektum tpust. A trlend objektum neve. Kiegszti a trlsi utastst.

5-41

Plda: 1.

A DROP TABLE utasts automatikusan megsznteti a tblzatra pl indexeket s triggereket is.

Meg akarjuk szntetni a HALLGATO tblzatot. Mivel a MITHALLGAT tblzat hivatkozik r, ezt csak gy tehetjk meg, hogy megadjuk a CASCADE CONSTRAINTS klauzult is. Utasts: drop table hallgato cascade constraints;

Eredmny: A HALLGATO tblzat tbb nem ltezik s megsznik a MITHALLGATbl rhivatkoz fk_mithallg_hallg idegen kulcs is. 5.6.2.3. Objektumok mdostsa (ALTER ) Funkcijuk: Az ALTER tpus utastsokkal meglv objektum (tblzat, index, szekvencia, trigger, tablespace) jellemzit vltoztathatjuk meg. Egyes rendszerekben ezen kvl mdosthatjuk vele a jelszavunkat s az interaktv SQL ls paramtereit is. Legfontosabb kzlk az ALTER TABLE utasts. Itt csak ezt trgyaljuk. ALTER TABLE egyszerstett szintaxisa:

5-42

ahol oszlop felttel:

tblzat felttel:

Jogosultsg: A sajt tblzatunkat minden korltozs nlkl mdosthatjuk. Ms tblzatt csak akkor mdosthatjuk, ha van r ALTER jogosultsgunk vagy rendelkeznk ltalnos adatbzis-felgyeli jogosultsggal.

Kulcsszavak s paramterek: Kulcssz vagy paramter ALTER TABLE tulajdonos tblzat ADD MODIFY DROP oszlop Jelentse Ktelez kulcsszavak. Megadjk, milyen utasts kerl vgrehajtsra. A mdostand tblzat tulajdonosa. Ha nem adjuk meg, akkor a sajt tblzatunk A mdostand tblzat neve. Nem ktelez kulcssz. Jelzi, hogy j oszlopot vagy tblzatfelttelt adunk hozz a tblzathoz. Nem ktelez kulcssz. Jelzi, hogy meglv oszlop defincijt mdostjuk a tblzatban. Nem ktelez kulcssz. Jelzi, hogy meglv oszlopot, oszlopfelttelt, vagy tblzat-felttelt szntetnk meg. a hozzadand, mdostand illetve megszntetend oszlop neve.

5-43

Kulcssz vagy paramter adattpus

DEFAULT

kifejezs CONSTRAINT

felttelnv

NULL NOT NULL PRIMARY KEY FOREIGN KEY, REFERENCES tulajdonos-1 tblzat-1

Jelentse Megszabja milyen tpus adatokat tartalmaz az j illetve a mdostott tulajdonsg oszlop. A legfontosabb adattpusok (ld. 5.4. alfejezet): CHAR (fix hosszsg karakter) VARCHAR vagyVARCHAR2 (vltoz hosszsg karakter) NUMBER vagy DECIMAL(numerikus) DATE, TIME vagy TIMESTAMP (dtum/idpont) LONG (hossz karakter) Az adattpust ktelez megadni j oszlop definilsnl. Meglv oszlopnl, ha nem adjuk meg, akkor megmarad az eredeti adattpus. Nem ktelez kulcssz. Jelzi, hogy az j oszlopnak van alaprtelmezett rtke, illetve meglv oszlopnak megvltozik az alaprtelmezett rtke. Ha berskor nem adunk explicit rtket ennek az oszlopnak, akkor annak tartalma az alaprtelmezett rtk lesz. A mr bent lv adatok megtartjk a korbbi rtkket. Ez lesz az alaprtelmezett rtk. Tpusa meg kell feleljen az oszlop adattpusnak s be kell frjen az oszlop ltal meghatrozott adatterletre. Nem ktelez kulcssz. Jelzi, hogy az oszlopra vagy a tblzatra j felttelt definilunk, vagy meglevt mdostunk, trlnk. Az oszlopba vagy a tblzatba nem vihet be akrmilyen rtk, csak olyan, amelyik a korltozsban meghatrozott felttelnek megfelel. Az j, illetve a trlend vagy mdostand felttel elnevezse. A rendszer automatikusan kiegszti a tblzatot tartalmaz sma nevvel. Ez jelenik meg a hibazenetekben, ha a felttelnek nem megfelel adatot akarunk bevinni az oszlopba, s ezt a nevet kell megadnunk, ha a felttelt mdostani vagy trlni akarjuk az ALTER TABLE utastssal. Ha jonnan definilt felttelnl nem adjuk meg, akkor a rendszer automatikusan hozzrendel egy nevet, amivel egyrtelmen azonostja a felttelt az adatbzisban. Nem ktelez kulcssz. Jelzi, hogy az oszlop tartalmazhat NULL rtket. Nem ktelez kulcssz sszettel. Jelzi, hogy az oszlop nem tartalmazhat NULL rtket. Nem ktelez kulcssz sszettel. Jelzi, hogy az oszlop (kombinci) elsleges kulcs. Nem ktelez kulcssz kombincik. Jelzik, hogy a tblzatban idegen kulcsot definilunk. A FOREIGN KEY-t csak tblzat felttelnl adhatjuk meg, de ott viszont ha ltezik ez a felttel akkor ktelez. Az idegen kulccsal hivatkozott tblzat tulajdonosa. Ha nem adjuk meg, akkor a sajt tblzatunk. Erre a tblzatra hivatkozunk az idegen kulccsal.

5-44

Kulcssz vagy paramter oszlop-1 ON DELETE CASCADE

ON DELETE SET NULL

CHECK felttel Megjegyzsek:

Jelentse tblzat-1-nek erre az oszlopra/oszlopaira hivatkozunk az idegen kulccsal. Ez ott elsdleges kulcs, vagy egyedi index kell legyen rajta. Nem ktelez kulcssz kombinci. Definilja, hogy ha az idegen kulccsal hivatkozott rekordot trlik a hivatkozott tblzatbl, akkor az sszes r hivatkoz rekord is trldik a hivatkoz tblzatbl. Ha nem adjuk meg sem ezt, sem az ON DELETE SET NULL klauzult, akkor a hivatkozott tblzatbl olyan rekordot, amelyikre hivatkozs van nem lehet trlni. Nem ktelez kulcssz kombinci. Definilja, hogy ha az idegen kulccsal hivatkozott rekordot trlik a hivatkozott tblzatbl, akkor az sszes r hivatkoz rekordban az idegen kulcs rtke a NULL rtk lesz. Ha nem adjuk meg sem ezt, sem az ON DELETE CASCADE klauzult, akkor a hivatkozott tblzatbl olyan rekordot, amelyikre hivatkozs van nem lehet trlni. Nem ktelez kulcssz. Jelzi, hogy az oszlopba illetve a tblzatba berhat adatokra ellenrzsi felttelt adtunk meg. A berand adatoknak eleget kell tennik ennek a felttelnek. Amennyiben ez nem teljesl, akkor a rekordot nem tudjuk berni.

Az ALTER TABLE utastssal mdosthatjuk a tblzat kvetkez jellemzit (a felsorols nem teljes): A tblzat oszlopainak definciit. A tblzatra rvnyes ltalnos integritsi feltteleket (elsdleges kulcs, idegen kulcsok). Ahhoz, hogy egy tblzatra idegen kulccsal hivatkozhassunk, a tblzatnak mr lteznie kell, a hivatkozott oszlopokon elsdleges kulcs vagy egyedi index kell legyen s REFERENCES jogosultsgunk kell legyen r. Az egyes oszlopok adataira fennll korltozsokat. Adattrolsi jellemzket. Megszntethetnk meglv, vagy hozzadhatunk j oszlopokat. Megszntethetnk meglv, vagy hozzadhatunk j oszlop-feltteleket. Megszntethetnk meglv, vagy hozzadhatunk j tblzat-feltteleket. Ideiglenesen felfggeszthetjk, vagy visszallthatjuk felttelek rvnyessgt vagy triggerek mkdst. Az ADD ltal hozzadott j oszlop a tblzat utols oszlopa lesz. Az j oszlop rtke a tblzat mr meglev soraiban a NULL rtk illetve az oszlopra DEFAULT-knt megadott rtk lesz. Meglv oszlop mdostsra a kvetkez kiegsztsek rvnyesek: A felttelek kzl csak a NULL/NOT NULL felttelt mdosthatjuk. Termszetesen NOT NULL-ra csak akkor mdosthatunk, ha a tblzatban benn lv adatok kztt nincsen NULL rtk. Ha ms felttelt akarunk mdostani, akkor azt elbb meg kell szntetnnk, majd jknt ltre kell hoznunk (lsd 3. plda). Az adattpus megvltoztatsa vagy hossznak a cskkentse ltalban csak akkor lehetsges, ha az oszlop rtke a tblzat minden sorban a NULL rtk.

5-45

Kivtel ez all a CHAR s VARCHAR/VARCHAR2 kzti vlts, mely feltlttt adatokkal is megengedett, ha a mez hosszt nem cskkentjk. Karakter tpus oszlop hosszt s numerikus tpus oszlop pontossgt minden korltozs nlkl nvelhetjk. Oszlop megszntetskor az oszlopra rvnyes korltozsok is trldnek. Ha idegen kulccsal hivatkozunk a trlend oszlopra, vagy ms oszlop is szerepel a felttelben, akkor meg kell adnunk a CASCADE CONSTRAINTS kiegsztst is. az oszlopra felptett s az oszlopot tartalmaz indexek is megsznnek. olyan oszlopot, amelyik elsdleges kulcs, vagy rsze az elsdleges kulcsnak nem szntethetnk meg. Ezt csak gy tehetjk meg, hogy elbb DROP PRIMARY KEY-vel megszntetjk az elsdleges kulcsot, majd ezutn megszntethetjk az oszlopot. Egy DROP klauzulban csak egy elemet szntethetnk meg, de egy ALTER TABLE utastsban akrhny DROP klauzult megadhatunk. Olyan elsdleges kulcs, vagy egyedi index, amelyikre idegen kulccsal hivatkoznak csak a CASCADE CONSTRAINTS kiegszts megadsval szntethet meg. Egyes egyszerbb adatbzis-kezel rendszerek nem ismerik az ALTER tpus utastsokat. Ezekben, ha egy objektumot mdostani kell, akkor azt egy DROP utastssal megszntetjk, majd jra ltrehozzuk a kvnt formban. Termszetesen tblzat esetben eltte az adatokat kimentjk, majd az j tblzatba visszatltjk.

Pldk: 1. Mdostjuk a hallgatk adatait tartalmaz HALLGATO tblzatunkat. A VNEV, KNEV vezetk- s keresztnevet hosszabbra, VARCHAR (30) (ill. VARCHAR2(30))-ra definiljuk. Ezenkvl ltrehozzuk a TULAJ CHAR(8) j oszlopot is, amelyik alaprtelmezsknt a sort ber SQL azonostjt, a USER SQL fggvnyt tartalmazza. Utasts: alter table hallgato modify (vnev varchar2(30),knev varchar2(30)) add (tulaj char(8) default user); Eredmny: A tblzat defincija mdosul. A mr benn lev sorokban az j TULAJ mez rtke a sajt azonostnk lesz, a tbbi adat vltozatlan marad. 2. Mdostjuk a tantrgyak adatait tartalmaz TANTARGY tblzatunkat. A VIZSGA alaprtelmezse N legyen. Utasts: alter table tantargy modify (vizsga default 'N') ; Eredmny: A tblzat defincija mdosul. A mr bent lev sorokban a VIZSGA rtke vltozatlan marad. Az ezutn bert sorokba ha nem adtunk neki rtket automatikusan N kerl be.

5-46

3.

Tovbb mdostjuk a hallgatk adatait tartalmaz HALLGATO tblzatunkat. Az vfolyam ellenrzsre szolgl CON_HALLG_EVF felttelt (evf between 1 and 5) akarjuk megvltoztatni. Ezt csak gy tehetjk meg, hogy megszntetjk a felttelt, majd az j defincival ltrehozzuk. Utasts: alter table hallgato drop constraint con_hallg_evf add constraint con_hallg_evf check (evf between 0 and 6);

Eredmny: Mivel a mr bent lev rekordok a korbbi felttel miatt teljestik az j felttelt is, a tblzat defincija mdosul. 5.6.2.4. Jogosultsgok kezelse (GRANT, REVOKE) Ezekkel az utastsokkal jogosultsgokat adhatunk meg objektumok hasznlatra, illetve megadott jogosultsgokat vonhatunk vissza. GRANT Funkcija: Objektumok klnfle mdon val hasznlatra adhatunk jogosultsgot egyes felhasznlknak illetve felhasznli csoportoknak. Jogosultsg: Objektumon val mveletre akkor adhatunk jogosultsgot, ha az a sajt objektumunk. Ms objektumra csak akkor adhatunk, ha azon az adott mveletre WITH GRANT OPTIONnal kaptunk tovbbadhat jogosultsgot. Ez a korltozs az adatbzis-felgyelre is rvnyes. Egyszerstett szintaxisa:

REVOKE Funkcija: Objektumokra kiadott jogosultsgokat vonhatunk vissza egyes felhasznlktl illetve felhasznli csoportoktl. A visszavont jogosultsg mveletet az, akitl a jogosultsgot megvontk a tovbbiakban nem hajthatja vgre az objektumon.

5-47

Jogosultsg: Egy adott objektumra kiadott jogosultsgot az vonhatja vissza, aki azt a GRANT utastssal engedlyezte. Egyszerstett szintaxisa:

Kulcsszavak s paramterek: Kulcssz vagy paramter GRANT, ON, TO illetve REVOKE, ON, FROM privilgium Jelentse Ktelez kulcsszavak. Megadjk, milyen utasts kerl vgrehajtsra. Az itt felsorolt privilgiumokat, jogosultsgokat adjuk meg. A kvetkez jogosultsgok brmilyen kombincija megengedett, de nem minden objektumra engedlyezhet mindegyik. ALTER objektum defincijnak mdostsa DELETE trls tblzatbl, nzetbl INDEX index ltrehozsa tblzaton INSERT adatbevitel tblzatba, nzetbe REFERENCES idegen kulccsal val hivatkozs tblzatra SELECT olvass tblzatbl, nzetbl, szekvencibl UPDATE mdosts tblzatban, nzetben Nem ktelez kulcssz kombinci. Az objektumra engedlyezhet sszes privilgium megadst jelenti. Csak az itt felsorolt oszlop(ok)ra rvnyes a jogosultsg. Kizrlag az INSERT, UPDATE s REFERENCES jogosultsggal hasznlhat. Az objektum tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt objektumunk. Annak az objektumnak a neve, amelyikre a jogosultsgot adjuk.

ALL PRIVILEGES oszlop tulajdonos tblzat, nzet, szekvencia

5-48

Kulcssz vagy paramter felhasznl

PUBLIC WITH GRANT OPTION CASCADE CONSTRAINTS

Jelentse Annak a felhasznlnak (vagy csoportnak) az azonostja, aki a jogosultsgot kapja, vagy akitl visszavonjuk. Legalbb egy felhasznlt vagy a PUBLIC felhasznli csoportot meg kell adnunk. Nem ktelez kulcssz. Az adatbzis minden felhasznlja megkapja a jogosultsgot. Nem ktelez kulcssz kombinci. A felhasznl az gy kapott jogosultsgokat a GRANT utastssal tovbbadhatja msoknak. Nem ktelez kulcssz kombinci. Trli az sszes idegen kulcsot, amit a visszavont REFERNCES jogosultsggal adtak ki. Ktelez megadni, ha REFRENCES vagy ALL PRIVILEGES jogosultsgot vonunk vissza, s a tblzatra definiltak idegen kulcsot a visszavont jogosultsg alapjn.

Megjegyzsek: A jogosultsg az utasts kiadsval azonnal hatlyba lp illetve rvnytelenn vlik. PUBLIC specilis felhasznli csoport: Ha a PUBLIC felhasznli csoportnak adjuk a jogosultsgot, akkor az adatbzis minden felhasznlja megkapja ezt a jogosultsgot. Ha a PUBLIC felhasznli csoporttl vonjuk vissza a jogosultsgot, akkor az adatbzis minden felhasznljtl visszavonjuk. Ennek ellenre azok a felhasznlk, akik ezzel a jogosultsggal ms ton is rendelkeztek (pldul azonostjukra kzvetlenl kiadott GRANT alapjn) tovbbra is elvgezhetik a mveletet. Ha egy jogosultsgot tbb mdon is megkaptunk (pldul az azonostnkra s PUBLIC rvn is), akkor az egyik visszavonsa esetn a msik mdon szerzett jogosultsg rvnyben marad (lsd 2. plda). A sajt objektumainkra minden jogosultsgunk megvan. Ezrt ezekre nem adhatunk ki s nem is vonhatunk vissza jogosultsgot. Nzetre csak akkor adhatunk jogosultsgot, ha a nzet sszes bzis tblzatn rendelkeznk a kiadand jogosultsggal. Azt, hogy milyen objektumokra milyen jogosultsgaink vannak, illetve milyen jogosultsgokat kiknek adtunk ki, a megfelel katalgus relcikbl tudhatjuk meg. Ha valakinek INDEX vagy REFERENCES jogosultsgot adtunk egy tblzatunkra s az illet idegen kulcsot, vagy egyedi indexet pt r, s nem ellenrizzk, hogy milyen adatokat visz be ebbe, illetve az erre hivatkoz tblzatokba, akkor problmnk lehet a tblzat adatainak mdostsakor. (Pl. mr bevitt egy olyan rekordot a hivatkoz tbljba, ami miatt nem trlhetjk a hivatkozott adatot a sajt tblnkbl, mert ltezik r hivatkozs). A GRANT utastssal rendszer privilgiumokat (pl. objektumok ltrehozsa) is adhatunk egyes felhasznlknak illetve felhasznli csoportoknak. Ezt az utastst ltalban csak az adatbzis-felgyel adhatja ki. Az gy adott jogosultsgokat REVOKE-kal vissza is vonhatja. Minden jogosultsg s felhasznl legfljebb egyszer szerepelhet az utastsban. 5-49

Pldk: 1. Az SQL00 felhasznlnak minden, a tbbieknek csak olvassi jogosultsgot adunk a HALLGATO tblzatunkra. Utastsok: grant all privileges on hallgato to sql00; grant select on hallgato to public; Eredmny: SQL00 mindent csinlhat a HALLGATO tblzatunkon, a tbbiek pedig olvashatjk az adatait. 2. Az SQL00 felhasznltl visszavonunk minden jogosultsgot. Utasts: revoke all privileges on hallgato from sql00; Eredmny: PUBLIC-tl az olvassra a jogosultsgot nem vontuk vissza. Ezrt SQL00 tovbbra is olvashatja a HALLGATO tblzatunkat a PUBLIC jogosultsg rvn, de ms mveletet nem vgezhet rajta. 5.6.3. Adatkezel utastsok Az adatkezel (Data Manipulation Language, DML) utastsok segtsgvel mr ltez, meghatrozott tpus adatbzis objektumokbl vlaszthatunk ki sorokat (SELECT), rhatunk be j sorokat (INSERT), mdosthatjuk meglv sorok oszlopait (UPDATE), trlhetnk meglv sorokat (DELETE). 5.6.3.1. Az adatkezel utastsok kzs jellemzi Egy adatkezel utasts mindig egy vagy tbb, az utastsban egyrtelmen meghatrozott adatbzis objektumra (ltalban tblzatra vagy nzetre) vonatkoz mveletet jelent s azoknak az utasts paramtereitl s a tnyleges adatoktl fggen 0, 1, vagy tbb sort rinti. Annak a SELECT utastsnak az eredmnye, amelyik kivlasztja a MITHALLGAT tblzatbl azokat a hallgatkat, akik az SQL kd tantrgyat felvettk, a tblzat adataitl fggen 0,1 vagy akrhny sor lehet. Az utastsokat csak az hajthatja vgre, akinek az abban szerepl objektum(ok)on az adott utasts elvgzsre jogosultsga van. Az objektum tulajdonosa minden mveletet elvgezhet a sajt objektumain. A tbbi felhasznl (a legegyszerbb szemlyi szmtgpes rendszerek, illetve az adatbzis-felgyel kivtelvel) csak olyan mveleteket vgezhet ms objektumn, amire a tulajdonostl a GRANT utastssal (ld. 5.6.2.4. pont) engedlyt kapott. gy pldul lehetsges, hogy az SQL30 azonostval rendelkez felhasznl az SQL00 felhasznl HALLGATO tblzatnak adatait olvashatja, j adatokat vihet be, mdosthatja brmely hallgatnl, hogy melyik vfolyamra jr, de ms adatot nem vltoztathat meg s nem is trlhet hallgatkat onnan. Az adatkezel utastsokat kiadhatjuk prbeszdesen s programnyelvbl is a fogad nyelv utastsai kz beptve. A ktfajta utasts formtuma a legtbb esetben azonos.

5-50

Nhny specilis utasts illetve utastsvltozat azonban csak programbl hasznlhat. Ezeket az 5.7. pontban ismertetjk. A szintaktikailag helyes utasts(oka)t a rendszer elszr talaktja relcis mveletek sorozatv. Utna ellenrzi, hogy a krelmeznek van-e jogosultsga ezek mindegyiknek elvgzsre. Amennyiben igen, gy az adatok mennyisgrl s eloszlsrl az adatbzis katalgusbl rendelkezsre ll informcik alapjn megllaptja a (szerinte) optimlis mveleti sorrendet s adatelrsi utakat, s generlja az opercis rendszer szmra az ehhez szksges utastsokat. Nagy adatbzisoknl az elrsi t optimalizlsa igen fontos, ezen mlik a rendszer hatkonysga. Errl rszletesen beszlnk a 2.7. alfejezetben s nhny gyakorlati problmt s megoldsukat ismertetjk a 8.5. alfejezetben. Az utasts elvgzsrl (vagy eredmnytelensgrl) illetve a vgrehajts folyamn esetleg szlelt hibrl a rendszer rtestst kld a felhasznlnak. Prbeszdes zemmdban ez egy szveges magyarzattal kiegsztett hibakd. Programbl val alkalmazskor egy elre definilt programterletre helyezi ezeket az informcikat. Ha tbben dolgoznak egyidejleg ugyanazokkal az adatokkal, akkor a rendszer automatikusan gondoskodik arrl, hogy az adatok konzisztensek maradjanak. Az ezt biztost zrmechanizmust a 8.3. alfejezetben ismertetjk rszletesebben. 5.6.3.2. Sorok kivlasztsa (SELECT) Funkcija: Adatok kivlasztsa tblzatbl, nzetbl. ltalnos szintaxisa:

Magyarzat: A SELECT utasts a legsszetettebb s a leggyakrabban hasznlt SQL utasts. Ezrt elszr egy ltalnos ttekintst adunk az utastsban rejl lehetsgekrl, majd ezutn ismertetjk a legfontosabb klauzulkat. A SELECT utastsban megadhatjuk, hogy hogyan (teljesen azonos rekordokat csak egyszer, vagy ahnyszor elfordulnak), mit (milyen oszlopokat, kifejezseket, ez a kivlasztsi lista), honnan (milyen tblzatokbl, nzetekbl, ez a FROM utastsrsz), hov (milyen programvltozkba, ez a csak programbl hasznlhat INTO utastsrsz), milyen felttelek teljeslse esetn (ez a WHERE utasts kiegszts), milyen csoportostsban, (ez a GROUP BY utasts kiegszts), az egyes csoportokra milyen felttelek teljeslse esetn, (ez a HAVING utasts kiegszts),

5-51

ms szelekt eredmnyvel miknt egyestve (mindegyik SELECT rekordjait, csak a kzs rekordokat vagy csupn azokat, amelyeket csak az els SELECT szolgltat), milyen rendezettsgben, (ez az ORDER BY utasts kiegszts) vlasszuk ki a kvnt adatokat.

Egyszerstett szintaxisa:

ahol szubszelekt egyszerstett szintaxisa:

a kivlasztsi lista egyszerstett kifejtse:

5-52

az egyestend tblk ltalnos szintaxisa:

az egyestend tblk rszletes, de egyszerstett szintaxisa:

Jogosultsg: Tblzatbl akkor vlaszthatunk ki sorokat, ha az a sajt tblzatunk, vagy van r SELECT privilgiumunk. Nzeten keresztl akkor vlaszthatunk ki a bzis tblzatbl sorokat, ha a nzet tulajdonosnak van a bzis tblzatra SELECT privilgiuma. Ezen kvl neknk is kell rendelkeznnk SELECT privilgiummal a nzetre, ha az nem a sajtunk. Ha adatbzis-felgyeli privilgiumunk van, akkor brmelyik tblbl, nzetbl kivlaszthatunk sorokat.

Kulcsszavak s paramterek: Kulcssz vagy paramter Jelentse SELECT Ktelez kulcssz. Megadja, milyen utasts kerl vgrehajtsra. DISTINCT Elhagyhat kulcssz. Jelzi, hogy ha a felttelek alapjn teljesen azonos sorokat kapnnk eredmnyl, akkor azokbl az utasts csak egy rekordot szolgltasson vissza eredmnyl (lsd 2. plda.)

5-53

Kulcssz vagy paramter Jelentse ALL Elhagyhat kulcssz. Jelzi, hogy az utasts a feltteleknek megfelel sszes rekordot adja vissza eredmnyl. Az azonos rekordokat tbbszr megkapjuk az eredmny-listban. Ez az alaprtelmezs. kivlasztsi lista Az itt felsorolt elemek mindegyikt kivlasztja a feltteleknek megfelel rekordokbl. Az egyes elemek a kvetkezk: Jelentse Az sszes oszlop megjelenik az eredmnyben. Ha ez a kivlasztsi-lista egyetlen eleme, akkor a FROM klauzulban felsorolt sszes tblzat/nzet minden oszlopa rsze lesz az eredmnynek. Ha egy tblzat vagy nzet neve utn ll, akkor csak ennek az objektumnak az sszes oszlopa kerl be az eredmnybe. (Ezekhez termszetesen mg tovbbi elemeket is felvehetnk a kivlasztsi-listba.) tulajdonos3 A tblzat3 vagy nzet3 tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt objektumunk. A tulajdonos s a tblzatnv vagy nzetnv kz pontot (.) kell tennnk. tblzat3 | Ebbl a tblzatbl vagy nzetbl vlasztjuk ki az nzet3 sszes oszlopot. Ha egy objektumnak csak egyes oszlopait akarjuk kijellni, akkor azokat kifejezs-knt, egyenknt kell felsorolnunk. kifejezs ltalban egy oszlop vagy egy lland (literl). Pontos lerst az SQL kifejezseknl talljuk. (ld. 5.3.8. pont) Az eredmnyben a kifejezsek a felsorols sorrendjben jelennek meg. Interaktv zemmdban a fejlcben alaprtelmezsknt az oszlop neve jelenik meg. Ha a kifejezs nem oszlop s nem adtunk neki ideiglenes nevet, akkor a rendszer generlja a feliratot. AS Az olvasst megknnyt, elhagyhat kulcssz. ideiglenes- Ebben a szelekt utastsban ez lesz az adott kifejezs nv neve. Ez jelenik meg az eredmny fejlcben s hasznlhatjuk ezt a nevet is az ORDER BY klauzulban. Clszer megadnunk, ha kifejezs nem egy tblzat/nzet oszlop (lsd 3. plda). Csak programbl hasznlhat, ott viszont ktelez. Jelzi, hogy a kivlaszts eredmnye host vltoz(k)ba (ld. 5.7.3. pont) kerl. A programnak ezen vltoziba kerl a kivlasztott sor. A kivlasztsi lista els elmnek tartalma lesz az els host vltoz rtke, ,n-edik eleme az n-edik host vltoz rtke. Ktelez kulcssz. Jelzi a FROM utastsrsz kezdett. Ebben adjuk meg, honnan kell az eredmnysorokat kivlasztani. Jells *

INTO host-vltoz FROM

5-54

Kulcssz vagy paramter Jelentse tulajdonos2 A tblzat2 vagy nzet2 tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt objektumunk. A tulajdonos s a tblzatnv vagy nzetnv kz pontot (.) kell tennnk._ tblzat2 | nzet2 Ebbl/ezekbl kell a feltteleknek megfelel sorokat kivlasztani (lsd 1. s 2. plda). ideiglenes-nv2 Ebben a szelekt utastsban ez lesz az adott tblzat/nzet neve. Ezt hasznljuk az oszlopok, kifejezsek minstshez. Ktelez megadnunk olyan objektumokra, amelyek tbbszr szerepelnek a FROM klauzulban (lsd 3. plda). egyestend tblk Az itt felsorolt tblzatokat, nzeteket, egyestett objektumokat kell a megadott mdon egyesteni. JOIN Elhagyhat kulcssz. Ez jelzi, hogy a kt oldaln lv objektumok egyestsbl kell majd a feltteleknek megfelel sorokat kivlasztani. tulajdonos4 Az egyestsben balrl rsztvev tblzat-4 vagy nzet-4 tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt objektumunk. A tulajdonos s a tblzatnv vagy nzetnv kz pontot (.) kell tennnk. tblzat-4 | nzet-4 A bal oldali egyestend tblzat/nzet neve. tulajdonos5 Az egyestsben jobbrl rsztvev tblzat-5 vagy nzet-5 tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt objektumunk. A tulajdonos s a tblzatnv vagy nzetnv kz pontot (.) kell tennnk. tblzat-5 | nzet-5 A jobb oldali egyestend tblzat/nzet neve. INNER | LEFT | RIGHT | Elhagyhat kulcsszavak. Csak egy adhat meg kzlk. Jelzi, FULL milyen tpus egyestst kell vgrehajtani. Ha nem adjuk meg, akkor alaprtelmezsknt bels egyests (inner join) kerl vgrehajtsra. OUTER Megrtst megknnyt, elhagyhat kulcssz. Csak LEFT, RIGHT, FULL-lal egytt adhat meg. ON Elhagyhat kulcssz. Megadsa azt jelzi, hogy a kt oldaln lv objektumok egyestst felttel3 alapjn kell elvgezni (lsd 6b. plda). felttel5 Ennek alapjn hajtdik vgre az egyests. A kt join-objektumnak csak a felttel3-nak megfelel sorai kerlnek be az egyestett (ideiglenes) tblzatba (lsd 6b. plda). USING Elhagyhat kulcssz. Megadsa azt jelzi, hogy a kt oldaln lv objektumok egyestst az oszlop3 oszlop(ok) alapjn kell elvgezni (lsd 6c. plda). oszlop5 Csak ez(ek) az oszlop(ok) szerepel(nek) mindkt objektumbl a join-felttelben (lsd 6c. plda). WHERE Elhagyhat kulcssz. Mutatja a WHERE utasts kiegszts kezdett. Jelzi, hogy csak az utna kvetkez felttel(ek)nek megfelel rekordok kerlnek kivlasztsra. felttelek Lersukat az SQL feltteleknl talljuk (ld. 5.3.4.5. pont).

5-55

Kulcssz vagy paramter Jelentse GROUP BY Nem ktelez kulcsszavak. Mutatja a GROUP BY utasts kiegszts kezdett. Ha megadjuk, akkor a kivlasztsi-lista csoport fggvnye(i) a kivlasztott sorokbl a klauzulban megadott kifejezs(ek) (ltalban oszlopok) minden egyes rtkhez egy, a fggvny argumentumnak a csoportra jellemz rtkt rendeli(k) hozz (lsd 4. s 5. plda). kifejezs-1 Az utasts ltal kpzett csoportokra az jellemz, hogy egy csoporton bell az sszes kivlasztott sorban ennek a kifejezsnek az rtke ugyanaz. Egy rtkhez csak egy csoport tartozik. HAVING Mutatja a HAVING utasts kiegszts kezdett. Az egyes csoportokat csak akkor jelenti meg, ha az itt megadott felttel az egsz csoportra teljesl. felttelek1 Az itt megadott felttelnek kell az egsz csoportra teljeslni (lsd 5. plda). UNION Elhagyhat kulcssz. Megadsa jelzi, hogy a baloldaln lv szubszelekt ltal kivlasztott sorokat az UNION mvelet szablyai szerint (ld. 5.3.4.4. pont) vlogatjuk ssze a szubszelekt3 ltal kivlasztott adatokkal. UNION ALL Elhagyhat kulcsszavak. Megadsuk jelzi, hogy a baloldaln lv szubszelekt ltal kivlasztott sorokat az UNION ALL mvelet szablyai szerint (ld. 5.3.4.4. pont) vlogatjuk ssze a szubszelekt3 ltal kivlasztott adatokkal (lsd 7 plda). INTERSECT Elhagyhat kulcssz. Megadsa jelzi, hogy a baloldaln lv szubszelekt ltal kivlasztott sorokat az INTERSECT mvelet szablyai szerint (ld. 5.3.4.4. pont) vlogatjuk ssze a szubszelekt3 ltal kivlasztott adatokkal (lsd 8. plda). MINUS Elhagyhat kulcssz. Megadsa jelzi, hogy a baloldaln lv szubszelekt ltal kivlasztott sorokat a MINUS mvelet szablyai szerint (ld. 5.3.4.4. pont) vlogatjuk ssze a szubszelekt3 ltal kivlasztott adatokkal. szubszelekt3 Az ltala kivlasztott rekordokat egyesti a megadott mvelet szablyai szerint a halmazopertor bal oldaln lv szubszelekt rekordjaival (lsd 7. s 8. plda). ORDER BY Elhagyhat kulcssz. Mutatja az ORDER BY utasts kiegszts kezdett. Megadsa jelzi, hogy a kivlasztott sorokat rendezve jelentjk meg. Rendezsi szempontknt a kvetkezket adhatjuk meg: jells jelentse kifejezs-3 Az eredmnysorok rendezse ennek a kifejezsnek az rtke szerint trtnik. A gyakorlatban ez rendszerint a kivlasztsi lista egy oszlopa. lista-hely rtke: n (egsz szm) A rendezs a kivlasztsi lista n-edik elemnek rtke szerint trtnik (lsd 4. plda). ideiglenes-nv A rendezs a kivlasztsi listban ezzel az ideiglenes nvvel definilt kifejezsnek az rtke szerint trtnik (lsd 3. plda).

5-56

Kulcssz vagy paramter Jelentse ASC Elhagyhat kulcssz. Megadsa jelzi, hogy az eredmny rendezse nvekv sorrendben trtnik. Ez az alaprtelmezs. DESC Elhagyhat kulcssz. Megadsa jelzi, hogy az eredmny rendezse cskken sorrendben trtnik. NULLS FIRST Elhagyhat kulcsszavak. Megadsuk jelzi, hogy a NULL rtkek a rendezett lista elejre kerlnek. Cskken sorrendnl ez az alaprtelmezs. NULLS LAST Elhagyhat kulcsszavak. Megadsuk jelzi, hogy a NULL rtkek a rendezett lista vgre kerlnek. Nvekv sorrendnl ez az alaprtelmezs. FOR UPDATE Nem ktelez kulcsszavak. Mutatja a FOR UPDATE utasts kiegszts kezdett. Megadsuk jelzi, hogy a SELECT utasts ltal kivlasztott sorokat ms nem mdosthatja s nem zrhatja el a tranzakcink befejeztig. ltalban kurzor definilsnl hasznljk. OF Elhagyhat kulcssz. Megadsa jelzi, hogy csak az utna megadott tblzatok/nzetek sorainak zrolst nem engedjk meg msoknak. tulajdonos1 A tblzat1 vagy nzet1 tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt objektumunk. A tulajdonos s a tblzat vagy nzet neve kz pontot (.) kell tennnk. tblzat1 | nzet1 Csak az ezekbl az objektumokbl kivlasztott sorok zrolst nem engedjk meg msoknak. oszlop1 Formai okokbl a FOR UPDATE klauzulban megadott objektumok mindegyikhez az objektum egy oszlopt meg kell adnunk. Megjegyzsek: Az egyes utastsrszek s kiegsztsek kezdett a r jellemz kulcssz (szavak) jelzi(k). Vgt a kvetkez utastsrsz vagy kiegszts kulcsszava(i) illetve az utasts/szubszelekt/begyazott szelekt vge jelenti. Ha sem ALL-t, sem DISTINCT-et nem adunk meg, akkor a SELECT utasts az sszes azonos sort visszaadja eredmnyl. A SELECT kivlasztsi lista ... s a SELECT ALL kivlasztsi lista ... utastsok hatsa azonos. A kivlasztsi listban a kifejezst csak akkor minsthetjk a tulajdonos nevvel, ha a kifejezst tartalmaz elemek tblzatt/nzett a FROM klauzulban a tulajdonos nevvel egytt adtuk meg. Ha a FROM klauzulban kt tblzat/nzet ll egyms utn s nem szerepel kztk a JOIN mvelet, akkor ennek az eredmnye a kt objektum keresztszorzata lesz (ld. 4.5.5. pont). (A gyakorlatban ez szinte soha nem jn ltre, mert a keresztszorzat sorait a WHERE felttelben korltozzuk s gy biztostjuk a JOIN ltrejttt. Egyes rendszerekben csak az utbbi mdon, a WHERE felttelben tudjuk a JOIN mvelett megvalstani.) Egy szubszelektben elvileg akrhny objektumot egyesthetnk, de csak egy kls egyestst definilhatunk. A join vgrehajtsa ltalban balrl jobbra trtnik. gyeljnk azonban arra, hogy az egyests jelentsen lelassthatja a SELECT mveletet.

5-57

Ha tbb tblzatbl vlasztunk ki elemeket, akkor ktelez a tblzat/nzetnvvel minsteni azokat az oszlopneveket, amelyek a FROM utastsrsz tbb objektumban is elfordulnak. Ktelez mg a tulajdonosnvvel val minsts is, ha a FROM klauzulban azonos nev tblzatok/nzetek szerepelnek (lsd. 3. s 11. plda). Ktelez az ideiglenes tblzatnv megadsa akkor, ha ugyanaz a tblzat tbbszr szerepel a FROM klauzulban (lsd 3. plda). A kzs oszlopokra trtn egyestst (join, outer join) egyes rendszerekben megadhatjuk a FROM klauzulban az egyestend tblk s az egyests tpusnak megadsval. Az oszlopok alapjn vgrehajtand egyestst megfogalmazhatjuk a WHERE klauzulban is a join oszlopokra megadott egyenlsg formjban is (lsd 6. plda). gyeljnk arra, hogy a termszetes (alaprtelmezett) join nem adja meg azokat a rekordokat, amelyekben brmelyik join oszlop rtke NULL rtk. Ha az egyestsnl a tblzatok/nzetek sorrendje ktsges lehet, akkor zrjelekkel tegyk egyrtelmv a vgrehajts sorrendjt. Ha az egyestshez JOIN USING kiegsztst adunk meg, akkor az egyestsre szolgl oszlopok neve mindkt objektumban azonos kell legyen. Csak a USING utn felsorolt azonos nev oszlopok vesznek pronknt rszt az egyestsben. Ezeket az oszlopneveket nem szabad minstennk. Ha nem adunk meg WHERE klauzult, akkor a FROM utastsrsz ltal meghatrozott (ideiglenes) objektum minden sora kivlasztsra kerl. Ha megadjuk a WHERE klauzult, akkor a FROM utastsrsz ltal meghatrozott (ideiglenes) objektumnak csak azok a sorai kerlnek kivlasztsra, amelyek a WHERE-ben meghatrozott feltteleknek megfelelnek. A WHERE utasts kiegszts feltteleiben a FROM utasts kiegszts elemeinek brmelyik oszlopa szerepelhet, fggetlenl attl, hogy az benne van-e a kivlasztsi listban. Ha megadtuk a GROUP BY klauzult, akkor a kivlasztsi lista csak az albbi tpus elemekbl llhat: lland (literl), csoport fggvny, olyan kifejezs, amelyik a GROUP BY klauzulban szerepel, olyan kifejezs, amelyet a fent felsoroltakbl kpezhetnk, s a csoport minden kivlasztott elemre ugyanazt az rtket adja. Ha a GROUP BY hasznlatakor egy csoporton bell egy sor sem kerl kivlasztsra, vagy az sszes kivlasztott sorban a kivlasztsi listban lev fggvny argumentuma NULL rtk, akkor a fggvny rtke az adott csoportra a NULL rtk lesz. A GROUP BY klauzulban a csoportostsra szolgl kifejezs a utasts kiegszts elemeinek brmelyik oszlopt tartalmazhatja, fggetlenl attl, hogy az szerepel-e a kivlasztsi listban. Ha nem adunk meg ORDER BY klauzult, akkor az eredmny vrhat sorrendjrl nem tudunk mit mondani. Elfordulhat, hogy ugyanaz a lekrdezs megismtelve ms sorrendben szolgltatja a rekordokat. Ha tbb rendezsi szempontot adunk meg, akkor a rendszer elszr az elsknt megadott szempont szerint rendezi az eredmnyt, majd ezen bell a msodiknak megadott szerint s gy tovbb (lsd 1. s 7. plda).

5-58

ORDER BY lista_hely-et akkor clszer megadni, ha a rendez kifejezs neve nagyon hossz, vagy ha halmaz opertor(ok)kal sszekapcsolt szubszelekt-ek vgeredmnyt akarjuk rendezni (lsd 7. plda). Nem adhatunk meg ORDER BY-t a WHERE utasts kiegszts begyazott szelektjben. Ha SELECT DISTINCT ... -et adunk meg, akkor a rendezsi oszlop(ok)nak szerepelni kell a kivlasztsi listban is. Rendezskor az sszehasonltsi sorrend: numerikus kifejezseknl a szmok eljeles rtke, dtum/idpont tpus kifejezseknl a dtum majd az idpont, Jelsorozatoknl az adatbzis-kezel rendszer kdtblzata (ASCII vagy EBCDIC kd) szerinti sorrend. ASCII karaktereknl a nvekv sorrend: szkz, specilis karakterek, szmjegy, nagy betk, kis betk, EBCDIC-nl: szkz, specilis karakterek, kis betk, nagy betk, szmjegy. A NULL rtkek alaprtelmezett rendezsnl ltalban a rendezett lista vgre kerlnek. A NULLS FIRST, NULLS LAST kulcsszavakat nem mindegyik rendszer ismeri. Ilyenkor az alaprtelmezstl fgg, hogy a NULL rtkek a rendezett halmaz elejre vagy a vgre kerlnek. gyeljnk arra, hogy ha numerikus vagy dtum/idpont tpus kifejezseket az ttekinthetbb megjelents rdekben karakter formba alaktunk t, akkor az sszehasonlts is karakter formtum szerint trtnik. A SELECT INTO formt csak programban hasznlhatjuk s ott is csak akkor, ha az utasts legfeljebb egy sort vlaszt ki. Egy SELECT utastsban elvileg akrhny szubszelekt eredmnyt sszevonhatjuk a UNION, UNION ALL, INTERSECT, MINUS halmaz opertorok segtsgvel. A halmaz mveletek vgrehajtsa balrl jobbra trtnik. Ha halmaz opertor segtsgvel tbb szubszelekt eredmnyt vonjuk ssze, akkor csak az utols szubszelekt utn adhatjuk meg az ORDER BY klauzult. A halmaz opertorokkal sszekapcsolt szubszelektek kivlasztsi listi azonos szm s azonos tpus elemeket kell tartalmazzanak azonos sorrendben rendezve. A lista nem tartalmazhat LONG adattpus elemet (ld. 5.4.5. pont). (Az egyes elemek nevei, hosszai klnbzhetnek az egyes szubszelektekben.) A FOR UPDATE utasts kiegszts megadsval biztostjuk, hogy a tranzakcink befejeztig msok ne mdosthassk s ne zrhassk el az ltalunk kivlasztott rekordokat. Ennek hasznlata azonban adatbzis-kezel rendszerenknt eltr mdon korltozott. Ha csak meghatrozott tblzat(ok)bl/nzet(ek)bl kivlasztott sorok zrolst akarjuk megtiltani, akkor az OF utni felsorols utn meg kell adnunk a tblzat/nzet egy oszlopt is. Ez az adott objektum brmelyik oszlopa lehet. Ha a WHERE klauzulban kifejezs = (begyazott szelekt) (vagy = helyett <, <=, >, >=, <> szerepel), akkor a begyazott szelekt rtelemszeren csak egyetlen egy oszlopot vlaszthat ki egyetlen egy rtkkel. IN, ANY, ALL, SOME esetn akrhny rtke lehet a kivlasztott oszlopnak.

Korrellt s nem korrellt begyazott szelekt Ha a felttelek begyazott szelektet tartalmaznak, akkor a SELECT utasts hatkonysga nagy mrtkben fgghet a begyazott szelektek felsorolsnak sorrendjtl, 5-59

hnyszor kell az utastst a SELECT-en bell vgrehajtani. Ha a WHERE s/vagy HAVING utasts kiegszts felttelei nem tartalmaznak begyazott szelektet, akkor az SQL optimalizl a felttelek felsorolsnak sorrendjtl fggetlenl hatrozza meg az optimlis elrsi utat a katalgus tblzatokban lev statisztika alapjn. Begyazott szelektek esetn azonban ezek kirtkelse a begyazott szelektek felsorolsnak sorrendjben trtnik. Ezrt, ha ezeket AND (S) opertorral kapcsoljuk ssze, akkor clszer elszr azokat felsorolni, amelyek nagy valsznsggel FALSE (HAMIS) eredmnyt adnak. Ebben az esetben ugyanis az ezutn ll begyazott szelektek vgrehajtsa elmarad. Hasonl mdon, OR (VAGY) opertorral sszekapcsolt begyazott szelekteknl az(oka)t tegyk elbbre a felsorolsban, amely(ek) nagy valsznsggel fognak TRUE (IGAZ) eredmnyt adni. Ha a WHERE s/vagy HAVING utasts kiegszts felttelei tartalmaznak begyazott szelektet, akkor annak formjtl fgg, hogy az egyetlen egyszer kerl csak vgrehajtsra (nem korrellt begyazott szelekt), vagy pedig az egyb feltteleknek megfelel rekordok minden egyes sorra (korrellt begyazott szelekt). Nyilvnval, hogy az utbbi vgrehajtsi ideje sokkal hosszabb lesz. A ktfle begyazott szelektet lthatjuk a 9. s 10. pldkban. Amennyiben mdunk van r, akkor igyekezznk a feladatot nem korrellt begyazott szelekt formjban megfogalmazni. A begyazott szelekt helyett gyakran megadhatjuk az SQL utastst tblzatok egyestseknt is, s fordtva, join helyett gyakran hasznlhatunk begyazott szelektet (lsd 11. plda). Hogy mikor melyik hatkonyabb, arra nincs ltalnos szably. Pldk: 1. Meghatrozott oszlopok s sorok rendezett kivlasztsa egy tblzatbl. Utasts: select vnev,knev,szdatum from sql00.hallgato where szdatum >='1980-01-01' and evf=1 order by vnev,knev; Eredmny: Az SQL00.HALLGATO tblzatbl kivlasztja ABC sorrendben azon elsvesek vezetknevt, keresztnevt s szletsi dtumt, akik 1980-ban vagy ksbb szlettek. 2. Plda a SELECT s a SELECT DISTINCT kzti klnbsgre: Utasts-1: select distinct tmegnev from oktatas order by tmegnev; Eredmny: TMEGNEV -----------Adatbzisok ORACLE Utasts-2: select tmegnev from oktatas order by tmegnev;

5-60

Eredmny: TMEGNEV -----------Adatbzisok Adatbzisok Adatbzisok Adatbzisok Adatbzisok ORACLE ORACLE ORACLE 3. Plda az ideiglenes tblzatnevek hasznlatra.

Az ALKALMAZOTT-1NF tblzatbl (ld. 4-30. oldalon a 4.11. bra) ABC sorrendben ki akarjuk vlasztani a dolgozk (VEZ-NEV) s a fnkk (FONOK) nevt. Ehhez meg kell hatroznunk ugyanebbl a tblzatbl a fnk azonost kdjval (FONOK) azonos alkalmazotti azonosthoz (SZSZAM) tartoz nevet (VEZ-NEV s SZSZAM egy msik sorban van). Az utastsban ktelez a tblzatok ideiglenes tblzatnv-vel val azonostsa, mivel a kt tblzat azonos. Ktelez a kivlasztott oszlopok minstse is, mivel mindkettbl a vezetknevet (VEZ-NEV) vlasztjuk ki, de az egyik az alkalmazott neve ( A1.VEZ-NEV ), a msik az ebben lev A1.FONOK azonost rtkkel egyenl azonostj A2.SZSZAM-hoz tartoz A2.VEZ-NEV nv, ami a fnk nevt adja. Clszer a kivlasztott oszlopoknak ideiglenes nevet (ALK_NEV, FONOK_NEV) adni. Utasts: select a1.vez_nev as alk_nev,a2.vez_nev as fonok_nev from alkalmazott a1, alkalmazott a2 where a1.fonok=a2.szszam; 4. Plda a GROUP BY utasts kiegszts hasznlatra.

Hatrozzuk meg a TANTARGY tblzatbl minden tantrgyra (TID) a tantrgy osztlyzatainak tlagt, s a tantrgybl elrt legnagyobb pontszmot. Az eredmnyt cskken tlag, azon bell TID szerint rendezzk. Utasts: select tid,avg(osztalyzat) as atlag_osztalyzat ,max(gyakpont) as max_gyakpont from mithallgat group by tid order by 2 desc, tid; 5. Plda a GROUP BY s a HAVING utasts kiegszts hasznlatra.

rassuk ki a maximlis s a minimlis gyakorlati pontszmokat (GYAKPONT) azokra a tantrgyakra, melyeknek azonostja DB-vel kezddik s az tlag osztlyzat 3 fltt van. (Az els felttel minden sorra vonatkozik, gy az a WHERE klauzulba kerl.) Utasts: select tid,max(gyakpont) as max_gyakpont,min(gyakpont) as min_gyakpont from mithallgat where tid like 'DB%' group by tid having avg(osztalyzat) > 3;

5-61

6.

Plda a klnbz egyestsek (join) hasznlatra.

A minta tblzatainkbl (ld. 4.2. alfejezet) oktatnknti listt ksztnk, hogy melyik oktat milyen osztlyzatokat adott az egyes hallgatknak. A hallgatk szemlyisgi jogainak vdelmben csak az oktat nevt adjuk meg, a hallgatkat csupn az azonostjukkal (HID) szerepeltetjk a listban. Az ehhez szksges join mveletet tbbflekppen fogalmazhatjuk meg. Nhnyat bemutatunk: Utasts-a select oktato, hid, osztalyzat from tantargy, mithallgat where tantargy.tid = mithallgat.tid order by oktato,hid; Utasts-b: select oktato, hid, osztalyzat from tantargy join mithallgat on tantargy.tid = mithallgat.tid order by oktato,hid; Utasts-c: select oktato, hid, osztalyzat from tantargy join mithallgat using (tid) order by oktato,hid; Eredmny: A hrom utasts egyenrtk. Egyik sem adja meg azokat az oktatkat, akiknek egy hallgatja sincsen. Ha lehetnek ilyen esetek s ezeket is meg akarjuk kapni, akkor az egyestst balrl, alaprtelmezssel (left outer join) kell vgrehajtanunk. Utasts_d: select oktato, hid, osztalyzat from tantargy left outer join mithallgat using.(tid) order by oktato,hid; Tovbb bonyolthatn a helyzetet, ha szmolnunk kellene pldul azzal is, hogy lehetnek dikok, akik nem ltez trgybl kaptak osztlyzatot. (Ilyen nem lehet a MITHALLGAT defincija miatt.) Gondot okozhat mg, ha egy hallgat tbb tantrgybl is ugyanattl az oktattl kapta az osztlyzatt. Ebben az esetben a kivlasztsi listt ki kell bvtennk pl. a tmegnev oszloppal. 7. Plda az UNIO alkalmazsra.

rassuk ki sajt s SQL30 TANTARGY tblzatbl a tantrgyak neveit (TMEGNEV) s oktatit (OKTATO). Tntessk fel azt is, hogy az adat melyik tblzatbl szrmazik. Az eredmnyt rendezzk tantrgyak, majd oktatk szerint. Ezen bell elbb a sajt adatunk jelenjen meg. Utasts: select tmegnev, oktato,'SAJT' as TULAJ from tantargy UNION ALL select tmegnev, oktato,'SQL.30' as TULAJ from sql30.tantargy order by 1,2,3;

5-62

Eredmny: TMEGNEV --------------DB2 DB2 ORACLE ORACLE ORACLE ORACLE 8.

OKTATO -------------Quittner Quittner Quittner Quittner Valaki XYZ

TULAJ -------------SAJT SQL30 SAJT SQL30 SQL30 SAJT

Plda az INTERSECT alkalmazsra.

rassuk ki sajt s SQL30 TANTARGY tblzatbl azon tantrgyak neveit (TMEGNEV) s oktatit, amelyek azonos prostsban mindkt tblzatban szerepelnek. Az eredmnyt rendezzk tantrgyak, majd oktatk szerint. Utasts: select tmegnev, oktato from tantargy INTERSECT select tmegnev, oktato from sql30.tantargy order by 1,2; Eredmny: TMEGNEV --------------DB2 ORACLE 9. Plda nem korrellt begyazott szelektre. OKTATO -------------Quittner Quittner

Vlasszuk ki azokat a hallgatkat, akik az 12345 azonostj hallgatval azonos vfolyamra jrnak. Utasts: select * from hallgato where evf = (select evf from hallgato where hid ='12345'); Eredmny: A begyazott szelektet a rendszer csak egyszer szmolja ki. Az gy kapott, most mr llandknt kezelhet EVF rtke alapjn keresi ki a felttelnek megfelel hallgatkat. Ha nincsen ilyen azonostj hallgat (a begyazott szelekt res), akkor senkit sem vlaszt ki. 10. Plda korrellt begyazott szelektre: Tegyk fel, hogy (elgg eltlend mdon) nem ksztettnk idegen kulcsokat a MITHALLGAT tblzatban a HID hallgat azonostra. Meg akarjuk tudni, hogy van(nak)-e a tblzatban nem ltez hallgat(k) s hogy az(ok) milyen trgya(ka)t vett(ek) fel. Utasts: select hid, tid from mithallgat where not exists (select hid from hallgato where mithallgat.hid = hallgato.hid);

5-63

Eredmny: Kirja mindazon HID, TID prokat, melyet olyan azonostval rendelkez hallgatk vettek fel, akik nem szerepelnek a HALLGATO tblzatban. Itt a MITHALLGAT minden sorra vgre kell hajtani az EXISTS begyazott szelektjt, mert csak gy llapthat meg, hogy ltezik-e a msik tblzatban hozztartoz pr. 11. Plda begyazott szelekt s join egymsba konvertlsra. Az SQL30 TANTARGY tblzatbl kivlogatjuk azokat a sorokat, amelyek TID azonostja az SQL00 TANTARGY tblzatban is szerepel. Utasts-1: select * from sql30.tantargy t30 where exists (select tid from sql00.tantargy t00 where t00.tid=t30.tid); A begyazott szelektet join-nal helyettesthetjk Utasts-2: select sql30.tantargy.* from sql30.tantargy join sql00.tantargy using (tid); 5.6.3.3. Sorok trlse (DELETE) Funkcija: Sor(ok) trlse tblzatbl, nzetbl. Egyszerstett szintaxisa:

Jogosultsg: Tblzatbl akkor trlhetnk sorokat, ha az a sajt tblzatunk, vagy van r DELETE jogosultsgunk. Nzeten keresztl akkor trlhetnk a bzis tblzatbl sorokat, ha a nzet tulajdonosnak van a bzis tblzatra DELETE jogosultsga. Ezen kvl neknk is kell rendelkeznnk DELETE jogosultsggal a nzetre, ha az nem a sajt smnkban van.

Kulcsszavak s paramterek: Kulcssz vagy paramter DELETE, FROM tulajdonos tblzat | nzet WHERE felttelek Jelentse Ktelez kulcsszavak. Megadjk, milyen utasts kerl vgrehajtsra. A tblzat vagy nzetet tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt objektumunk. Innen kell a kivlasztott sorokat trlni. Nzet esetn a bzis tblzat sorai trldnek. Elhagyhat kulcssz. Jelzi, hogy csak az utna kvetkez felttelnek megfelel rekordokra rvnyes az utasts. Lersukat az SQL feltteleknl talljuk. (ld. 5.3.4.5. pont)

5-64

Megjegyzsek: Ha nem adjuk meg a WHERE klauzult, akkor minden sort trlnk. Az res tblzat megmarad, gy abba jra vihetnk be adatokat. (A DROP TABLE illetve a DROP VIEW utasts nem csak az adatokat, hanem a teljes tblzatot/nzetet is trli. gy abba csak akkor vihetnk be jra adatokat, ha ismt ltrehozzuk.) Ha megadjuk a WHERE klauzult, akkor csak azokat a sorokat trljk, amelyek a kivlasztsi felttel(ek)nek megfelelnek. Azokat a sorokat, amelyekre idegen kulccsal hivatkozunk csak akkor lehet trlni, ha ezt kln engedlyeztk (ON DELETE CASCADE vagy SET NULL), vagy az aktulis adatokban nincsen rjuk rvnyes hivatkozs, ld. 5.14. tblzat:. pont). Amg nem adtunk COMMIT-ot vagy ROLLBACK-et (ld. 5.6.4. pont) s nem dolgozunk AUTOCOMMIT ON-nal, az sszes trlst visszavonhatjuk.

Pldk: 1.

Trlni akarjuk a MITHALLGAT tblzat minden sort. Utasts: delete from mithallgat; Eredmny: Trli a tblzat minden sort.

2.

Trlni akarjuk a MITHALLGAT tblzatbl az 12345 azonostj hallgat minden adatt. Utasts: delete from mithallgat where hid='12345'; Eredmny: Trli a tblzatbl az 12345 azonostj hallgat minden sort.

3.

Trlni akarjuk HALLGATO-bl azokat a hallgatkat, akik egy tantrgyat sem vettek fel. Utasts: delete from hallgato where not exists (select hid from mithallgat where mithallgat.hid=hallgato.hid);

Eredmny: Egyenknt vgigmegy HALLGATO minden sorn. Megnzi, hogy az adott hid-vel egyez ltezik-e MITHALLGAT-ban s ha nem, akkor trli HALLGATO-bl az adott sort. 5.6.3.4. Sorok mdostsa (UPDATE) Funkcija: Meglv sor(ok) mdostsa tblzatban, nzetben. Egyszerstett szintaxisa:

5-65

ahol a set utasts kiegszts:

Jogosultsg: Tblzatban akkor mdosthatunk sorokat, ha az a sajt tblzatunk, vagy van r UPDATE privilgiumunk. Nzeten keresztl akkor mdosthatunk a bzis tblzatban sorokat, ha a nzet tulajdonosnak van a bzis tblzatra UPDATE privilgiuma. Ezen kvl neknk is kell rendelkeznnk UPDATE privilgiummal a nzetre, ha az nem a sajtunk.

Kulcsszavak s paramterek Kulcssz vagy paramter UPDATE tulajdonos tblzat | nzet oszlop Jelentse Ktelez kulcssz. Megadja, milyen utasts kerl vgrehajtsra. A tblzat vagy nzet tulajdonosnak a neve. Ha nem adjuk meg, akkor az a sajt objektumunk. Ebben kell a kivlasztott sorokat mdostani. Nzet esetn a bzis tblzat sorai mdosulnak. Annak az oszlopnak a neve, amelyiknek az rtkt mdostjuk. Azoknak az oszlopoknak az rtke, amelyeket nem soroltunk fel a SET klauzulban vltozatlan marad. Minden oszlopra pontosan egy rtket szolgltat. A kivlasztsi-lista n-edik elemnek rtke lesz az n-edik oszlop mdostott rtke. ltalban egy oszlop vagy egy lland (literl). Pontos lerst az SQL kifejezseknl talljuk (ld. 5.3.8. pont). Elhagyhat kulcssz. Jelzi, hogy csak az utna kvetkez felttelnek megfelel rekordokra rvnyes az utasts. Lersukat az SQL feltteleknl talljuk (ld. 5.3.4.5. pont)

begyazott szelekt kifejezs WHERE felttelek Megjegyzsek:

Egy UPDATE-tel tbb oszlop s tbb sor is mdosthat. Ha nem adjuk meg a WHERE klauzult, akkor minden sort mdostunk. Ha megadjuk a WHERE klauzult, akkor csak azokat a sorokat mdostjuk, amelyek a kivlasztsi felttel(ek)nek megfelelnek. Nem tudjuk mdostani az oszlopot s hibajelzst kapunk, ha a mdostott rtk nem felel meg az oszlop adattpusnak, (pldul tl nagy szm vagy tl hossz 5-66

Pldk: 1.

jelsorozat), vagy ellentmond valamilyen integritsi felttelnek (pl. egyedi index, idegen kulcs nem megengedett mdostsa). Nem lehet mdostani csak olvashat nzetben. Ha a mdosthat nzetet CREATE VIEW ... WITH CHECK OPTION-nal definiltunk, akkor csak olyan rtkre mdosthatunk, amelyik megfelel a nzet defincijnak (lsd 3. plda). Ha nem gy definiltuk, akkor mdosthatunk a bzis tblban a nzet feltteleit nem teljest rtkekre is. Ezeket termszetesen nem ltjuk a nzetben. Amg nem adtunk explicit COMMIT-ot vagy ROLLBACK-et, (ld. 5.6.4. pont) addig az sszes mdostst visszavonhatjuk.

Javtani akarjuk a tanulmnyi statisztikt. Az sszes adatbzis tantrgyat felvett hallgatnak (tid = 'AB'), akinek 50 alatt van a GYAKPONT pontszma 50-re nveljk a pontszmt. Utasts: update mithallgat set gyakpont = 50 where tid = 'AB' and gyakpont < 50;

Eredmny: Megvltoztatja 50-re GYAKPONT rtkeit azokban a rekordokban, ahol az 50-nl kevesebb volt s a tantrgy azonostja AB volt. Azoknl a hallgatknl, akiknl GYAKPONT rtke NULL rtk volt az nem vltozott! Ha ezeket is mdostani akarjuk, t kell rni a felttelt: where tid = 'AB' and (gyakpont < 50 or gyakpont is null); 2. Minden hallgatnak, aki nem jelesre vizsgzott eggyel feljavtjuk az eredmnyt, ha gyakorlati pontjainak szma legalbb hszszorosa az elrt vizsgaeredmnynek s oktatja Quittner volt. (Pl. a kzepes (3) helyett jt (4) kap, ha gyakorlati pontjainak szma elrte a 60-at (=3*20). Utasts: update mithallgat set osztalyzat = osztalyzat + 1 where osztalyzat < 5 and gyakpont > = osztalyzat * 20 and tid in (select tid from tantargy where upper(oktato) like '%QUITTNER%'); Mivel nem tudjuk pontosan, hogyan van az oktat neve rva, lehet csak nagy kezdbetvel vagy csupa nagybetvel, llhat eltte pldul Dr, utna lehet mg a keresztneve is , ezrt hasznljuk a LIKE s az UPPER fggvnyeket. 3. Az EVFOLYAM_4 defincija: create view evfolyam_4 as select * from hallgato where evf = 4 with check option constraint con_evf_4; Utasts: update evfolyam_4 set evf = 5;

5-67

Eredmny: Hibs! A nzetet WITH CHECK OPTION-nal definiltuk s evf = 5 ellentmond a kivlasztsi felttelnek. Hibazenetet kapunk! 5.6.3.5. Sorok bevitele (INSERT) Funkcija: Sor(ok) bersa tblzatba, nzetbe. Egyszerstett szintaxisa:

Jogosultsg: Csak a sajt tblzatunkba/nzetnkbe rhatunk be sorokat, vagy akkor, ha van r INSERT privilgiumunk. Nzeten keresztl akkor rhatunk be a bzis tblzatba sorokat, ha a nzet tulajdonosnak van a bzis tblzatra INSERT privilgiuma. Ezen kvl neknk is kell rendelkeznnk INSERT privilgiummal a nzetre, ha az nem a sajtunk.

Kulcsszavak s paramterek: Kulcssz vagy paramter INSERT INTO tulajdonos tblzat | nzet oszlop Jelentse Ktelez kulcsszavak. Megadjk, milyen utasts kerl vgrehajtsra. A tblzat vagy nzet tulajdonosnak a neve. Ha nem adjuk meg, akkor a sajt objektumunk. Ebbe kell a sorokat berni. Nzet esetn a bzis tblzat sorai mdosulnak. Annak az oszlopnak a neve, amelyikbe az j sorban az j rtket berjuk. Az oszlopokat a felsorolsban vesszvel vlasztjuk szt. Azoknak az oszlopoknak az rtke, amelyeket nem soroltunk fel az alaprtelmezs lesz. Vlaszthat kulcssz. Jelzi, hogy ezutn kvetkeznek egyenknt az oszlopokba berand rtkek. ltalban egy oszlop vagy egy lland (literl). Pontos lerst az SQL kifejezseknl talljuk (ld. 5.3.8. pont). Minden egyes kifejezs megfelel a tblzat/nzet egy oszlopnak. Az n-edik kifejezs rtke lesz az n-edik oszlop rtke. Minden oszlopa megfelel a tblzat/nzet egy oszlopnak. A kivlasztsi lista n-edik elemnek rtke lesz az n-edik oszlop rtke.

VALUES kifejezs

begyazott szelekt

5-68

Megjegyzsek: Az utasts vgrehajtsakor a VALUES mindig egy sort r be. A begyazott szelekt annyi sort r be, ahnyat eredmnyl ad. Az oszlopok szma s sorrendje meg kell egyezzen a kifejezsek illetve a begyazott szelekt kivlasztsi listjban lev elemek szmval s sorrendjvel. A bert sorban az els oszlop rtke lesz az els kifejezs vagy a kivlasztsi lista els elemnek rtke, a msodik oszlop a msodik kifejezs illetve listaelem, s gy tovbb. Ha nem adunk meg oszlopot, akkor a tblzat vagy nzet minden oszlopnak rtket kell adnunk. Az rtkads sorrendje a tblzat vagy nzet oszlopainak sorrendjvel kell megegyezzen. Ha a tblzatot vagy a nzetet nem mdostottuk, ez megegyezik a CREATE TABLE illetve a CREATE VIEW utastsban az oszlopok definilsi sorrendjnek. Vagy egy oszlopot sem adunk meg, vagy minden olyan oszlopot meg kell adnunk, amelyikbe rtket visznk be. Ha a felsorolsban valamelyik oszlopot nem adjuk meg, akkor annak rtke az alaprtelmezett (default) illetve NULL rtk lesz az jonnan bevitt sorban. Mindenkppen rtket kell adnunk azoknak az oszlopoknak, amelyeket NOT NULL-knt definiltunk. Az utasts nem hajtdik vgre, azaz nem tudjuk bevinni a sort s hibajelzst kapunk, ha a beviend rtk nem felel meg az oszlop adattpusnak, (pldul tl nagy szm vagy tl hossz jelsorozat), vagy ellentmond valamilyen integritsi felttelnek (pl. egyedi index, idegen kulcs, nem megengedett rtk). A hibazenetben ltalban megjelenik az oszlop s az integritsi felttel neve. Ha a begyazott szelekt olyan sort vlaszt ki, amelyet brmilyen okbl nem lehet bevinni, akkor az utasts nem hajtdik vgre. A bevitel lell, az addig bert sorok is trldnek s hibajelzst kapunk. Teht minden vagy semmi. Vagy az sszes kivlasztott sor berdik vagy egy sem. Ha a nzetet WITH CHECK OPTION-nal definiltuk, akkor a nzeten keresztl csak olyan rtkek vihetk be, amelyek megfelelnek a nzet definilsi feltteleinek (lsd 4. plda). Ha nem gy definiltuk, akkor bevihetnk a bzis tblba a nzet feltteleit nem teljest adatokat is. Ezeket termszetesen nem ltjuk a nzetben. Nagy adatmennyisg ktegelt (batch) zemmdban val bevitelhez a fejlettebb adatbzis-kezel rendszerek specilis segtsget nyjtanak. Ilyen pldul az ORACLE-ben az SQL*loader, vagy az UDB/DB2-ben a LOAD szolgltat program. Ezek hasznlata ersen rendszerfgg, ismertetsk meghaladja ennek a knyvnek a kereteit.

Pldk: 1. Adatokat akarunk egyenknt berni a HALLGATO tblzat minden oszlopba. Utasts: insert into hallgato values('Kiss', 'Elek','10000','1982-03-31', 1, user); Eredmny: Ha mg nem volt 10000 azonostj hallgat, akkor egy j sor kerl be a tblzatba ezekkel az adatokkal. Az SZDATUM szletsi dtumot az alaprtelmezett formban kell megadnunk. A user fenntartott SQL sz, rtke az aktulis felhasznl bejelentkezsi azonostja. 5-69

Ha mr volt 10000 azonostj hallgat, akkor hibazenetet kapunk s a HALLGATO tblzat vltozatlan marad. 2. Adatokat akarunk egyenknt berni a hallgat tblzatba. Csak a hid , vnev , knev oszlopoknak adunk rtket. Miutn felsoroljuk az oszlopokat, nem ktelez ezeket a definilsi sorrendben megadnunk. Csak arra kell gyelnnk, hogy a VALUES rtkei is ugyanebben a sorrendben legyenek. Utasts: insert into hallgato(hid,vnev,knev) values (10001,'Nagy','Ferenc'); Eredmny: Ha mg nem volt 10001 azonostj hallgat, akkor egy j sor kerl be a tblzatba ezekkel az adatokkal. Az explicit meg nem adott oszlopok rtke az alaprtelmezs lesz. 3. t akarjuk venni SQL30.HALLGATO adatait. A sajt adatainkat szabvnyostva, nagy kezd betkkel, majd csupa kis betvel akarjuk trolni. Ehhez hasznljuk az initcap s a lower SQL fggvnyeket (ld. 5.5.2. pont). Utasts:(lehet, hogy hibs) insert into hallgato select initcap(lower(vnev)),initcap(lower(knev)),hid,szdatum,evf,tulaj from sql30.hallgato; Eredmny: Attl fggen, hogy volt-e a kt tblzatban azonos hid vagy minden sort tvesznk vagy egyet sem. Ennek kikszblsre egy begyazott szelekttel kiszrjk az egyez hid-ket s csak az eltrket rjuk be. Utasts (javtott): insert into hallgato select initcap(lower(vnev)),initcap(lower(knev)),hid,szdatum,evf,tulaj from sql30.hallgato h30 where not exists (select hid from hallgato h where h30.hid=h.hid); Eredmny: tvesszk SQL30 azon hallgatit, akik nem voltak a mi tblzatunkban. (Az ttekinthetsg rdekben a tblzatoknl hasznltuk a h s h30 ideiglenes neveket. Ezen a szelekten bell gy jelljk a sajt s az SQL30.HALLGATO tblzatot). 4. Az EVFOLYAM_4 defincija: create view evfolyam_4 as select * from hallgato where evf=4 with check option constraint evf_4; Utasts: insert into evfolyam_4(hid,vnev,knev,evf) values('12345', 'Gipsz','Jakab',5); Hibs! A nzetet CHECK OPTION-nal definiltuk s evf=5 ellentmond a kivlasztsi felttelnek.

5-70

5.6.4. Tranzakcivezrl utastsok (COMMIT, ROLLBACK) A tranzakcivezrl utastsok az adatkezel utastsok hatst vglegestik, vagy hatstalantjk. Amikor egy adatbzisban vltoztatsokat hajtunk vgre, azokat a rendszer mindaddig ideiglenesnek tekinti, amg azokat egy tnylegesen vagy burkoltan kiadott tranzakcivezrl utastssal nem vglegestjk, vagy vissza nem lltjuk a kiindul llapotot. Ennek az a magyarzata, hogy nincs rtelme egy olyan utastst, vagy utastssorozatot vgrehajtani, amelyik tbb sort rintene, de ezek kztt van olyan, amelyikre valamelyik utasts nem hajthat vgre, vagy valamelyik lps utn a rendszer meghibsodik. Tipikusan ilyen eset llhat el, amikor egy DELETE utastssal egyszerre tbb sort trlnnk. A tnyleges trlst egyesvel, soronknt hajtja vgre a rendszer. Ha ekkor elfordul, hogy a trlend sorok kztt van egy olyan, amelyik nem trlhet, mert pldul idegen kulccsal hivatkozunk r, akkor egy sor sem trlhet. Vissza kell lltani az eddig trlt sorokat is. De elfordulhat az is, hogy sok rekord egyedi mdostsa utn jvnk r, hogy mindegyik mdosts hibs volt s egyszeren vissza akarjuk lltani az eredeti llapotot. Gyakori eset az is, amikor egy feldolgozs csak akkor lesz eredmnyes, ha a tbb utastsbl ll tranzakci mindegyik lpse hibtlanul vgrehajtdott. Pldul egy banki tutals csak akkor tekinthet vgrehajtottnak, ha az tutal szmljrl levettk az sszeget (UPDATE), a kedvezmnyezett szmljn jvrtk (jabb UPDATE) s a pnzmozgsrt jr jutalkot rgztettk a banki nyilvntartsban (INSERT). Ahhoz, hogy az eredeti llapotot vissza lehessen lltani, a rendszer minden adatbzisbli vltoztatsrl naplt vezet. Ebben minden vltoztatshoz feljegyzi, hogy mikor, mi trtnt s hogy mit mire vagy hogyan mdostottak. A kiindul llapot visszalltsa ennek a naplnak az adatai alapjn trtnik. A tranzakcivezrl utastsokat a tranzakcit vgrehajt felhasznl adhatja ki. Hatsuk csak arra a tranzakcira terjed ki, amelyikben kiadtk. A kt leggyakrabban hasznlt tranzakcivezrl utasts a COMMIT s a ROLLBACK. A COMMIT utasts funkcija: Vglegesti az adatbzisban az utols vglegestsi pont ta kiadott vltoztatsokat. Egyszerstett szintaxisa:

A ROLLBACK utasts funkcija: Visszalltja az adatbzist az utols vglegestsi pontban rvnyes llapotba. Az azutn vgrehajtott vltoztatsokat rvnytelenti. Egyszerstett szintaxisa:

Vglegestsi pontnak szmt: az interaktv SQL session (ls) vagy a program kezdete s vge, COMMIT vagy ROLLBACK utasts, az adatbzishoz val csatlakozs (CONNECT), AUTOCOMMIT ON belltsa esetn minden SQL utasts vge,

5-71

az adatler utastsok (CREATE , DROP ) vgrehajtsa ltalban automatikusan egy-egy COMMIT utasts vgrehajtst is jelentik az utasts elkezdse eltt s az utasts befejezse utn.

Megjegyzsek: A COMMIT s a ROLLBACK csak a sajt sessionnkben vagy az ugyanabban a programban lefutott utols tranzakci(k)ban vgrehajtott vltoztatsokat vglegesti illetve rvnytelenti. Lehetsgnk van minden egyes SQL utasts utn a vltoztatsok azonnali, automatikus vglegestsre. Ehhez AUTOCOMMIT ON zemmdra kell belltani az adatbzis-kezel rendszert. Egy SQL session (ls) vagy program kt vglegestsi pont kzti rszt logikai munkaegysgnek vagy tranzakcinak nevezzk. Ha egy munkaegysg abnormlisan fejezdik be, akkor az automatikus ROLLBACK-et jelent. Amg nem adtunk ki COMMIT-ot vagy ROLLBACK-et, addig msok nem lthatjk a logikai munkaegysgben vgrehajtott vltoztatsokat. Helyette vagy az utols vglegestsi pontkor rvnyes adatokat ltjk (pl. ORACLE), vagy meghatrozott idej vrakozs utna feldolgozsuk hibajelzssel befejezdik (pl. UDB/DB2). Amg nem adtunk ki COMMIT-ot vagy ROLLBACK-et, addig msok nem vltoztathatjk a logikai munkaegysgben megvltoztatott rekordjainkat. Ilyenkor a feldolgozsuk vagy hibajelzssel abnormlisan befejezdik, vagy vr, amg mi nem hozunk ltre egy vglegestsi pontot. Ez prhuzamos munknl problmt okozhat (ld. 8.2. alfejezet). Ha nem automatikus COMMIT-tal dolgozunk (AUTOCOMMIT OFF), akkor is adjunk ki rendszeres idkzkben COMMIT-ot. Ezzel kevsb fogjuk gtolni msok munkjt, akik ugyanazokkal az adatokkal dolgoznnak. Tovbbi rv, hogy ha a mi feldolgozsunkban valami baj trtnne s abnormlisan lellna, akkor kevesebb munknk veszik krba. A tranzakcivezrl utastsok kz tartozik a SAVEPOINT utasts is. Ezzel visszalltsi pontot helyezhetnk el az adatbzisban. Egyszerstett szintaxisa:

A ROLLBACK TO VISSZALLITSI_PONT utastssal adatbzisnak az ebben az idpontban rvnyes llapott (ld. 2. plda). Pldk: 1.

visszallthatjuk

az

Annak, aki nem vizsgzott le, automatikusan elgtelent akarunk adni. (A MITHALLGAT tblzat OSZTALYZAT oszlopt mdostjuk). Utastsok: commit; update mithallgat set osztalyzat = 1 where osztalyzat is null; Rjttnk, hogy ez nem helyes s szeretnnk visszalltani az eredeti llapotot. 5-72

jabb utasts: rollback; Eredmny: Akinek nem volt osztlyzata , annak tovbbra sem lesz. 2. Visszalltsi pontokat helyeznk el az adatbzisban. Utastsok: commit; insert into ... savepoint vissza_1 ; select ... update ... savepoint vissza_2 ; delete from ... rollback to savepoint vissza_2; Eredmny: Az INSERT s az UPDATE eredmnye megmarad, de a DELETE-tel trlt sorok visszardnak. (A ROLLBACK TO SAVEPOINT vissza_1 hatsra az INSERT hatsa mg rvnyben maradt volna, mg ROLLBACK esetn egy vltoztats sem maradna meg.) 5.7. SQL utastsok beptse programokba Az SQL nyelv hasznlhat nll, interaktvan mkd adatbzis-kezel rendszerekben, de bepthet magas szint programozsi nyelvekbe is, Napjainkban a leggyakoribb befogad nyelv (host language) a COBOL, C, C++ s a Java. De pldul az ORACLE kifejlesztett egy specilis nyelvet kifejezetten adatbzis alkalmazsok szmra (PL/SQL), s az adatbzis kezelsre az ORACLE-t hasznl programok zme ezen a nyelven rdott. A programba a program feladatnak elvgzshez szksges utastsok mell az SQL hasznlathoz beptnk: SQL utastsokat. Ezekkel hatrozzuk meg, hogy mi trtnjen az adatbzisban (ld. 5.6. alfejezet). host vltozkat. Ezek a programban olyan specilis vltozk, amelyekbe az SQL az adatbzisbl val beolvassnl beviszi az adatbzisban lv rtket, kirskor pedig kirja bellk a vltoz aktulis rtkt az adatbzisba. A host vltozkat s hasznlatukat az. 5.7.3. pontban trgyaljuk. SQL kommunikcis terletet. Ebben az adatbzis-kezel rendszer az SQL utastsok vgrehajtsnak eredmnyessgt illetve az esetleges hiba okt jelzi a programnak, hogy az ennek kirtkelse utn dntsn a feldolgozs tovbbi menetrl (ld. 5.7.2. pont). utastsokat, melyekkel az SQL utastsok vgrehajtsakor bekvetkez elre ltott s az elre nem lthat rendkvli esemnyeket kezeljk. Ezeket is az 5.7.2. pontban ismertetjk. 5.7.1. SQL utastsok csoportostsa Az interaktvan hasznlhat SQL utastsok programbl is kiadhatk ugyanabban a formban. Az adatkezel utastsoknl azonban a WHERE felttelek kibvthetk a WHERE 5-73

CURRENT OF CURSOR felttellel, a SELECT utastsnak pedig specilis formjt kell hasznlnunk, Ezeket az 5.7.4. pontban, a kurzor hasznlatnl trgyaljuk. Vannak olyan SQL utastsok, amelyek csak programbl adhatk ki. Ezek kzl a legfontosabbak: BEGIN DECLARE SECTION s END DECLARE SECTION, CLOSE s OPEN, DECLARE, EXECUTE s EXECUTE IMMEDIATE, FETCH, INCLUDE, PREPARE, WHENEVER. A programba bepthet SQL utastsokat tbbfle mdon is csoportosthatjuk. Az egyik lehetsges csoportosts az albbi: statikus SQL utastsok, dinamikus SQL utastsok, nem vgrehajthat utastsok. A statikus SQL utastsoknl mr a program megrsakor tudjuk, hogy milyen adatbzis objektumokkal milyen mveletet akarunk elvgezni (pl. j sorokat runk be a HALLGATO tblzatba). Legfljebb egyes paramterek aktulis rtkt kapcsolja a vgrehajtskor a rendszer a programbeli host vltozkhoz (pl. az egyes oszlopok rke az jonnan bert sorban). Az adatbzis adatainak elrshez szksges (optimalizlt) uta(ka)t a programmal egytt hozzuk ltre s nll elrsi csomagknt illetve tervknt (package, plan) hozzkapcsoljuk a programhoz. ltalban ekkor hatrozzuk meg a programban hasznlt objektumok tulajdonost is. Ez az elrsi t fggetlenl az adatbzisban trtnt vltozsoktl egszen addig rvnyben marad, amg a programnak az adatbzissal kommunikl rsznek szerkezett nem mdostjuk, vagy valamilyen ok miatt (pl. megsznt az elrshez felhasznlt index) a generlt elrsi t nem hasznlhat tbb. A dinamikus SQL utastsoknl a program ltrehozsakor mg nem ismerjk az utastst, vagy olyan fontos paramtere (pl. a tblzat neve) hinyzik, hogy nem lehet az elrsi utat meghatrozni. Az utasts pontos formja csak futskor derl ki, ezrt az adatok elrsi mdjt a rendszer minden alkalommal dinamikusan, a program futsakor llaptja meg. Ez idbe kerl, ezrt az ilyen utastsokat tartalmaz programok vgrehajtsi ideje ltalban hosszabb, minthogyha ezeket az utastsokat statikus formban adtuk volna meg. A f ok azonban, amirt a dinamikus SQL utastsok hasznlatt zemszeren mkd adatbzisokban nem engedlyezik az, hogy ilyenkor az zemeltets nem tudja ellenrizni a program elindtsakor, hogy mi trtnhet az adatbzisban. Ezrt elmletileg brmilyen szp s rdekes lehet gyakorlati mellzttsge miatt a dinamikus SQL utastsokkal a knyvnkben tovbb nem foglalkozunk. A nem vgrehajthat SQL utastsok a program fordtshoz, vagy nem az adatbzishoz kzvetlenl kapcsold mveletek elvgzshez (pl. mi a teend, ha egy trlend vagy mdostand rekordot sem talltunk) adnak tmutatst. Az SQL utastsok egy msik csoportostsi mdja az, hogy ignyelnek-e kurzort vagy sem. Ennek az a magyarzata, hogy az SQL adatkezel mveletek egyszerre tbb rekordra is vonatkozhatnak. Egy SELECT pldul akrhny sort kivlaszthat. Ezzel ellenttben a hagyomnyos programnyelvek egyszerre csak egy rekordot tudnak feldogozni. Ezt az ellentmondst hidalja t a kurzor (ld. 5.7.4. pont), ami megmutatja, hogy az SQL ltal rendelkezsre bocstott rekordok kzl most ppen melyikkel foglalkozzon a befogad program. Mskppen kell azokat az utastsokat felpteni, amelyekben szksg lehet kurzorra. 5-74

5.7.2. SQL programok elksztse Az SQL utastsokat is tartalmaz magas szint nyelven megrt program elksztse s feldolgozsa a kvetkez lpsekbl ll: az SQL utastsok felismerse s az utastsnak a megfelel szubrutin behvsval val helyettestse (prekompills, elfordts), a forrsprogram fordtsa s szerkesztse, az optimalizlt elrsi utak meghatrozsa s a programhoz val hozzcsatolsa (BIND), futtats. A folyamatot az 5.1. brn lthatjuk.

5.1. bra:

SQL program elksztsnek s feldolgozsnak fbb lpsei.

Ahhoz, hogy az SQL elfeldolgoz (prekompiler) felismerje az SQL utastsokat, a forrsprogramban jelezni kell minden egyes SQL utasts elejt s vgt. Mindent, ami ezek kztt van a prekompiler SQL utastsnak tekint. Szintaktikusan ellenrzi, rtelmezi, majd talaktja a befogad nyelv utastsaiv. Ami viszont ezeken kvl van, azt vltozatlanul hagyja. Ezt, az SQL mr talaktott utastsaival egytt a forrsnyelvi fordtprogram fogja feldolgozni.

5-75

Ha a prekompiler az rtelmezs folyamn szintaktikai hibt tall, azt jelzi. Ilyenkor ltalban nem generl forrskdot a nyelvi fordt szmra sem. Az SQL utastsok megjellsnek szintaktikja fgg a befogad nyelvtl. Az utasts kezdett ltalban az EXEC SQL, a vgt pedig az END-EXEC vagy a pontosvessz (;) jelzi. Amennyiben a programba mr elre megrt SQL utastsokat akarunk beilleszteni, arra az INCLUDE SQL utastst hasznlhatjuk. Ezt a kvetkez mdon pthetjk be a programba: EXEC SQL INCLUDE a bemsoland SQL utastsokat tartalmaz fjl vagy fjlmember neve END-EXEC gy msoljuk be a programba az SQL kommunikcis terletet (SQLCA) is. Az adatbzis-kezel rendszer ebben rtesti a programot minden egyes SQL utasts elvgzse utn a vgrehajts krlmnyeirl. Ez a terlet tartalmaz egy rvid szveget, ami, ha hiba trtnt, azt azonostja, egy mezt, amelyikbe bekerl az utasts ltal bert, trlt vagy mdostott rekordok szma, figyelmeztetst estleges hibra (pl. nem tudjuk beolvasni egy oszlop rtkt, mert tl sok karakterbl ll, vagy tl nagy szm). A legfontosabb mezi azonban az SQLCODE illetve az SQLSTATE. Ezek minden SQL mvelet utn egyrtelmen jelzik a mvelet eredmnyessgt vagy hibs voltt. Mindkett rtke akkor s csak akkor 0, ha a mvelet hibtlanul hajtdott vgre. Negatv SQLCODE hibs vgrehajtst jelent s rtke utal a hiba jellegre. Pldul SQLCODE = -404 azt jelzi, hogy az adott karakterek, -406 azt, hogy az adott szm rtkes jegyei nem frnek el az oszlopban, ezrt az INSERT vagy az UPDATE mvelet (adat bevitel/mdosts) nem hajtdott vgre. Pozitv SQLCODE valamilyen klnleges, de nem okvetlenl hibt jelent esemnyt jelent. Pldul SQLCODE = +100 rtelmezse NOT FOUND, nincs ilyen rekord. (Ez kurzorral val munknl azt jelenti, hogy a feldolgozand rekordoknak a vgre rtnk). Az egyes SQLCODE rtkek jelentse rendszerenknt klnbzhet, mg az azonos SQLSTATE rtkek minden rendszerben ugyanarra a hibra utalnak. gy az SQLSTATE ellenrzse adatbzis-kezel rendszerektl fggetlen programozsi mdot knl, de trtneti okokbl mgis inkbb az SQLCODE vizsglata a gyakoribb. Termszetesen attl, hogy egy adatbzis mvelet hibs volt, attl a programunk minden tovbbi nlkl vagy egy hibazenet kiadsval folytatdhat. Attl, hogy ezer adat bevitelekor egyet nem tudtunk bevinni, nem kell lelltani a tovbbiak feldolgozst. Ugyanakkor elfordulhat az is, hogy ha egy adatot nem tudtunk hibtlanul beolvasni, akkor a tovbbi feldolgozsnak mr semmi rtelme sincs s be kell fejezni az egsz programot esetleg a program kezdetekor fennll llapot visszalltsval (ROLLBACK, ld. 5.6.4. pont). Ezrt elvileg minden SQL utasts utn meg kellene vizsglnunk az SQLCODE/SQLSTATE vltozt s a feldolgozs tovbbi menett annak rtktl kellene fggv tennnk. Ha ez az rtk 0, akkor folytatjuk a programot, ha nem az, akkor vgrehajtjuk a megfelel hibakezel rutint vagy befejezzk a feldolgozst. Ez a mdszer azonban nagyon nehzkess teszi az SQL programok rst. Egyszerbb helyette a klnleges esemnyek kezelsre szolgl WHENEVER utasts hasznlata. WHENEVER Funkcija: Programelgazs generlsa az SQL utasts hibtlan vagy hibs vgrehajtstl fggen

5-76

Egyszerstett szintaxisa:

Jogosultsg: A program ksztje brmikor kiadhatja. Kulcsszavak s paramterek: Kulcssz vagy paramter WHENEVER NOT FOUND SQLERROR SQLWARNING CONTINUE GO TO program_cmke STOP DO eljrs hvs Jelentse Ktelez kulcssz. A programszvegben innentl rvnyesl az utasts hatsa. Vlaszthat kulcssz. Akkor igaz a felttel, ha nincs a felttelnek megfelel rekord, vagy a kurzorral val feldolgozs vgre rtnk. (SQLCODE = +100, SQLSTATE = 02000) Vlaszthat kulcssz. Akkor igaz a felttel, ha az SQL mvelet hibval fejezdtt be (SQLCODE < 0). Vlaszthat kulcssz. Akkor igaz a felttel, ha olyan esemny kvetkezett be, ami esetleg hibt okozhat. (SQLCODE > 0 de <> 100). Vlaszthat kulcssz. Ha igaz a felttel, akkor a program a kvetkez utastssal folytatdik. Ha egyltalban nem adtunk meg WHENEVER-t, akkor ez az alaprtelmezs. Vlaszthat kulcssz. Programelgazs generldik. A felttel teljeslse esetn az itt megadott cmkn folytatdik a program. Vlaszthat kulcssz. A program befejezdik. Ez egyben implicit ROLLBACK-et is jelent. Vlaszthat kulcssz. Ha igaz a felttel, akkor a program az utna specifiklt eljrs vagy szubrutin hvsval folytatdik. Formja fgg a befogad programnyelvtl. Meghatrozza a vgrehajtand eljrst/szubrutint s annak paramtereit.

Megjegyzsek: Ha egy esemnyre nem adtunk meg WHENEVER-t, akkor alaprtelmezsknt erre CONTINUE rvnyes. Ha egyltalban nem adtunk meg WHENEVER-t, akkor alaprtelmezsknt minden SQL esemnyre a CONTINUE rvnyes. Ebben az esetben a program semmilyen SQL hibt nem kezel le. Ha specilis SQL hibkat egyedi mdon kvnunk kezelni (pl. dupliklt kulcsnl a hiba miatt nem fejezzk be a programot, hanem kirjuk a hibs rekordot s tovbb

5-77

folytatjuk a feldolgozst), akkor ezeket kivesszk az ltalnos SQLERROR gbl. A specilisan kezelend SQL utasts eltt kiadjuk a WHENEVER SQLERROR CONTINUE utastst. Az SQL utasts vgrehajtsa utn egyedi hibakezelst vgznk az if sqlcode = specilisan kezelend hiba kdja then hibakezelsi eljrs else szoksos hibakezelsi eljrs utasts segtsgvel70. Vgl a WHENEVER SQLERROR eredeti formban val kiadsval a program tovbbi rszre jra visszalltjuk a szokvnyos hibakezelst. Ne felejtsk el, hogy a WHENEVER rvnyessgi hatlyt nem az utastsok vgrehajtsi sorrendje, hanem a program szvegben lv helye hatrozza meg (ld. 1. plda). Ha a hibakezel rszben (ami SQLERROR esetn kerl vgrehajtsra) is van SQL utasts, akkor meg kell el adni a WHENEVER SQLERROR CONTINUE utastst, mert klnben, ha a hibakezel rszben SQL hiba lpne fel, akkor a program vgtelen ciklusba kerlne.

Plda: 1. Az 5.2. brn bemutatjuk a WHENEVER hasznlatt. Program kezdete EXEC SQL. WHENEVER NOT FOUND GO TO VGE END-EXEC. EXEC SQL. WHENEVER SQLERROR GO TO HIBA END-EXEC. program (s SQL) utastsok EXEC SQL. SQL utasts itt, ha nem tall rekordot (NOT FOUND) a VGE, SQL hiba esetn a HIBA cmre ugrik END-EXEC. program utastsok EXEC SQL. WHENEVER NOT FOUND GO TO NINCS END-EXEC. ... program (s SQL)utastsok HOSSZU-MEZO-KIVETEL. EXEC SQL. WHENEVER SQLERROR CONTINUE END-EXEC. EXEC SQL. INSERT INTO HALLGATO VALUES END-EXEC.
70

Pldinkban rszben az olvashatsg, rszben a nagy adatbzisokkal kapcsolatos munkknl val elterjedtsge miatt befogad nyelvknt (host language) a COBOL-t hasznljuk.

5-78

IF SQLCODE = - 404 GO TO HOSSZU-MEZO-HIBA. itt, ha tl sok karaktert akarunk bevinni valamelyik mezbe, akkor a HOSSZU-MEZO-HIBA cmkn, ms hiba esetn a kvetkez utasts alapjn a HIBA cmkn folytatdik a program. IF SQLCODE < 0 GO TO HIBA. VISSZA-NORMAL-HIBAKEZELESRE. EXEC SQL. WHENEVER SQLERROR GO TO HIBA END-EXEC. HOSSZU-MEZO-KIVETEL-VEGE. EXIT program (s SQL) utastsok EXEC SQL. Itt, ha nem tall rekordot (NOT FOUND) a NINCS, SQL hiba esetn tovbbra is a HIBA cmre ugrik END-EXEC. HIBA. Itt trtnik az SQL hibk lekezelse NINCS. NOT FOUND felttel egyik lekezelsi mdja (pl. sorozat feldolgozs kzben). VGE. ... NOT FOUND felttel msik lekezelsi mdja (pl. adatok beolvassnak a vgn) HOSSZU-MEZO-HIBA. ... Az oszlopba be nem fr, tl hossz karaktersorozatok lekezelse. GO TO HOSSZU-MEZO-KIVETEL-VEGE. 5.2. bra: WHENEVER hasznlata.

NOT FOUND esetn, attl fggen, hogy az a lert program melyik rszn ll utasts vgrehajtskor llt el, a VGE, vagy a NINCS cmkre ugrik a program. SQLERROR (hiba) bekvetkezsekor mindig a HIBA cmkre gazik el, kivve a kln megjellt INSERT utastsnl, ahol az oszlopba be nem fr karakter tpus adat bersi ksrlete utn a HOSSZU-MEZO-HIBA cmen folytatdik a feldolgozs. SQLWARNING (figyelmeztets) esetn, mivel erre nem adtunk direktvt, mindig az alaprtelmezssel (CONTINUE), a kvetkez utastssal folytatdik a program. 5.7.3. Host vltozk Igen rugalmatlan lenne a programunk, ha a statikus SQL utastsokat mindig csak ugyanazokkal az adatokkal tudnnk vgrehajtani. A host vltozk segtsgvel elrhetjk, hogy a statikusan megadott utasts a program futsakor meghatrozott adatokkal, a host vltozk aktulis rtkvel kerljn vgrehajtsra. Az SQL utastsokban s a program tbbi rszben is hasznlhat host vltozkat a forrsnyelvi programban kell deklarlnunk a forrsnyelv szintaktikja szerint. Tpusa meg kell feleljen annak az oszlopnak az adattpusnak, amelybe a host vltoz aktulis rtkt kirjuk, vagy ahonnan beolvassuk. A legtbb implementciban a deklarlst a BEGIN DECLARE SECTION s az END DECLARE SECTION SQL utastsok kz kell tennnk. 5-79

Lehetsg van az adatbzis tblzatok oszlopainak megfelel host vltozk deklarlsnak automatikus generlsra is. A host vltozkat a programban ugyangy hasznlhatjuk, mint a tbbi vltozt, az SQL utastsokban pedig ahol erre lehetsg van, gy, mint brmely oszlopot. Az egyedli eltrs, hogy az SQL utastson bell a nevk el egy kettspontot (:) kell rnunk. Ez jelzi az SQL prekompilernek, hogy ennek a nvnek nincsen az adatbzisban megfelelje, a befogad (host) programban van deklarlva. Az ttekinthetsg rdekben clszer az sszetartoz vltozkra s oszlopokra programban s az adatbzisban azonos neveket hasznlni, vagy ezek csak egy, az oszlopnv el tett prefixben klnbzzenek egymstl. Mint azt emltettk, az INSERT, DELETE s az UPDATE utastsok prbeszdes s programbeli formtuma megegyezik. gy pldul, ha a programban mdostani szeretnnk annak a hallgatnak a keresztnevt, akinek az azonostjt a HLG-HID programvltoz tartalmazza a HLG-KNEV aktulis rtkre, akkor azt az 5.3. brn lthat mdon tehetjk meg: rtkads HLG-HID s HLG-KNEV host vltozknak, SQL hibakezels megadsa EXEC SQL. UPDATE HALLGATO SET KNEV = :HLG-KNEV WHERE HID = : HLG-HID END-EXEC. 5.3. bra: Host vltoz hasznlata.

A host vltozt a hozz kapcsold oszlop defincijval kompatibilisen kell deklarlni. Numerikus adatokat az SQL ltalban tkonvertl, de tlcsordulsnl termszetesen hibt jelez. Karakteres megfeleltetsnl azonos hosszra kiegyenlt illetve levg. Kivtel ez all az adatbzisba val bers. Itt a host vltoz teljes tartalma be kell frjen az oszlopba. Az egyes host vltozkat kiegszthetjk egy indiktorral is. Az indiktort a programban 2 bjt hosszsg, eljeles, numerikus vltozknt kell deklarlnunk. Ilyenkor az SQL utastsok bizonyos hibk, figyelmeztetsek fellptekor nem fognak 0-tl eltr SQLCODE/SQLSTATE eredmnyt adni. A hibra, figyelmeztetsre az utasts vgrehajtsa utn az indiktor 0-tl klnbz rtke utal. Klnsen hasznos ez, ha az eredmny NULL rtket szolgltat(hat), mert ezt a hagyomnyos programnyelvekben nem tudjuk lekezeli (ld. 1. plda). Plda: 1. Meg akarjuk kapni programban azoknak a 4. ves hallgatknak a szmt s osztlyzatuk tlagt, akik az Adatbzis tantrgybl vizsgztak. Mivel az eredmny biztosan csak egy sort szolgltat, hasznlhatjuk a SELECT INTO utastst. Utasts-1: exec sql. select count(*), avg(osztalyzat) into :letszam, :atlagosztalyzat from oktatas where evf = 4 and tmegnev = Adatbzis end-exec.

5-80

Eredmny: SQLCODE=SQLSTATE=0 s a LETSZAM illetve az ATLAGOSZTALYZAT vltozk tartalmazni fogjk a keresett rtkeket, ha volt legalbb egy a feltteleknek megfelel hallgat s az le is vizsgzott. Klnben a NULL rtk programbeli kezelhetetlensge miatt SQL hibt vagy figyelmeztetst kapunk. Indiktor hasznlatval mindig SQLCODE=SQLSTATE=0 eredmnyt kapunk. Ha valamelyik eredmny NULL rtk lenne, akkor azt az indiktorban a -1 rtk mutatja. A programban kell gondoskodnunk arrl, hogy ilyen esetben mskppen dolgozzuk fel a kapott rtkeket. Az IND-ATLAGOSZTALYZAT indiktor mezt a befogad programban kell deklarlnunk. A LTSZM-hoz nem szksges indiktort hozzrendelnnk, mert ha egy rekord sem felel meg a feltteleknek, a COUNT(*) fggvny 0-t ad eredmnyl. Utasts-2: exec sql. select count(*), avg(osztalyzat) into :letszam ,:atlagosztalyzat:ind-atlagosztalyzat from oktatas where evf = 4 and tmegnev = Adatbzis end-exec. if letszam = 0 then . . . nem volt egy hallgat sem feldolgozsa. if ind-atlagosztalyzat = -1 then . . . nem szmolhat tlag feldolgozsa. 5.7.4. Kurzor hasznlata Ha biztosak vagyunk benne, hogy a kivlaszts eredmnye legfljebb egy rekord lehet, akkor programban hasznlhatjuk az 5.6.3.2. pontban trgyalt SELECT utastst a SELECT INTO formban. A kivlasztsi lista oszlopainak tartalma egyenknt az INTO klauzulban megadott host vltozkba kerl. A hagyomnyos programnyelvek egyszerre csak egy rekorddal tudnak dolgozni. Ezrt, ha a SELECT utasts tbb sort is szolgltathat, szksgnk van egy kurzorra. Ez meghatrozza, hogy a kivlasztott sorok kzl ppen melyik kerljn feldolgozsra a programban. Ahhoz, hogy a kurzorral dolgozhassunk, azt elszr definilni kell (DECLARE), a mr definilt kurzort meg kell nyitni (OPEN), r kell llni a feldolgozand sorra s azt be kell olvasni a programba (FETCH), az utols sor feldolgozsnak befejeztvel be kell zrni a kurzort (CLOSE). Ezeket a csak programban hasznlhat utastsokat az albbiakban ismertetjk. DECLARE Funkcija: Kurzor deklarlsa a befogad programban. Egyszerstett szintaxisa:

5-81

Kulcsszavak s paramterek: Kulcssz vagy paramter Jelentse DECLARE, CURSOR, FOR Ktelez kulcsszavak. Meghatrozzk, milyen utasts kerl vgrehajtsra. kurzor A deklarlt kurzor neve. WITH HOLD Elhagyhat kulcsszavak. Ha megadjuk, akkor COMMIT/ROLBACK utn megmarad a kurzor pozcija. SELECT utasts Tetszleges SELECT utasts (ld. 5.6.3.2. pont), mely nem tartalmazhat INTO klauzult. Megjegyzsek: Minden olyan SELECT utastsra, amelyik tbb sort olvashat be, definilnunk kell egy kurzort a program eljrsi rszben mg a kurzor megnyitsa (OPEN) eltt. Egy programban akrhny kurzort definilhatunk s tarthatunk nyitva, de a kurzor neve a programon bell egyedi kell legyen. A kurzor deklarlsa nem jelenti az adatok tnyleges kivlasztst s beolvasst. Ez az OPEN hatsra, a kurzor megnyitsakor trtnik meg. A COMMIT/ROLLBACK utastsok (ld. 5.6.4. pont) automatikusan bezrjk a kurzort, kivve, ha azt a WITH HOLD opcival deklarltuk. Ezrt, ha ezeket nem a kurzor feldolgozsnak a vgn, hanem kzben adjuk ki s nem adtunk meg WITH HOLD-ot, akkor a kvetkez FETCH-nl a feldolgozs az els sortl fog jra folytatdni.

OPEN Funkcija: Megnyitja a deklarlt kurzort. Egyszerstett szintaxisa:

Kulcsszavak s paramterek: kulcssz vagy paramter OPEN kurzor USING host vltoz Megjegyzsek: A kurzort, mieltt megnyitnnk, deklarlni kell. jelentse Ktelez kulcssz. Meghatrozza, milyen utasts kerl vgrehajtsra. A megnyitand kurzor egyrtelm neve a programban. Elhagyhat kulcssz. Megadsval jelezzk, hogy a programbl paramtereket adunk t a SELECT utastsnak. Ennek a megnyitskor aktulis rtkvel hajtdik vgre az utasts.

5-82

FETCH

Az OPEN hatsra a kivlasztott sor(ok) bekerlnek egy ideiglenes tblzatba. Ezt a tblzatot az SQL automatikusan kezeli. Sem a nevt, sem a mrett, sem msfle paramtert nem kell sem a programban, sem a futtatsi krnyezetben definilunk Tartalma, akrmikor is dolgozzuk fel az egyes sorait, mindig a kurzor megnyitsakor fennll llapotot jelzi. A megnyits utn a kurzor az ideiglenes tblzat els sora el mutat. Az els FETCH utasts pozcionlja az els sorra, a kvetkezk pedig mindig egy sorral tovbb lptetik. A program kezdetekor minden kurzor lezrt llapotban van. Egy lezrt kurzort brmikor s akrhnyszor megnyithatunk.

Funkcija: A kvetkez sorra pozcionlja a kurzort s berja ennek a sornak az rtkeit a host vltozkba, Egyszerstett szintaxisa:

Kulcsszavak s paramterek: Kulcssz vagy paramter FETCH, INTO kurzor host vltoz INDICATOR indiktor-vltoz Megjegyzsek: A FETCH utasts mindig a kurzorral beolvasott ideiglenes tblzat kvetkez sorra pozcionl. Az gy kijellt sorbl a kivlasztsi listval kivlasztott oszlopoknak az rtkeit beviszi az INTO klauzulban megadott host vltozkba. A kivlasztsi lista n-edik elemnek rtke lesz az n-edik host vltoz rtke. Ha ez NULL rtk is lehet, akkor jelljnk ki indiktor-vltozt is. Ez -1 lesz NULL rtk beolvassakor, amit a programban lekrdezhetnk. A kurzor ltal kijellt sort mdosthatjuk, illetve trlhetjk az UPDATE illetve a DELETE utasts WHERE klauzuljban megadott WHERE CURRENT OF kurzornv felttellel. A kurzornv nev kurzor pozcija mdosts utn vltozatlan marad. Trls utn a kzvetlenl a trlt sor utn kvetkez sor el Jelentse Ktelez kulcsszavak. Meghatrozzk, milyen utasts kerl vgrehajtsra. Ezt a kurzort pozcionlja az utasts. A kurzor aktulis pozcijnak megfelel rtk(ek) kerl(nek) be a host vltoz(k)ba. Olvashatsgot segt, elhagyhat kulcssz. Jelzi, hogy az adott host vltozhoz indiktort kapcsoltunk. Ez kapcsoldik indiktorknt az eltte megadott host vltozhoz.

5-83

mutat s egy FETCH-csel tudjuk a soron kvetkez rekordra pozcionlni (ld. 1. plda). Az ideiglenes tblzat vgt a FETCH utastsra kapott SQLCODE=100, SQLSTATE=02000 illetve WHENEVER-nl a NOT FOUND felttel bekvetkezte jelzi. Ezutn a kurzort lezrjuk (CLOSE), hogy a kurzor ltal beolvasott rekordok zrait (ld. 8.3. alfejezet) felszabadtsuk.

CLOSE Funkcija: Lezrja a megnyitott kurzort. Egyszerstett szintaxisa:

Kulcsszavak s paramterek: Kulcssz vagy paramter CLOSE kurzor Megjegyzsek: Plda: 1. A FELDOLGOZAS eljrsban feldolgozzuk az sszes MITHALLGAT rekordot, ahol a hallgat egy vizsgakteles trgybl (VIZSGA = I a TANTARGY tblzatban) levizsgzott. Ezzel egyidejleg trljk MITHALLGAT-bl azokat a rekordokat, amelyek azokra a hallgat-tantrgy (HID-TID) prostsokra vonatkoznak, melyekbl ktelez a vizsga, de a hallgat nem vizsgzott le. Ezt, azaz OSZTALYZAT NULL rtkt a hozzkapcsold indiktor -1 rtke jelzi. Az ehhez szksges programrszek (COBOL nyelven) az 5.4. brn lthatak: DATA DIVISION. * HOST VLTOZK DEKLARLSA EXEC SQL BEGIN DECLARE SECTION END-EXEC. 01MTH-REKORD. 05 MTH-HID 05 MTH-TID 05 MTH-GYAKPONT 05 MTH-OSZTALYZAT Csak megnyitott kurzort zrhatunk be. A bezrskor megszntetjk a kurzor ltal a beolvasott rekordokra automatikusan rhelyezett zrakat is. Ha lezrt kurzorra FETCH utastst adunk ki, hibajelzst kapunk. Jelentse Ktelez kulcssz. Meghatrozza, milyen utasts kerl vgrehajtsra. Ez a kurzor kerl bezrsra.

PIC X(5). PIC X(4). PIC 999 COMP-3. PIC 9 COMP-3,

5-84

01 TNT-REKORD. 05 TNT-TID PIC X(4). 05 TNT-TMEGNEV PIC X(12). 05 TNT-OKTATO PIC X(15). 05 TNT-ORASZAM PIC 9 COMP-3. 05 TNT-VIZSGA PIC X. ... * INDIKTOR VLTOZK 77 IND-MTH-OSZTALYZAT PIC S9(4) COMP-4. 77 IND-TNT-OKTATO PIC S9(4) COMP-4. ... EXEC SQL END DECLARE SECTION END-EXEC. ... PROCEDURE DIVISION. * SQL HIBAKEZELS EXEC SQL WHENEVER SQLERROR GO TO HIBA END-EXEC. EXEC SQL WHENEVER SQLWARNING CONTINUE END-EXEC. * KURZOR DEKLARLSA. EXEC SQL DECLARE BEOLVAS CURSOR FOR SELECT HID, TID, GYAKPONT, OSZTALYZAT, TMEGNEV,OKTATO FROM MITHALLGAT JOIN TANTARGY USING (TID) WHERE VIZSGA=I ORDER BY HID,TID END-EXEC. ... * KURZOR MEGNYITSA EXEC SQL OPEN BEOLVAS END-EXEC. * KIVLASZTOTT SOROK BEOLVASSA.. PERFORM FELDOLGOZAS THRU FELDOLGOZAS-VEGE UNTIL SQLCODE = 100. * KURZOR LEZRSA. EXEC SQL CLOSE BEOLVAS END-EXEC. ... FELDOLGOZAS.

5-85

EXEC SQL FETCH BEOLVAS INTO :MTH-HID,: MTH-TID,:MTH-GYAKPONT, MTH-OSZTALYZAT:IND-MTH-OSZTALYZAT, MTH-TMEGNEV,:MTH-OKTATO:IND-TNT-OKTATO END-EXEC. * HA NINCS OSZTALYZAT, TRLS, KLNBEN A REKORD FELDOLGOZSA. IF IND-MTH-OSZTALYZAT = -1 THEN EXEC SQL DELETE FROM MITHALLGAT WHERE CURRENT OF BEOLVAS END-EXEC ELSE norml feldolgozs FELDOLGAZAS-VEGE. EXIT. ... * SQL HIBK KEZELSE. HIBA. SQL hibakezels. 5.4. bra: 5.8. Ellenrz krdsek 1. 2. 3. Mirt nem clszer egy tblzat jellemzit a CREATE TABLE utasts szvege alapjn ellenrizni? Mirt nincsen ALTER VIEW utasts? Mi helyettesti ezt? Az igen sok adatot tartalmaz HALLGATO tblzatra a felsoroltak kzl melyik indexeket clszer ltrehozni: I_HALLG_NEV (VNEV+KNEV egyttesen), I_HALLG_VNEV (VNEV), I_HALLG_NEV (VNEV,KNEV), I_HALLG_KNEV (KNEV), I_HALLG_NEV (KNEV,VNEV) (zrjelben az index oszlopai), ha a tblzatban gyakran keresnk a) b) c) d) e) f) 4. csak nv szerint, csak vezetknv szerint, csak vezetk s keresztnv szerint egyttesen, vezetk s keresztnv szerint egyttesen vagy vezetknv szerint, csak keresztnv szerint, vezetk s keresztnv szerint kln-kln s egyttesen is. Kurzor helyzete alapjn val feldolgozs.

Ha egy tblzaton tbb oszlopot vagy oszlop kombincit is kijellhetnk elsdleges kulcsnak, akkor mit kell tennnk az adatok integritsnak biztostsra az elsdleges kulcsnak nem kijellt oszlopokkal? Igaz-e, hogy a kivlasztsi listban mindig szerepelni kell annak az oszlopnak, amelyikre a) b) c) az eredmnyt rendezni akarjuk, a WHERE klauzulban felttelt adunk, a GROUP BY klauzulban csoportokat kpeznk.

5.

5-86

6.

Mirt clszer a nzetet ellenrzssel (WITH CHECK OPTION) ltrehoznunk? Csak olvashat nzetnl mirt nincs erre szksgnk? Szrmazik-e abbl htrnyunk, ha a csak olvashat nzetet is ellenrzssel definiljuk? Idegen kulccsal sszekttt tblzatokban a hivatkoz vagy a hivatkozott tblzatba kelle elbb bevinnnk az adatokat? Mikor s hogyan trhetnk el ettl, de mirt nem clszer ez? Meg akarjuk llaptani a legidsebb hallgat(k) sszes adatt. Mirt hibs az albbi SELECT utasts: select vnev,knev,hid,max(szdatum), evf from hallgato; Hogyan kellene trni ezt az utastst?

7.

8.

9.

Igaz-e, hogy ha a SELECT utasts eredmnyt tbb oszlop szerint rendezzk, akkor az mindegyik oszlopra vagy csak nveked, vagy csak cskken lehet?

10. DATE tpus adatokat milyen rendezettsgben clszer megjelenteni? Igaz-e ez, ha az adatokat karakterknt definiltuk, de rvnyes dtum formban visszk be? 11. Mi a klnbsg a WHERE utasts kiegszts nlkl kiadott DELETE FROM TABLE s a DROP TABLE utastsok kztt? Mikor melyiket clszerbb hasznlni?

5-87

6. ADATBZIS-KEZEL RENDSZEREK A GYAKORLATBAN


Ebben a fejezetben kt konkrt rendszerben, a Microsoft ACCESS-ben s a PHP MySQL-ben bemutatjuk, miknt tudjuk megvalstani a 4.2. alfejezetben megtervezett adatmodellre pl adatbzist. Ehhez ismertetjk a kt rendszer legfontosabb jellemzit, majd ltrehozzuk segtsgkkel az adatbzist. 6.1. MS ACCESS A Microsoft Office programcsomag rsze az ACCESS adatbzis-kezel. Knyvnkben a jelenlegi legfrissebb verzit, az ACCESS 2003-at mutatjuk be, de az elmondottak zme rvnyes a korbbi verzikra is s nagy valsznsggel rvnyes lesz a kvetkez verzikra is. A program szmos lehetsget knl kezd s gyakorlottabb felhasznlk szmra adatbzisok felptsre s az azokban lv adatok kezelsre is. Emellett sok olyan felhasznlbart lehetsggel is rendelkezik, ami nem illik bele a relcis modell logikjba. Ezek kz tartoznak a klnfle automatizmusok s varzslk, amik megknnytik a munkt, de nem gondolkodnak helyettnk. Knyvnk, mr csak terjedelmi okok miatt sem trekedhet teljessgre. Nem mutatjuk meg a program minden lehetsgt, inkbb treksznk egy pldn keresztl azokat a mdszereket bemutatni, amelyek segtsgvel biztonsggal ltre tudunk hozni egy j, s mdostani tudunk egy korbban jl megtervezett adatbzist. A mintapldnk a 4.2. alfejezetben ismertetett plda lesz nhny programspecifikus mdostssal. 6.1.1. Szerkezet, fellet, kezels

6.1. bra:

Az ACCESS kezdablaka

6-1

Az ACCESS ablaknak felptse az Office programcsomag tbbi programjhoz hasonl, de szmos specifikus elemet tartalmaz. A mensor s az eszkztrak is dinamikusan vltoznak aszerint, hogy ppen mivel dolgozunk. Amg egyetlen adatbzisunk sincs megnyitva, addig a mensor csak a szoksos menket tartalmazza: Fjl, Szerkeszts, Nzet, Beszrs, Eszkzk, Ablak, Sg. A megjelen eszkztr az Adatbzis, de csak az j adatbzis ltrehozsa, egy meglv adatbzis megnyitsa, a keress s a sg ikonok lnek. Az ablak jobb oldaln a munkaablak tallhat, melynek segtsgvel az adott szituciban leggyakrabban hasznlt feladatok vgezhetk el. A munknkhoz nem felttlenl van r szksgnk. A Nzet men segtsgvel brmikor ki- s bekapcsolhatjuk. Az adatbzis-kezel ablaka a 6.1. brn lthat. j res adatbzis ltrehozsakor azonnal meg kell mondanunk, hogy milyen nven s hova mentjk el az adatbzist. Innen kezdve minden vltozst ugyanebbe az llomnyba tudunk menteni s a ksbbiekben jra megnyitni. Ha mr ltez adatbzist nyitunk meg, akkor azzal minden, az adott adatbzisban ksztett objektumot lthatunk. Az adatbzis-kezel objektumai kln ablakokban nylnak meg a program ablakn bell. Maga az adatbzis is egy ablakban jelenik meg, melynek neve megegyezik az adatbzis nevvel. Az adatbzis ablakban szintn van eszkzsor. Ezen kvl az ablak bal oldaln tallhat kt lista. Az els lista az objektumtpusok listja, a msodik pedig az ltalunk ltrehozott csoportok listja. A csoportokba tetszlegesen sszevlogatott objektumok hivatkozsait gyjthetjk ssze. Az els listban szerepl objektumtpusok: Tblk, Lekrdezsek, rlapok, Jelentsek, Lapok, Makrk, Modulok. Egy objektumcsoportot kivlasztva az ablak jobb oldaln listban talljuk az j objektumok ltrehozsra szolgl ikonokat s a meglv objektumainkat. Brmelyiket vlasztva egy j ablakot tudunk megnyitni. Az ablakok kztt a szoksos mdokon, pldul a tlcn lv gombokkal tudunk vltani. Az ablakok kln-kln tmretezhetk, bezrhatk. Ha azonban az adatbzis ablakt zrjuk be, akkor azzal minden objektum-ablakot s magt az adatbzist is bezrjuk. A men s az eszkztrak mindig az aktv ablaknak megfelelen vltoznak. A konkrt menpontokat az egyes feladatoknl fogjuk trgyalni. Az objektumok megnyitsra klnbz nzetekben van lehetsg. Minden objektumtpusnl szerepel a tervez nzet, melyben az adott objektum szerkezett tudjuk megnzni s mdostani. Ezen kvl a tblkat s lekrdezseket adatlap nzetben, az rlapokat rlap nzetben s a jelentseket nyomtatsi kp nzetben is megtekinthetjk. Ezekre az adott pontokban visszatrnk. 6.1.2. Adatbzis tervezs Tekintsk t az adatbzis ltrehozsnak lpseit. Brmelyik adatbzis-kezel programot is vlasztjuk munknkhoz, elszr nem rt papron, vagy legalbb gondolatban megtervezni az adatbzist, amelyet ltre kvnunk hozni. Ehhez a knyv 3. s 4. fejezete nyjt segtsget. Az albbi pontokban azt tekintjk t, hogy a megtervezett adatbzist hogy tudjuk ltrehozni az ACCESS adatbzis-kezelben. Sorra vesszk a tblk, felttelek, kapcsolatok s indexek ltrehozsnak mdjait.

6-2

6.1.2.1. Tblk Tblk ltrehozsra kt alapvet mdon van lehetsgnk. Varzsl segtsgvel s tervez nzetben. A varzslval elssorban tpusfeladatoknak megfelel objektumokat llthatunk el. Elvileg lehetsg van a tblzat ltrehozsra az adatok bersval is, de ez ellentmondana annak a logiknak, hogy kettvlasztjuk a tervezst az adatkezelstl. Mivel a varzslval ltrehozott tblzatot is tervez nzetben tudjuk mdostani, a varzsl lpseit rviden tekintjk t s aztn a tervez nzetet rszletezzk. Ez a mvelet a CREATE TABLE SQL utastsnak (ld. 5.14. tblzat:. pont) felel meg. Plda Hrom tblt fogunk ltrehozni: HALLGAT, TANTRGY, MITHALLGAT. Az ACCESS magyar verzijban hasznlhatunk az objektumok elnevezsben kezetes karaktereket is, gy maradhatunk a 4.2. alfejezet pldjban hasznlt elnevezseknl. Az els lpsnk legyen a HALLGAT tbla ltrehozsa varzsl segtsgvel. A varzsl megnyitsnak lehetsges mdjai pldul a Beszrs men Tbla menpontjra megjelen j tbla ablakban a Tbla varzsl vlasztsa, vagy az adatbzis ablakban a Tblk objektumcsoportot vlasztva a jobb oldali listban a Tbla ltrehozsa varzsl segtsgvel pont vlasztsa. Brmelyiket vlasztjuk, a 6.2. brn lthat Tbla varzsl ablakhoz jutunk. Itt vlaszthatunk, hogy az zleti, vagy a szemlyes tblzatok kztt keressk meg a szmunkra megfelelt. A HALLGATK tblt az zleti lista vge fel fogjuk megtallni.

6.2. bra:

Tbla varzsl

Megjellve a megfelel tblt a lehetsges attribtumok hossz sorbl kivlaszthatjuk a szmunkra szksgeseket. A kivlasztott mezket a > nyl segtsgvel tudjuk a jobb oldali listra tenni s a < nyl segtsgvel tudjuk visszavenni onnan. Ha valamelyik mez neve nem pontosan az, amire szksgnk van, akkor lehetsgnk van az tnevezsre is a Mez tnevezse gombbal. A pldnkban lv mezk kzl csak a vezetknv, a keresztnv s a hallgati azonost szerepel a listban. Ezt a hrmat helyezzk a kivlasztott listra. A Mez tnevezse gomb segtsgvel nevezzk t ket vnev, knev s hid nvre.

6-3

A Tovbb gomb megnyomsa utn mdosthatunk a tbla nevn is. Ezt rjuk t HALLGAT-ra. Ebben a pontban dnthetjk el azt is, hogy a program nllan vlassza-e ki az elsdleges kulcsot, vagy mi adjuk meg. Ha a programra bzzuk, akkor azt a mezt fogja vlasztani, aminek a nevben eredetileg az azonost sz szerepelt. Ennek a meznek az adattpusa Szmll lesz. Mivel szmunkra szveg adattpus kell, vlasszuk azt a lehetsget, hogy mi hatrozzuk meg az elsdleges kulcsot. (Az adattpusokra kicsit rszletesebben mg kitrnk.) Ebben az esetben a megjelen ablakban egy listbl vlaszthatjuk ki a megadott mezkbl az elsdleges kulcsot, s vlasztkapcsol segtsgvel megadhatjuk, hogy Szmll, Szm vagy Szveg adattpus legyen. Vlasszuk a harmadik lehetsget (Szmok s betk, amelyeket n rok be j rekordok hozzadsakor). A Tovbb gomb megnyomsa utn minden adat rendelkezsre ll az adatbziskezelnek, hogy a tblt ltrehozza, mr csak azt kell eldntennk, hogy a ltrehozs utn mivel folytassuk a munkt. Mivel a tbla mg nem teljesen olyan, amilyenre terveztk, vlasszuk az A tblaterv mdostsval vlasztkapcsolt a Befejezs gomb megnyomsa eltt. Ha minden mezt megtalltunk volna a listban, akkor is rdemes a tblatervet megnzni, mert a varzsl elrejti ellnk az adattpusokat s egyb belltsokat, amelyeket tervez nzetben ellenrizhetnk s mdosthatunk. Ha mr ltezett volna az adatbzisban msik tblnk, a varzsl az utols lps eltt kiegszlt volna mg egy ablakkal, amelyben megadhattuk volna a ltez tblkhoz a kapcsolatokat. A kapcsolatok belltsra a 6.1.2.6. pontban trnk vissza.

6.3. bra:

A HALLGAT tbla tervez nzetben

A Befejezs gomb megnyomsa utn ltrejn a tbla az ltalunk megadott nven s azonnal meg is nylik egy j ablakban tervez nzetben. Nzzk meg, hogy a kivlasztott mezknek milyen adattpusa lett (6.3. bra) s hogy a hinyz mezket hogyan tudjuk ltrehozni. Rgtn szrevehetjk pldul, hogy a hid mez adattpusa 4 hosszsg szveg

6-4

lett, a pldnkban viszont 5 karakteren troljuk a hallgati azonostt. Ezt az albbiakban mdostani fogjuk. Az ablak fels rszben egy-egy sor felel meg egy-egy meznek. Minden meznek van neve, adattpusa s lehet lersa amelyben bvebben le lehet rni, hogy mit trolunk az adott mezben. A sorok elejn a szrke lapocskkkal lehet kijellni, hogy melyik mez az aktulis (ezeket jelllapknak hvjuk). Az elsdleges kulcsot a jelllapkn lthat kulcs szimblum jelzi ( ). A lehetsges adattpusok a kvetkezk71: Szveg: az SQL varchar, (az Oracle varchar2) tpusnak felel meg. Maximum 255 karaktert (szmot, bett, rsjelet) tud trolni. Feljegyzs: az SQL long tpusnak felel meg. 255 karakternl hosszabb szveg. Legfeljebb 65 536 karaktert tud trolni. Szm: numerikus adatok trolsra alkalmas, pontossga a megadott mezmrettl fgg. A mezmret megadst lejjebb trgyaljuk. Formjtl fgg, hogy az SQL number, integer, vagy ms numerikus adattpusnak felel-e meg. Dtum/Id: az SQL date adattpusa. Dtumot s idpontot jelent adatok trolsra alkalmas. A formtum megadst lejjebb trgyaljuk. Pnznem: numerikus adatok fixpontos trolsra alkalmas. Pontossga 15 szmjegy s 4 tizedesjegy. A szmtsok sorn nem kerekt. Szmll: automatikusan egyedi szmot r be egy-egy rekord hozzadsakor.72 Igen/Nem: az SQL boolean adattpusnak felel meg. Egy biten trol igaz vagy hamis rtket. OLE objektum: Microsoft Word vagy Microsoft Excel dokumentumok, kpek, hangok s ms programban kszlt binris adatok trolsra alkalmas. Az OLE objektumok csatolsa vagy begyazsa OLE objektum tpus mezkben lehetsges a Microsoft ACCESS tblkban. Az OLE objektumok vezrlelemek segtsgvel jelenthetk meg az rlapokon s a jelentsekben. Hiperhivatkozs: hiperhivatkozs trolsra alkalmas, maximum 64 000 karakter. Keress varzsl: segtsgvel olyan mez hozhat ltre, amely lehetv teszi, hogy a berand rtket egy listbl vlasszuk ki. Ezt a listt mi is ltrehozhatjuk a varzsl segtsgvel, vagy ha mr van msik tblnk az adatbzisban, akkor annak mezit is megadhatjuk listnak. Ha a lista tbb mezbl ll, akkor megadhatjuk, hogy melyik mez rtke kerljn trolsra a tblban. Ha csak nhny rtk kzl vlaszthatunk, akkor ez nagyon megknnyti az adatbevitelt. Az ablak als rszben mindig az aktulis mez rszletesebb tulajdonsgait lthatjuk. Hogy pontosan melyek ezek a tulajdonsgok, az attl fgg, hogy az adott mez milyen adattpus. Nzzk meg a leggyakrabban hasznlt tulajdonsgokat: Mezmret: Szveg adattpusnl a mezbe rhat karakterek maximlis szma. 1 s 255 kztti rtk. Szm adattpusnl ezzel adhatjuk meg a trolni kvnt szmok pontossgt a 6.1. tblzat alapjn. A tbbi adattpus mrete meghatrozott, gy nem llthat. A gazdasgos adattrols rdekben rdemes mindig a lehet legkisebb mezmretet vlasztani, ami mg megfelel az adatok trolsra.

71 72

Az SQL adattpusokat lsd az 5.4. alfejezetben. Ez megfelel annak, hogy a mez rtkt egy az adott tblzatra vonatkoz nll sorszmgenertor tpus (Sequence) SQL objektumbl vesszk.(ld. 5.3.6. pont)

6-5

6.1. tblzat: A Szm adattpus mezmrete Mezmret Bjt Decimlis Lers 0 s 255 kztti egsz szmok 1038-nl kisebb abszolt rtk szmok pozitv s negatv irnyban is Egsz -32 768 s +32 767 kztti egsz szmok Hossz egsz -2 147 483 648 s +2 147 483 647 kztti egsz szmok Egyszeres lebegpontos brzols 4 bjton Dupla lebegpontos brzols 8 bjton Decimlis pontossg nincs 28 nincs nincs 7 15 Trolsi mret 1 bjt 12 bjt 2 bjt 4 bjt 4 bjt 8 bjt

Tizedeshelyek: Szm s Pnznem adattpusnl megadhat a megjelenteni kvnt tizedeshelyek szma. j rtk: csak a Szmll adattpusnl adhat meg: lehet nvekv, vagy vletlenszer. Formtum: Szveg s Feljegyzs adattpusnl specilis karakterek segtsgvel megadhatjuk, hogy a bert adat milyen formtumban jelenjen meg s ; utn, hogy NULL rtk, vagy nulla hosszsg karakterlnc esetn mi jelenjen meg a cellban. A rekord tnyleges tartalmt nem vltoztatja meg, csak a megjelents mdjt. Nhny hasznlhat szimblum: @: szvegkarakter, <: minden karakter kisbets, >: minden karakter nagybets (a < s > jelek kzl csak egyet lehet alkalmazni s az az egsz karaktersorra rvnyes lesz). Pldk a 6.2. tblzatban lthatk. Dtum/Id s Szm adattpusnl egy listbl vlaszthatjuk ki a dtum s a szmformtumot. Pldul az ltalnos dtum formtum a dtumot s az idt is mutatja msodperc pontossggal s a hnapokat ktjegy szmmal jelli, a Szzalk formtum a szmot szzalkos formban kt tizedesjegy pontossggal jelenti meg. Igen/Nem adattpusnl a formtumnl adhatjuk meg, hogy mi legyen a kt rtk, ami kzl vlasztani lehet: igaz/hamis, igen/nem, be/ki. OLE objektumnl nincs ilyen tulajdonsg. 6.2. tblzat: Pldk formtum megadsra

Bellts @@-@@

Adat 1234 3 ASGH > monaco Monaco Monaco monaCO @;Nincs Monaco NULL rtk >(@@)-@@@@;Hinyzik Monaco Paris California NULL rtk

Megjelents 12-34 -3 AS-GH MONACO MONACO monaco monaco Monaco Nincs (MO)-NACO ( P)-ARIS CALI(FO)-RNIA Hinyzik

6-6

Beviteli maszk: megadhatjuk, hogy milyen formban lehessen bevinni az adatokat. A bert adatok ebben a formban kerlnek trolsra. Vlaszthatunk a beptett maszkok kzl, vagy ltrehozhatunk sajt maszkot is. A sor szln megjelen ikonra kattintva megjelenik a beviteli maszk varzsl, aminek segtsgvel bellthatjuk a kvnt maszkot, vagy ha mr gyakorlottak vagyunk, be is gpelhetjk magunktl. Feljegyzsnl, Szmllnl, Igen/Nem-nl s OLE objektumnl nincs. Pldk a 6.3. tblzatban lthatk. 6.3. tblzat: Pldk maszk megadsra

Karakter 0 9 # L ? & .,:;-/() \

Jelents szmjegy, amit ktelez megadni szmjegy, amit nem ktelez megadni szmjegy, szkz, vagy eljel bet, amit ktelez megadni bet, amit nem ktelez megadni

Plda 0000 (90)9000-000 #999 L00 ??99

Adat 1144 (30)5473-578 ( 1) 444-444 -20 2000 A11 Z02 AS99 D78 12 A11 456 12:00 9:30 gL11 AL12

brmilyen karakter, &00 amit ktelez megadni hatroljelek, amik 90:00 ebben a formban megjelennek az utna kvetkez L\L00 karakter vltozatlanul megjelenik


73

Cm: adatlap nzetben, rlapon, jelentsben az itt megadott nven szerepel a mez. Ha nem adjuk meg, akkor a mez neve egyben a cme is73. Alaprtelmezett rtk: ha semmit nem runk be, akkor ez az rtk kerl trolsra a mezben. Mindig csak az jonnan bevitt rekordokra vonatkozik, visszamenleg nem. Szmllnl s OLE objektumnl nem adhat meg. Megfelel a CREATE TABLE utasts DEFAULT paramternek. ikon segtsgvel megnyithat rvnyessgi szably74: a sor szln megjelen kifejezs-szerkeszt ablakban adhatunk meg fggvnyek s opertorok segtsgvel szablyt, felttelt arra, hogy milyen adatokat vihetnk be az adott mezbe. Rszletesebben a kvetkez pontban trgyaljuk. Szmllnl s OLE objektumnl nem adhat meg. rvnyestsi szveg: megadhatjuk, hogy ha az rvnyessgi szablynak nem megfelel adatot r be a felhasznl, akkor milyen hibazenetet kapjon. Szmllnl s OLE objektumnl nem adhat meg. Ktelez s Nulla hosszsg engedlyezse: az ACCESS megklnbzteti, hogy egy mez rtke nulla hosszsg karakterlnc, vagy NULL rtk (ld. 5.3.7.

A Cm elnevezs megtveszt lehet, Access-ben nem a memriacmet jelenti, hanem a megjelentend oszlopnevet. A knyv tovbbi rszben a Cm helyett a Nv megnevezst fogjuk hasznlni. 74 Ez megfelel az SQL-ben definilt Constraint CHECK paramternek (ld. 5.14. tblzat:. pont).

6-7

pont). Ha egy mez rtkt ktelez megadni, de a nulla hosszsg engedlyezett, akkor lehetsg van pldul a SPACE megnyomsval nulla hosszsg karakter bevitelre. A nulla hosszsg engedlyezse Szm, Dtum/Id, Pnznem s Igen/Nem-nl nem adhat meg. Indexelt: a 6.1.2.5. pontban trgyaljuk rszletesebben. Ha brmit vltoztatunk a tbla defincijn, akr egy-egy mez tulajdonsgait, akr a mezk sorrendjt, akr j mezket adunk hozz, vagy trlnk ki, el kell mentennk a tblt. Ha a mentst elmulasztannk, a tervezsbl kilpskor rkrdez a program. Menteni a szoksos mdokon tudunk: a Fjl men Ments parancsval, az eszkztr ikonjval, vagy a Ctrl+s billentykombincival. Plda 1. Mdostsuk a HALLGATK tbla meglv hrom mezjt a kvetkezknek megfelelen: Meznv Lers Mezmret Ktelez vnv Hallgat vezetkneve 25 igen knv Hallgat keresztneve 25 nem hid Hallgat azonost 5 igen Ehhez a tbla tervez nzetben mdostanunk kell ezeknek a mezknek a paramtereit. Ez valjban az SQL ALTER TABLE utasts (ld. 5.6.2.3. pont) vgrehajtst jelenti. Ha szeretnnk a mezk sorrendjt megvltoztatni (az ACCESS automatikusan az elsdleges kulcsot tette elre), akkor egr segtsgvel kijells utn vonszolssal t tudjuk helyezni a mezt. Objektum, gy tbla trlsre is az adatbzis ablakbl van mdunk. Kijelljk a trlend objektumot az adatbzisablakban s kiadjuk a trls parancsot: a Szerkeszts men Trls parancsval, az eszkztr ikonjval, vagy a Del billentyvel. Ez az SQL DROP TABLE utastsnak felel meg (ld. 5.6.2.2. pont). 6.1.2.2. Felttelek Azrt emeltk ki a felttelek megadst a tulajdonsgok kzl, mert a kifejezsszerkeszt ablak segtsgvel nem csak a tbla definilsakor tallkozhatunk s nem csak oszlopfeltteleket hatrozhatunk meg vele.75 A 6.4. brn a Kifejezs-szerkeszt ablakt ltjuk. Az ablak fels rszben van lehetsgnk a kifejezs megszerkesztsre. Ehhez hasznlhatjuk a billentyzetet, klnleges karaktereket berhatunk a beviteli doboz alatt tallhat gombokkal s beptett kifejezseket beilleszthetnk az ablak als felben tallhat listk segtsgvel. A beptett kifejezsek csoportostva tallhatk meg. Az elsdleges csoportosts lthat a bal oldali listban. Itt mindig megjelennek a fggvnyek, az llandk s az opertorok. Ezen kvl ms csoportok is megjelenhetnek, pldul az adatbzis tbli. A fggvnyek mg ebben a listban tovbb bonthatk, ha az eltte megjelen ikonra kattintunk. Ha nincsenek importlt, vagy a felhasznl ltal ltrehozott fggvnyek, akkor csak a beptett fggvnyek tallhatk itt.
75

SQL-ben is tbb szituciban van szksgnk felttelek megfogalmazsra (ld. 5.3.4. pont). Tbla definilsakor a CONSTRAINT kulcssz utn tudunk az oszlopokra, vagy az egsz tblra vonatkoz felttelt megadni (ld. 5.14. tblzat:. pont), lekrdezsekben a WHERE s a HAVING kulcsszavak utn (ld. 5.6.3.2. pont).

6-8

A baloldali csoportok kzl vlasztva a kzps listban jabb csoportosts jelenik meg, a jobboldaliban pedig a kivlasztott csoportba tartoz elemek. A csoportok kzl az els mindig az <sszes>. A beptett fggvnyeknl a fggvnykategrikat ltjuk (pl.: Matematikai, Szveg), az llandknl csak <sszes> van, az opertoroknl a csoportok Aritmetikai, sszehasonlts s Logikai. Ha szerepel a baloldali listban tbla, akkor a kzps listban annak mezi lthatk, a jobb oldaliban pedig az <rtk>. A listkbl dupla kattintssal lehet egy-egy kifejezst a szerkeszt terletre tenni a kurzor aktulis pozcijba. A legtbb esetben a jobboldali listbl vlasztunk. Ha a kzps listbl vlasztunk, akkor a jobboldali lista els eleme kerl a szerkesztbe. Fggvnyek vlasztsnl elfordul, hogy a kifejezs-szerkesztbe a fggvny gy kerl be, hogy az argumentumai helyn a <<szveg>> vagy a <<szm>> kirs jelenik meg. Ha ezekre egyszer rkattintunk, akkor kijellt vlnak s helykre lehet rni, vagy beilleszteni a megfelel argumentumot. Ha tbb kifejezst szrunk be egyms utn anlkl, hogy opertort tennnk kzjk, az ACCESS automatikusan a <<Kif>> szveget jelenti meg a kifejezsek kztt, ezzel jelezve, hogy oda opertort vr.

6.4. bra: Pldk 1.

Kifejezs-szerkeszt

Hozzuk ltre a hinyz oszlopokat a kvetkez tulajdonsgokkal:

Lers MezFelttel rvnyestsi Alaprtelmezett Ktelez mret (rvnyessgi szveg rtk szably) szdtum Dtum/Id Szletsi nem dtum vf Szm vfolyam Bjt 1 <= evf <= 5 Az vfolyam 1 nem 1 s 5 kztti szm lehet tulaj Szveg Az adat 8 A sajt nem berjnak azonostnk kdja

Mez- Adattpus nv

6-9

A felttel megadsn kvl minden egyrtelm, a felttel megadst nzzk rszletesebben. A tblzatban megadott mdon nem lehet a felttelt berni, csak kt kln felttelknt, amelyeket az s logikai opertorral fznk ssze. A felttelt be is gpelhetjk, vagy a ikonra kattintva meg is szerkeszthetjk. Ilyen egyszerbb szablyok bersa ltalban egyszerbb gpelssel. Teht a szably: >= 1 AND <= 5.76 A mdostsok utn mentsk a tblt! Az adott pldban nincs r szksgnk, de lehetsg van nem csak oszlopfelttelt, hanem tblafelttelt is megadni, pl. hogy egyik mez rtke nem lehet nagyobb, mint egy msik mezbl kpzett rtk. Ehhez nem egy-egy mez tulajdonsgait kell vltoztatnunk, hanem az egsz tbla tulajdonsgt. A Nzet menben a Tulajdonsgok menpontra, vagy az Adatbzis eszkztron a ikonra kattintva megadhatjuk a tblzat tulajdonsgait. Ezek kztt szintn van rvnyessgi szably s rvnyestsi szveg. A tbbi tulajdonsg kzl a rendezst s a szrt a 6.1.3.4. pontban fogjuk trgyalni. 2. Ttelezzk fel, hogy nincsenek csodagyerekek s klnleges esetek, gy minden elssnek be kell tltenie idn minimum a 18., minden msodvesnek minimum a 19. letvt, s gy tovbb.

Ehhez meg kell tudnunk llaptani a hallgatk kort s szablyknt be kell lltani, hogy az vfolyam nem lehet nagyobb az letkornl 17-tel kisebb szmnl. Az letkor az aktulis s a szletsi dtum vnek klnbsge. lltsuk be ezt az rvnyessgi szablyt: YEAR(DATE())-YEAR([szdtum])-17>=[vf] Lthatjuk, hogy a meznevek szgletes zrjelek kztt jelennek meg. Ezt a szablyt mr rdemesebb a kifejezs-szerkesztvel rni be. A YEAR() s a DATE() fggvny is a dtumfggvnyek kztt tallhat. DATE() az aktulis dtumot, YEAR() a dtum tpus argumentum v rszt szolgltatja. lltsunk be rvnyestsi szveget is, pldul: Ilyen fiatalon nem jrhat erre az vfolyamra! A mdostsok utn mentsk a tblzatot! 3. Hozzuk ltre a TANTRGY s a MITHALLGAT tblkat is! Most az EGYETEM adatbzis ablakban ne a Tbla Varzslt hvjuk el, hanem vlasszuk a Tbla ltrehozsa Tervez nzetben pontot!

A mr ismert ablak jn el, de teljesen resen. Ekkor minden mezt neknk kell begpelni.77 A tblnak az els mentskor tudunk nevet adni, minden tovbbi mentsnl a mr megadott nvre ment. Hogy melyik mez legyen az elsdleges kulcs (Primary Key, ld. 4.4.2. s 5.14. tblzat:. pont), azt gy tudjuk megadni, hogy kijelljk a megfelel mez(ke)t s kiadjuk a Szerkeszts men Elsdleges kulcs parancst, vagy az eszkztron a ikont megnyomjuk. Az ikon jra megnyomsval tudjuk az elsdleges kulcsot megszntetni. Tbb mez kijellshez hasznlhatjuk a Ctrl gombot. Ha ms mezn llva nyomjuk meg az elsdleges kulcs ikont, akkor az elz elsdleges kulcs megsznik.

76 77

A logikai opertoroknl az ACCESS magyar vltozatban is az angol elnevezseket kell hasznlnunk. A TANTRGY tbla vizsga mezjnek adattpust vlaszthatnnk egykarakteres szvegnek, mint a 4.2. pont pldjban, de megadhatjuk az Igen/Nem adattpust is s akkor nem kell kln rvnyessgi szablyt belltanunk arra, hogy milyen rtkeket adhatunk meg.

6-10

6.1.2.3. Opertorok s fggvnyek Az elz pontban, a felttelek megadsnl mr tallkoztunk nhny opertorral s fggvnnyel. Ebben a pontban szeretnnk sszefoglalni az ACCESS eszkzeit folyamatosan prhuzamot vonva az SQL nyelv elemeivel (ld. 5.3.4. pont s 5.5. alfejezet). Opertorok Az ACCESS opertorai kztt megtalljuk a 5.3.4. pontban trgyalt aritmetikai, sszehasonlt s logikai opertorokat is. A precedencia szablyok is ugyangy rvnyesek. A legfontosabb opertorok, melyeket megtallunk a kifejezs-szerkesztben: Aritmetikai opertorok sszeads, kivons (+, ) szorzs, oszts (*, /) egszoszts (\): az oszts eredmnynek egszrszt adja eredmnyl hatvnyozs (^) maradkos oszts (Mod): kt szm osztsakor keletkez maradkot adja eredmnyl sszehasonlt opertorok: <, <=, <>, >, >= Between Logikai opertorok: And Not Or Az opertorok kztt felsorolva nem talljuk, de nagyon hasznosak mg az & s a Like opertorok. Az & ktoperandus opertor szvegsszefzsre szolgl. Kt szveg kifejezst fz ssze egy szvegg szkz nlkl.78 Pldul a "Fekete & Pter mvelet eredmnye FeketePter. Ha a nv sszefzst helyesen szeretnnk megoldani, akkor szksgnk van egy szkzre is. Teht: Fekete & & Pter. Ennek eredmnye Fekete Pter. Az Like ugyangy mkdik, mint az SQL Like opertora (ld. 5.3.4.2. pont) azzal a klnbsggel, hogy nem tesz klnbsget kis- n nagybets karakterek kztt, s a helyettest karakterek (ms nven joker karakterek) eltrnek, ahogy azt a 6.4. tblzat mutatja. 6.4. tblzat: Helyettest karakterek s funkcijuk Helyettest karakter * (csillag) ? (krdjel) # (kettskereszt) [a-d] Funkcija Akrhny karaktert helyettesthet Pontosan egy karaktert helyettest Pontosan egy szmjegyet helyettest A megadott karaktertartomnyba es egy db. karaktert helyettesti (a hatrok is benne vannak)

78

Kifejezsben a szvegeket mindig idzjelek kz kell rnunk. A dtumot is javasolt idzjelek, vagy kettskeresztek (#) kztt megadni, mert bizonyos dtumformtumokat (pl. 1999.10.11) csak gy fogad el a rendszer. (Bizonyos esetekben, ha lefelejtjk a jeleket, akkor az ACCESS magtl kiteszi azokat.)

6-11

Fggvnyek Az ACCESS fggvnyei kztt is megtalljuk azokat a kategrikat, amelyeket az SQL nyelvben, de lehet hogy eltr nven (ld. 5.5. alfejezet). Az 6.5. tblzat ttekintst ad a leggyakrabban hasznlt fggvnyekrl. Nhny fggvny nevt lefordtottk magyarra, de az SQL kifejezsekben ezek a fggvnyek is az eredeti (angol) nevkn jelennek meg. A tblzatban a magyar fggvnyneveket ahol voltak zrjelben dlt betkkel jelltk. 6.5. tblzat: Fggvnyelnevezsek sszehasonltsa SQL-ben s az ACCESS-ben SQL fggvnyek AVG (numerikus argumentum) COUNT(*) vagy COUNT(argumentum) MAX(argumentum) MIN (argumentum) SUM (numerikus argumentum) CONCAT(char-1,char-2) INITCAP(char) Funkci Csoport fggvnyek tlag Darabszm Maximum Minimum sszeg Avg(kif) Count(kif) Max(kif) Min(kif) Sum(kif) A fggvny megjelense ACCESS-ben

Karakter fggvnyek Szvegsszefzs & opertor A szkezd karaktereket StrConv(karakterlnc;talakts) A nagybetss alaktja, de a talakts paramtert szmmal tbbi karakteren nem lehet megadni. A 3 felel meg az vltoztat. SQL fggvnynek LENGTH(char) Karakterek szma Len(szveg) LOWER(char) | Kisbetss s nagybetss LCase(szveg) | UCase(szveg) UPPER(char) alakt LTRIM(char) | RTRIM(char) Levgja a kezd ill. a LTrim(szveg) | Rtrim(szveg) befejez szkzket REPLACE(char,c1,c2) | Karakterek kicserlse Replace(szveg;keresett;csere) TRANSLATE (char,c1,c2) (Csere) SUBSTR(char,n,m) Az argumentum egy Mid(szveg;kezdet;hossz) rszlett adja eredmnyl Dtum s numerikus fggvnyek ADD_MONTHS Hnap hozzadsa DateAdd(idtartam;szm;dtum) (nem csak hnapot tud hozzadni, a hnaphozzadshoz az idtartamnl m-et kell megadni.) LAST_DAY Hnap utols napja ennek megfelel fggvny nincs ROUND Kerekts Round(szm;tizedeshelyek) (Kerek) (10 pozitv hatvnyaira nem tud kerekteni, dtumok esetn szmknt kezeli a dtumokat)

6-12

SQL fggvnyek

Funkci

SYSDATE vagy CURRENT Aktulis dtum ill. id DATE, CURRENT TIMESTAMP TRUNC Dtum vagy szm ennek megfelel fggvny nincs lervidtse YEAR, MONTH, DAY Dtum megfelel rsznek Year, Month, Day kivgsa Konvertl fggvnyek TO_CHAR vagy Karakterre konvertls CStr(kif) VARCHAR TO_DATE vagy DATE Dtumra konvertls CDate(kif) TO_NUMBER vagy Numerikus adatra CByte, CDbl, CDec, CInt stb. DECIMAL konvertls 6.1.2.4. Tblk importlsa Az ACCESS lehetsget nyjt arra, hogy ms programmal ksztett, ms adatbzisban lv tblzatokat tvegynk az aktulis adatbzisunkba. Ehhez az adatbzis ablaknak kell aktvnak lennie. A Fjl menben talljuk a Kls adatok tvtele pontban az Importlst. A megjelen Importls ablak a szoksos megnyits ablakhoz hasonl. Itt megkereshetjk azt az llomnyt, amelyikben az a tblzat tallhat, amelyiket importlni szeretnnk. A Fjltpus listban megadhatjuk, hogy milyen fjlok kztt keresnk. Itt lthatjuk, hogy nem csak adatbzisokbl vehetnk t tblzatot, hanem pl. tblzatkezelvel ksztett tblzatbl, vagy egyszer szveges llomnybl is. Attl fggen, hogy milyen tpus llomnyt vlasztottunk, a kvetkez lpsekben tovbbi informcikat kell megadnunk, hogy pontostsuk a tblzat tvtelnek mdjt. Ha ACCESS adatbzisbl importlunk, akkor nem csak tblzatokat, hanem egyb objektumokat is tvehetnk: lekrdezseket, rlapokat, jelentseket, stb. A Belltsok gomb megnyomsra lenyl terleten megadhatjuk, hogy a tblnak csak a defincijt, vagy a benne lv adatokat is tvesszk-e, hogy a lekrdezseket lekrdezsknt, vagy tblaknt importljuk s hogy az adott objektumon kvl mst is tvesznk-e (pl. a tbla kapcsolatait). Ha olyan objektumot importlunk, amely valamilyen mdon kapcsoldik ms objektumokhoz, akkor gyelnnk kell arra, hogy vagy a kapcsold objektumokat is tvegyk, vagy a mi objektumaink kztt is legyen megfelel objektum. Pldul ha importlunk egy lekrdezst egy adatbzisbl, ami az ottani HALLGATO tblbl krdez le adatokat, akkor az a mi adatbzisunkban csak akkor fog mkdni, ha neknk is van egy HALLGATO tblnk s a lekrdezsben szerepl mezk is azonos nvvel mind lteznek. A pldnl maradva: neknk csak HALLGAT tblzatunk van, ezrt a lekrdezs nem mkdik (az egyezsnl a kisbet, nagybet nem szmt, de az kezet igen). Az importls azrt megtrtnik, tervez nzetben az objektum mdosthat, csak adatlap nzetben kapunk hibazenetet. Ha tblzatkezelvel ksztett fjlbl, pl. Excel munkafzetbl importlunk, akkor meg kell adnunk az llomny azon rszt, ami az adatokat tartalmazza (pl. a megfelel munkalapot), azt hogy az oszlopfejlcek kpezhetk-e az els adatsorbl, valamint azt, hogy csak az adatokat akarjuk tvenni egy meglv tblnkba, vagy egy j tblzatot akarunk ltrehozni. Az utbbi esetben meznknt megadhatunk bizonyos jellemzket (a tbbit ksbb,

A fggvny megjelense ACCESS-ben Date(), Time()

6-13

tervez nzetben mdosthatjuk), azt hogy melyik legyen az elsdleges kulcs s hogy mi legyen a tbla neve. Ha csak az adatokat importljuk egy meglv tblba, akkor gyelnnk kell a megfelel tbladefincira. Ha az tvtelre kerl adatok nem felelnek meg a tblzat mezdefinciinak, akkor az importls rszleges lesz. Hibazenetben kapunk rtestst arrl, hogy milyen adataink vesznek el az importls sorn (ha egy oszlop adattpusa nem megfelel, akkor a mez rtkei trlsre kerlnek ha megengedett a NULL rtk, ha ismtld elsdleges kulcs lenne, akkor a rekord kerl trlsre). Ilyenkor eldnthetjk, hogy a hinyos adatokkal folytatjuk az importlst, vagy felfggesztjk. rdemes a tblt megfelel mdon mdostani s aztn jra megprblni az importlst. Importlskor gyakorlatilag duplikls trtnik, hiszen az eredeti llomnyban is megmarad az objektum s az aktulis llomnyban is ltrejn egy msolat errl az objektumrl. A kt objektum ezentl nllan hasznlhat, azaz egymstl fggetlenl lehet ket vltoztatni. Ez integritsi veszlyeket rejthet magban, gyhogy csak akkor ljnk vele, ha egy tbla adatait adott llapotban vglegesen szeretnnk tvenni. Ms esetekben egy tbla tvtelre a csatols a megfelel mdszer. Csatolni csak tblkat lehet, lekrdezseket nem. Csatolshoz is az adatbzis ablaknak kell aktvnak lennie. A Fjl menben talljuk a Kls adatok tvtele pontban a Csatolst. A megjelen Csatols ablak a szoksos megnyits ablakhoz hasonl. Itt megkereshetjk azt az llomnyt, amelyikben az a tblzat tallhat, amelyiket csatolni szeretnnk. A Fjltpus listban megadhatjuk, hogy milyen fjlok kztt keresnk. Itt lthatjuk, hogy nem csak adatbzisokbl csatolhatunk tblzatot, hanem pl. tblzatkezelvel ksztett tblzatbl, vagy egyszer szveges llomnybl is. Ha csatolunk egy tblt s a benne lv adatokat mdostjuk, akkor azok az eredeti helykn is mdosulnak s ez fordtva is igaz. Ha az eredeti helyen mdosulnak az adatok, akkor azok a csatolsnl is megvltoznak. A tbla defincijt csak az eredeti helyen lehet mdostani s a mdostsok rgtn megjelennek az j helyen is. A csatolt tbla adatai kzl a mezk lersa s cme79 az llomnyokban fggetlenl is mdosthat. 6.1.2.5. Indexek Az ACCESS-ben is van lehetsg indexek definilsra. Brmely mezre, mezkombincira pthetnk indexet. A mez ltalnos tulajdonsgainl az indexelt sorban 3 klnbz rtk kzl vlaszthatunk: nem: ebben az esetben a mez nem indexelt, igen (lehet azonos): ebben az esetben dupliklt indexnk van, azaz az index megengedi az rtkek ismtldst, igen (nem lehet azonos): egyedi index, azaz az indexrtkek nem ismtldhetnek. Az elsdleges kulcs helybl ilyen indexszel rendelkezik s nem is mdosthat.80 (Az indexekrl ld. 2.4.1. s a 4.4.4.2. pont, indexek ltrehozsa SQL-ben ld. 5.14. tblzat:. pont)

79

Az ACCESS cmnek nevezi a mezk megjelentett nevt. Ez megegyezhet a mezk nevvel, de klnbzhet is attl. 80 Ez megfelel a CREATE UNIQUE INDEX, az elz a CREATE INDEX SQL utastsnak (ld. 5.6.2.1. pont)

6-14

Van lehetsg sszetett indexek definilsra s a tbla sszes indexnek ttekintsre is a Nzet men Indexek menpontjval. A 6.5. brn lthat ablak fels rszben lthatjuk az indexeink listjt (az index nevt, melyik mezre vonatkozik, nvekv, vagy cskken sorrend-e1), als rszben pedig az ppen kivlasztott index tulajdonsgait. A tulajdonsgok: Elsdleges: ha az rtke igen, az adott index az elsdleges kulcs. Egyedi: ha igen, akkor nem lehetnek azonos indexrtkek. NULL rtk kihagysa: ha igen, akkor az indexelt mezben NULL rtket tartalmaz rekordok nem tartoznak bele az indexbe. Tbb oszlopra csak gy tudunk indexet definilni (ld. 6.5. bra). gyeljnk arra, hogy ilyenkor az indexben az oszlopok sorrendje megegyezik azzal, ahogy az ablakban felsoroltuk ket. Plda 1. lltsuk be a HALLGAT tbla indexeit!

A Nzet men Indexek menpontjban ltjuk, hogy mr van kt indexnk. Az egyik az elsdleges kulcs. Ennek neve automatikusan PrimaryKey. Lehetsg van tnevezsre. rjuk t a nevt I_PK_HID-re. Minden egyb tulajdonsga maradhat vltozatlan. A msik indexnk a VNEV mezre a VNEV nev index (alaprtelmezs szerint az index neve megegyezik a mez nevvel, de tnevezhet). Mdostsuk a VNEV indexnket gy, hogy sszetett index legyen, azaz a VNEV s KNEV mezkre kzsen pljn ebben a sorrendben. A neve legyen: I_HALLG_NV. Ezt gy tehetjk meg, hogy az indexnvhez kt meznv tartozik, ahogy az a 6.5. brn lthat. Ksztsnk indexet az vfolyamra is I_HALLG_VF nven!

6.5. bra: 6.1.2.6. Kapcsolatok

A HALLGAT Tbla Indexek ablaka kiegsztve

Ha ltrehoztuk tblinkat, akkor megadhatjuk a kztk lv kapcsolatokat is. Ez megfelel az idegen kulcsok (ld. 4.4.3.1. pont) definilsnak. A kapcsolatok ablakot az Eszkzk men Kapcsolatok pontjval, vagy az eszkztr ikonjval lehet megnyitni. Az
Nvekv sorbarendezsnl a karakterek sorrendje a kvetkez: szkz, rsjelek, szmjegyek, betk a magyar bc szerinti sorban fggetlenl attl, hogy kis vagy nagybet. Cskken sornl a sorrend megfordul. Ha NULL rtk is benne van az indexben, akkor nvekv sorrend esetn a lista elejn, cskkennl a lista vgn tallhat.
1

6-15

ablak els megnyitsakor megjelenik a Tbla megjelentse ablak, ahol megadhatjuk, hogy melyik tblinkat szeretnnk a Kapcsolatok ablakban ltni. A Kapcsolatok ablak az adatbzis tblinak s a kztk lv kapcsolatok megjelentsre, valamint kapcsolatok ltrehozsra s trlsre szolgl. Itt teht nem tudunk ltrehozni, vagy trlni tblkat, csak megjelenteni, vagy elrejteni tudjuk ket. Plda 1. lltsuk be a HALLGAT s a MITHALLGAT, valamint a TANTRGY s a MITHALLGAT tblk kztti kapcsolatokat a HID s a TID mezk segtsgvel, azaz definiljuk MITHALLGAT-ban a HID s a TID idegen kulcsokat.

A Tbla megjelentse ablakban vlasszuk ki mind a hrom tblnkat (vgighzhatjuk rajtuk az egeret) s nyomjuk meg a Hozzads gombot. A Bezrs gombbal becsukhatjuk az ablakot. Ha ksbb tovbbi tblt szeretnnk a Kapcsolatok ablakban megjelenteni, akkor az eszkztron a ikonnal jra meg tudjuk nyitni az ablakot. Ha vletlenl felesleges tblt is hozzadtunk (pldul egy tblt vletlenl ktszer adtunk hozz), akkor a kapcsolatok ablakban kattintssal kijellhetjk s elrejthetjk a Del gombbal, vagy a jobb egrgombbal elhvott gyorsmenben, vagy a Kapcsolatok menben a Tbla elrejtse paranccsal. A kapcsolatokat legegyszerbben az egr segtsgvel tudjuk ltrehozni. Kapcsoljuk ssze a HALLGAT tblt a MITHALLGAT tblval a HID mez segtsgvel, azaz a MITHALLGAT tbla HID mezje idegen kulcsknt hivatkozzon a HALLGAT tbla HID mezjre. Ehhez az egyik tbla HID mezjre lljunk az egrrel s a bal gombot nyomva tartva hzzuk azt a msik tbla HID mezjre. Ekkor megjelenik a Kapcsolatok szerkesztse ablak, melyben ltjuk a kt kapcsol mezt s a lehetsget, hogy a hivatkozsi integrits megrzsre kerljn. Ezt minden esetben kapcsoljuk be, hiszen ez jelenti az idegen kulcs ltrehozst! Itt llthatjuk be azt is, hogy az adatok mdostsnl vagy trlsnl megengedjk-e a tovagyrz (kaszkd) vltoztatst (ld. 4.4.3.2. pont). Mivel egy elsdleges kulcsot kapcsoltunk egy nem elsdleges kulcshoz a kapcsolat tpusa Egy-a-tbbhz, 1:N. Ha kt elsdleges kulcsot kapcsoltunk volna ssze, akkor a tpus Egy-az-egyhez, 1:1 lenne1. Olyan mezket, amelyek kzl egyiknek sincs egyedi indexe, nem tudunk sszekapcsolni. Ha mindent belltottunk, akkor a Ltrehozs gombbal a kapcsolat ltrejn. Az 1:N kapcsolatot az ACCESS az 1 s a jelekkel jelzi. Kapcsolatot trlni a kapcsolat kijellse utn a Del gombbal, vagy a gyorsmen Kapcsolat trlse pontjval lehet. A kapcsolatok ltrehozskor, mdostskor, trlskor azonnal mentsre kerlnek. A Kapcsolatok ablak elrendezst kln menteni kell. Ha ltrehoztunk egy kapcsolatot s aztn a kapcsolatban rsztvev egyik tblt elrejtjk a Kapcsolatok ablakban, akkor a ikon kapcsolat sem ltszik, de attl a kapcsolat mg nem sznt meg. Az eszkztron a segtsgvel az sszes kapcsolt tblt megjelenthetjk a kapcsolatokkal egytt. A Kapcsolatok ablakban a tblkat jelkpez tglalapok tmretezhetk s thelyezhetk, gy a leginkbb tlthat formba rendezhetjk ket. Az elrendezst menteni kell. A Kapcsolatok ablak az EGYETEM adatbzis kapcsolataival a 6.6. brn lthat.

1:1 kapcsolatot nagyon ritkn definilunk kt tbla kztt. Gyakorlatilag ltre tudjuk hozni a kapcsolatot a tblk kztt, amg nincs bennk adat, vagy teljesen azonos elsdleges kulcs adatokkal vannak feltltve, de aztn nagyon nehezen tudunk velk dolgozni.

6-16

6.6. bra: 6.1.3. Adatkezels

Az EGYETEM adatbzis kapcsolatai

A 6.1.2. pontban azt nztk meg, hogy hogyan lehet egy adatbzist ltrehozni. Ebben a pontban azt tekintjk t, hogy hogyan tudjuk adatokkal feltlteni az adatbzist, a feltlttt adatokat hogyan tudjuk megnzni, mdostani, trlni. Ezekhez a mveletekhez a tblinkat adatlap nzetben kell megnyitnunk. Az adatlap nzetben a tbla oszlopainak nevt, majd alatta az egyes sorait ltjuk. Alaprtelmezs szerint, ha egy tblt megnyitunk, az automatikusan adatlap nzetben nylik meg. Ebben a tblzat egyes adataival tudunk dolgozni. A tblzat felptst a tervez nzetben vltoztathatjuk meg. A tervez s az adatlap nzet kztt az eszkztron lv s gombok segtsgvel, vagy a Nzet men megfelel pontjaival tudunk vltogatni. Adatok bevitelre, mdostsra rlapon is lehetsgnk van. Erre a 6.1.5. pontban fogunk visszatrni. 6.1.3.1. Adatbevitel Adatlap nzetben tblzatos formban van lehetsgnk az adatok bevitelre. A tblzat fejlct a tbla mezinek nevei alkotjk. A cellk kztt a Tab, az Enter s a kurzormozgat billentykkel tudunk mozogni, vagy az egrrel kattinthatunk msik cellba. Az j sor helyt a sor elejn a jell lapkn lv * jelzi. Ha ez a sor egyben az aktulis sor, akkor a * helyett ltszik. Ha egy cellba olyan rtket runk, amit az adott cellba nem rhatnnk, mert ms az adattpus, vagy megsrtnk egy rvnyessgi szablyt, akkor hibazenet jelenik meg s addig nem mehetnk j cellba, amg nem javtjuk ki az rtket megfelel rtkre. Ha van olyan rvnyessgi szably, ami nem egyetlen mezre, hanem a tblra vonatkozik s azt srtjk meg, vagy egy egyedi index mezbe runk ismtld rtket, akkor ezt nem a mez, hanem a rekord bersnak befejezsekor szleli az ACCESS. Ilyenkor nem engedi meg a rekord berst az adatbzisba, azaz ha j rekordot akarunk kezdeni, akkor hibazenet jn s nem tudunk tovbbmenni. Ha lltottunk be alaprtelmezst, akkor az megjelenik a megfelel mezben, de trhat. A rekord bevitelt j rekordra menetellel, vagy a Shift + Enter billentykombinci megnyomsval tudjuk befejezni. A bevitt adatok rgtn bekerlnek az adatbzisba, nem kell kln menteni ket. Ez a mvelet az INSERT SQL utastsnak felel meg (ld. 5.6.3.5. pont). Ha a tblnkhoz kapcsoldik idegen kulccsal egy msik tbla, akkor a bevitt rekordok sornak elejn, kzvetlenl a jelllapka utn megjelenik egy + jel. Erre a jelre kattintva a tblzaton bell megnylik egy kisebb tblzat, amiben a kapcsold tblzat kapcsol

6-17

rekordjait adhatjuk meg, illetve, ha mr vannak kapcsold rekordok, akkor azokat lthatjuk s a kvetkez pontokban lert mdon mdosthatjuk, vagy trlhetjk ket. A 6.1.2.4. pontban mr utaltunk r, hogy msik tblzatokbl importlssal hozhatunk t adatokat az adatbzisunkba. Microsoft alkalmazsokbl a vglap segtsgvel is vihetnk be adatokat a tblinkba, ha azok megfelelen tagoltak. 6.1.3.2. Adatmdosts Adatlap nzetben a mdostani kvnt rekord sorra llunk. A sor bal szln, a jell lapkn egy jelzi, hogy melyik az aktulis sor. A cellk kztt az elz pontban lertak szerint tudunk mozogni. Ha egy cellra llunk s elkezdnk gpelni, akkor a cella tartalmt fellrjuk. Ilyenkor az Esc gombbal mg vissza tudjuk vonni a vltoztatsunkat. Ha nem akarjuk a cella teljes tartalmt fellrni, csak nhny karaktert akarunk mdostani, akkor szerkeszt mdba kell mennnk. Vagy az egrrel kattintsunk dupln a celln, vagy nyomjuk meg az F2 billentyt. Ekkor a celln bell tudunk a kurzormozgat billentykkel mozogni s a kurzor helyn rni, vagy trlni. Ha elkezdnk mdostani egy rekord brmelyik mezjn, a helyett jelenik meg a jelllapkn mindaddig, amg a teljes rekord szerkesztst be nem fejeztk. Ha befejeztk egy rekord mdostst (ms rekordra kattintssal, vagy Shift + Enterrel), akkor a mdosts azonnal bekerl az adatbzisba. Nem kell kln menteni. Termszetesen a mdostst csak akkor tudjuk trolni, ha az j rtk is megfelel az adott mezre vonatkoz integritsi feltteleknek. A rekord mdostsa az UPDATE SQL utastsnak felel meg (ld. 5.6.3.4. pont). 6.1.3.3. Trls Adatlap nzetben a sorok elejn tallhat jelllapkk segtsgvel kijellhetjk a tbla sorait. Egrhzssal tbb egyms utni sort is kijellhetnk. Nem egyms utni sorok kijellsre nincs md. A kijellt sorokat a szoksos mdokon trlhetjk, pl. a Delete gombbal vagy a Tbla adatlap eszkztr gombjval. Sorok trlsekor, ha a sorok trlhetk, akkor egy zenetet kapunk, hogy a sorok visszavonhatatlanul trldnek a tblbl. Itt mg a Nem gomb megnyomsval visszatrhetnk a trls eltti llapotra. Ez megfelel az SQL-ben kiadott DELETE utastsnak (ld. 5.6.3.3. pont), majd a Nem az utna kiadott ROLLBACK, az Igen a COMMIT utastsnak (ld. 5.6.4. pont). Ha olyan sort akarunk trlni, amire hivatkozik egy msik tbla rekordja, pldul olyan hallgatt akarunk trlni, aki benne van a MITHALLGAT tblban s a kapcsolat belltsnl nem engedtk meg a kaszkd trlst, (ld. 4.4.3.2. pont) akkor a sort nem tudjuk kitrlni. Errl is zenetben rteslnk. 6.1.3.4. Adatok megjelentse, formzs, rendezs, szrs Adatlap nzetben lehetsgnk van az adatok megjelentsnek klnbz mdostsaira. A mdostsokat menteni kell. Kijellssel s thzssal megvltoztathatjuk az oszlopok sorrendjt. Ezzel a tbla defincijt is mdostjuk. A mezneveket elvlaszt vonalakra kattintva az egrrel vltoztathatjuk az oszlopok szlessgt, dupla kattintssal a leghosszabb tartalomhoz igazthatjuk azt. A Formzs eszkztr s a Formtum men segtsgvel formzhatjuk a tblzat adatait s a tblzat megjelenst. A formzsok mindig az egsz tblzatra vonatkoznak, nem lehet rekordonknt, vagy meznknt formzni. A Formtum men segtsgvel elrejthetnk s felfedhetnk oszlopokat. A tbla adatait adatlap nzetben alaprtelmezsben az elsdleges kulcs alapjn nvekv sorrendben rendezve ltjuk. Ezt a rendezsi sorrendet egyszeren megvltoztathatjuk. Egy msik mez szerinti rendezettsghez kattintssal rllunk az adott 6-18

meznvre vagy a mez brmelyik celljra. A Tbla adatlap eszkztron a ikonok segtsgvel nvekv, vagy cskken sorrendbe rendezhetnk, vagy a Rekordok men Rendezs pontja alatt vlaszthatjuk a Rendezs-nvekv vagy a Rendezs-cskken parancsot. Tbb egyms melletti mezt is kijellhetnk az egr hzsval. gy lehet tbb oszlop szerint rendezni. Tbb oszlop szerinti rendezs esetn a kijellt oszlopok kzl a bal szls alapjn rendez elszr s az ott tallhat egyez rtkek esetn veszi csak figyelembe a kvetkez oszlopokat balrl jobbra haladva. A rendezsben a karakterek sorrendje megegyezik az indexeknl trgyaltakkal (ld. 6-14. oldal). Nem egyms melletti mezket nem tudunk kijellni s a rendezsben szerepl mezk sorrendjt sem tudjuk megvltoztatni. Ha mgis ilyen rendezsre lenne szksg, akkor a Rekordok men Szr pontjn bell az Irnytott szrs/rendezs parancsot vlasztjuk. Mivel ennek segtsgvel sszetettebb szrst is megadhatunk, pontosabb lerst lejjebb adjuk meg. A rendezs az SQL SELECT utastsnak (ld. 5.6.3.2. pont) ORDER BY klauzuljnak megadst jelenti. Lehetsg van az adatok klnbz szempontok szerinti szrsre, ami a SELECT utasts WHERE klauzuljnak felel meg. Ha egy szrst mentnk a tblhoz, akkor azt j segtsgvel brmikor ki-be kapcsolhatjuk. Az ablak aljn mindig lthat, megnyitskor a hogy sszesen hny rekord lthat a tblban. Ha a szr be van kapcsolva, akkor a (szrt) kirs lthat a rekordok szma mellett. Szrsre tbb lehetsgnk van. A legegyszerbb a szrs kijellssel. Ezt akkor alkalmazhatjuk, ha egy mez alapjn pontos egyezs alapjn szeretnnk szrni. Pldul szrjk a Aladr keresztnev hallgatkat (knv=Aladr), vagy azokat a trgyakat, melyeket Quittner tant (oktat=Quittner). A szrshez a mez egy olyan rekordjra kell llni, amelyikben a megfelel rtk tallhat s kiadni a Szrs kijellssel parancsot. Ezt kiadhatjuk a Tbla adatlap eszkztr ikonjval vagy a Rekordok men, Szr pontjn bell, vagy a gyorsmenbl. Tbb mez alapjn gy tudunk szrni, hogy a szrseket egyms utn adjuk ki. Ekkor a felttelek kztt S kapcsolat lesz. Pldul, ha szrjk az elsves Aladr keresztnev hallgatkat, akkor elszr szrnk mondjuk az Aladr nvre s aztn az vfolyamra (vf=1). Ekkor csak az elss Aladrok jelennek meg.1 Tovbbi lehetsg a szrs rlappal. Szintn elindthat a Tbla adatlap eszkztrrl a ikonnal, vagy a Rekordok men Szrs pontja all. Itt minden meznl egy listbl vlaszthatjuk ki, hogy melyik rekordok kerljenek bele a szrsbe. Akkor rdemes alkalmazni, ha tbb mez alapjn szrnk, de mindenhol csak egyenlsg felttelnk van. Ha a szrs felttelben ms relcit szeretnnk hasznlni, vagy nem S, hanem VAGY kapcsolat van a feltteleink kztt, akkor a Rekordok men Szr pontjnak Irnytott szrs/rendezs parancst kell vlasztanunk. Ekkor a 6.7. brn lthat ablak jelenik meg kitltetlenl. Ebben az ablakban megadhatjuk, hogy melyik mezre milyen feltteleink vannak s milyen rendezst szeretnnk megadni. A felttelek bershoz hasznlhatjuk a mr megismert kifejezs-szerkesztt is a gyorsmenben a Szerkeszts pontot vlasztva. Plda 1. lltsunk be a HALLGAT tblra vfolyam szerinti nvekv rendezst s azon bell szletsi dtum szerinti cskken rendezst. Szrjk az adatokat azokra a hallgatkra, akik 1980. janur 1. s 1985. december 31. kztt szlettek.

A szrs kijellssel lehetsg prja a szrs kizrssal. Ez az eszkztron nem jelenik meg. Mkdse hasonl, azzal a klnbsggel, hogy a felttel nem az egyenlsg, hanem a nem egyenlsg. Szrhetjk pldul a MITHALLGAT tblbl az sszes rekordot, ahol az osztlyzat nem 1. gyeljnk a NULL rtkekre! Azokat a rekordokat, amelyekben nincsen osztlyzat, ezzel a szr felttellel nem kapjuk meg.

6-19

A megolds a 6.7. brn lthat. Mivel a szletsi dtumra vonatkoz kt felttelnk kztt S kapcsolat van, azokat egyms mellett kell feltntetnnk1. A VAGY kapcsolatot a felttelek egyms al rsval tudjuk megadni. Termszetesen alkalmazhatjuk egy kifejezsen bell is az AND s az OR logikai opertorokat is. Mentsk a tbla mdostst. Zrjuk be a tblt s nyissuk meg jra. A rendezs megmarad, de jra az sszes rekord lthat lesz. A szr azrt megmaradt, most mr csak a ikont kell megnyomni, hogy csak a szrt adatokat lssuk.

6.7. bra:

A HALLGAT tbla szrje2

Ilyen sszetett szrs belltsa helyett nyugodtan ltrehozhatunk nll lekrdezst. A lekrdezseket a kvetkez pontban trgyaljuk. Ha a tblt tervez nzetben nyitjuk meg, akkor a Tbla tulajdonsgai ablakban lthatjuk a szr s a rendezs szveges lerst. Ha a lers nem fr ki, akkor a gyorsmenben vlasszuk a Nagyts pontot. Termszetesen a rendezs s a szrs itt is mdosthat. 6.1.4. Lekrdezsek A lekrdezsek abban klnbznek a szrsektl, hogy nem a tblhoz tartoznak, hanem kln objektumknt kerlnek az adatbzisba. Lekrdezst kszthetnk tblkbl s lekrdezsekbl is. Ebben a pontban ahol tblt runk, ott mindentt lekrdezst is rtnk alatta. Ahol ettl eltrnk, azt kln jelezzk. Egy tblbl akrhny lekrdezst kszthetnk s egy lekrdezsben is szerepelhet tbb tbla s lekrdezs. Az ACCESS lekrdezsnek nevez klnbz tpus utastsokat is. Az ltalunk lekrdezsnek nevezett utastsok a ACCESS-ben a vlaszt lekrdezs nevet kaptk. A lekrdezsek ments nlkl is futtathatk, de tbbszri felhasznlsra el is menthetk. Az elmentett vlaszt lekrdezsek valjban SQL nzetek (View, ld. 5.3.6.2. pont) s ltrehozsuk megfelel a CREATE VIEW SQL utastsnak (ld. 5.14. tblzat:. pont). Az egyszeri alkalomra lefuttatott lekrdezsek s az elz pontban ismertetett szrk a SELECT utasts (ld. 5.6.3.2. pont) klnbz formit jelentik.

1 2

A kt felttel sszekapcsolsa helyett hasznlhatnnk a BETWEEN opertort is. Dtum literl megadsakor a dtumot # jelek kz kell rnunk. Ha elmulasztjuk, az ACCESS kiteszi helyettnk.

6-20

6.1.4.1. Vlaszt lekrdezsek ltrehozsa grafikusan Ahogy tblkat, gy lekrdezseket is ltre tudunk hozni varzsl segtsgvel s tervez nzetben is. Tervez nzetben grafikus formban tudjuk megtervezni lekrdezseinket, de lehetsgnk van a lekrdezsek SQL parancst is megnzni, ott mdostani. Ebben a fejezetben a vlaszt lekrdezsek ltrehozst nzzk t tervez nzetben, a tovbbi pontokban pedig ttekintjk az egyb lehetsgeket. A varzsl kiprblst az olvasra bzzuk. A lekrdezsek SQL kdjt s azokat a lekrdezseket, amelyeket csak ennek segtsgvel lehet ltrehozni kln pontban tekintjk t. Nyissuk meg a lekrdezs tervez ablakot! Erre tbb lehetsgnk is van, pldul az adatbzis ablakban a Lekrdezsek csoportban vlasszuk a Lekrdezs ltrehozsa tervez nzetben pontot! A megjelen ablakkal egytt megjelenik a kapcsolatnl megismert Tbla megjelentse ablak. Itt megadhatjuk, hogy melyik tbl(k)bl s lekrdezsekbl ksztjk a lekrdezst. A mensor kiegszl a Lekrdezs menponttal. Ebben a menpontban tudunk klnbz belltsokat megadni a lekrdezsnkkel kapcsolatban. A lekrdezs tervez ablaka hasonlt az irnytott szrs ablakhoz, de tbb sor jelenik meg. A Mez alatt megjelenik a Tbla, ahol azt is meg kell adnunk, hogy az adott mezt melyik tblbl krdezzk le. A Megjelents sorban megadhatjuk, hogy a kivlasztott mezre csak rendezs s felttelek vonatkoznak, vagy meg is akarjuk ket jelenteni a lekrdezs eredmnyben. A Nzet menben tovbbi sorokat kapcsolhatunk be. Ezekre a konkrt pldknl trnk ki. Bellthatjuk a lekrdezsben szerepl mezk formtumt is a mez nevnl a gyorsmenbl a Tulajdonsgok pontot, vagy az eszkztron a ikont vlasztva. A formtum megadsa ugyangy mkdik, mint a tblk definilsnl. Egyszer vlaszt lekrdezs egy tbla adataibl Plda 1. Krdezzk le az 1980. janur 1. utn szletett elss hallgatk nevt s szletsi dtumt nv szerint rendezve!

6.8. bra:

Egyszer vlaszt lekrdezs 6-21

A lekrdezsben szerepl mezket megadhatjuk pldul begpelssel, vagy az ablak fels rszben a tbla megfelel mezjre dupla kattintssal. Ez utbbi esetben a Tbla sor automatikusan kitltsre kerl. A plda megoldsa a 6.8. brn lthat.1 A lekrdezst a Lekrdezs men Futtats parancsval, vagy a Lekrdezstervezs eszkztr ikonjval futtathatjuk. A lekrdezs eredmnyt adatlap nzetre vltssal is megnzhetjk. A lekrdezsnek mentskor adhatunk nevet. A lekrdezsnk neve legyen: 80_UTN_SZLETETT_ELSSK. Mentett lekrdezst megnyithatunk adatlap, vagy tervez nzetben. Adatlap nzetben a tblk adatlap nzetnl trgyalt mveletek vgezhetk el. A mensor is az ott megszokott lesz. Lekrdezs tbb tbla adataibl Plda 1. Ksztsnk lekrdezst OKTATS nven, amely minden adatot tartalmaz.

Ehhez a Tbla megjelentse ablakban adjuk meg mind a hrom tblt. Az ablak fels rszn lthatjuk, hogy a belltott kapcsolataink itt is megjelennek. Ha gy ksztnk lekrdezst, akkor a megadott tblk termszetes (bels) joinjbl (ld. 4.5.6.1. pont) tudunk lekrdezni. Ha nem szeretnnk egyesvel megadni a lekrdezend mezket, akkor vlaszthatjuk a mezlistk tetejn megtallhat *-ot, ami az sszes mezt jelenti. Ha mind a hrom tblbl a *-ot vlasztjuk, akkor a hid s a tid oszlopok dupln fognak szerepelni. Erre nincs szksg, gyhogy vlasszuk a HALLGATK.*, a TANTRGY.* s a MITHALLGAT tblbl a gyakpont s az osztalyzat mezket! A megolds a 6.9. brn lthat.

6.9. bra:

Lekrdezs tbb tblbl

Az vfolyamot nem jelentjk meg, mivel annak rtke minden sorban 1, s ez a lekrdezs elnevezsbl is egyrtelmen kiderl.

6-22

Megjelentett adatok szmnak korltozsa Lekrdezsnl megadhat, hogy egy tblbl valamelyik szempontbl csak a legnagyobb vagy legkisebb valahny adatot jelentsk meg. Ehhez az adott mez szerint rendeznnk kell, s meg kell adnunk, hogy hny rtket szeretnnk megjelenteni. Ezt a szmot az ACCESS cscsrtknek nevezi. Plda 1. Krdezzk le a 3 legfiatalabb hallgat nevt s vfolyamt!

A HALLGAT tblbl szksgnk van a vnv, knv, vf s szdtum mezkre, de ez utbbit nem fogjuk megjelenteni. Szletsi dtum szerint cskken rendezst kell belltanunk, hogy a fiatalok legyenek a lista elejn. A cscsrtket a Lekrdezstervezs eszkztron a melletti kombinlt listban lehet megadni. Ha nem adunk meg itt rtket, akkor az sszes felirat ltszik. Ha olyan rtket akarunk megadni, ami nincs a listban (a 3 is ilyen), akkor azt be kell gpelnnk s utna Entert kell nyomnunk. A megolds a 6.10. brn lthat. Mentsk a lekrdezst FIATAL_HALLGATK nven!

6.10. bra: Kifejezs megadsa

Megjelentett adatok szmnak korltozsa a lekrdezsben

A lekrdezs mezjben klnbz kifejezseket is megadhatunk. Ilyenkor a lekrdezsben az oszlop neve a kifejezs kplete lesz. Ha ms nevet szeretnnk megjelenteni, akkor a Mez sorban elszr a megjelentend nevet kell megadnunk1 s kettspont (:) utn a kifejezst.

Ez megfelel a SELECT utasts kivlasztsi listjban lv AS kulcssznak s az utna megadott ideiglenes nvnek SQL-ben (ld. 5.6.3.2. pont).

6-23

Krdezzk le a hallgatk vezetk s keresztnevt sszevonva a nv oszlopban, a tanult trgyak nevt a tantrgy oszlopban s a kapott osztlyzatot a jegy oszlopban! Mentsk a lekrdezst VIZSGAEREDMNY nven! A megolds a 6.11. brn lthat1.

6.11. bra: sszests a lekrdezsben

Kifejezs megadsa lekrdezsben

Lekrdezsben csoportosthatjuk is a rekordokat s ezekre a csoportokra statisztikai mutatkat szmthatunk ki. Ezzel egy GROUP BY klauzulval kiegsztett SQL SELECT utastst adunk meg (ld. 5.6.3.2. pont). Ehhez meg kell jelentennk a lekrdezs tervezsekor az sszests sort. Ezt megtehetjk a Nzet men sszests menpontjval, vagy a Lekrdezstervezs eszkztr ikonjval. Az sszests sorban tbbek kztt az albbi rtkek kztt vlaszthatunk: Group By: azoknl a mezknl lltjuk be, amelyek szerint csoportostani akarunk, Sum: a mez egy csoportba tartoz rtkeit sszegzi, Avg: a mez egy csoportba tartoz rtkeit tlagolja, Min: a mez egy csoportba tartoz rtkeinek minimumt adja, Max: a mez egy csoportba tartoz rtkeinek maximumt adja, Count: a mez egy csoportba tartoz rtkeinek darabszmt adja,2 First: a mez egy csoportba tartoz rtkei kzl az elst adja, Last: a mez egy csoportba tartoz rtkei kzl az utolst adja,3 Expression: ha az sszestett rtk valamilyen kifejezsben szerepel, akkor a teljes kifejezst a mezbe kell rni s a listbl az Expression-t (kifejezs) kell vlasztani,
A vezetknvnek s a keresztnvnek az & (konkatenl) opertorral val sszefzsnl vigyztunk arra, hogy ne kerljn a kt nv egybersra. Ezrt volt szksg arra, hogy egy szkzt is hozzfzznk a vezetknvhez a keresztnv eltt. 2 Ezek a fggvnyek megegyeznek az SQL csoport fggvnyekkel (ld. 5.5.1. pont). Alkalmazsuk korltaira s rtkk meghatrozsra az ott elmondottak rvnyesek. 3 A sorrend a fizikai (vagy a definilt indexnek megfelel) elhelyezkedsben els vagy utols. Fggetlen az adatlap nzetben belltott sorrendtl.
1

6-24

Where: a mezre megadott felttel Where felttel lesz s nem Having felttel, azaz a felttel az egyes adatokra s nem az sszestett adatokra vonatkozik. Ezeket a mezket nem tudjuk megjelenteni a lekrdezsben, mert a Where felttellel prhuzamosan nem tudjuk megadni, hogy az adott mezt csoportostknt, vagy szmtott mezknt szeretnnk-e megjelenteni. Ha meg akarjuk jelenteni, akkor kln mg egyszer hozz kell adnunk a lekrdezshez.

Plda 1. Krdezzk le a MITHALLGAT tblbl tantrgyanknt az tlagosztlyzatot s a megszerzett maximlis pontot! Javtsuk ki a lekrdezst, hogy csak azokra a rekordokra vonatkozzon, ahol az osztlyzat nem 1-es! Mentsk a lekrdezst TANTARGYANKNTI_EREDMNYEK nven! A megolds a 6.12. brn lthat.

6.12. bra: Paramteres lekrdezs

sszests megadsa lekrdezsben

Paramteres lekrdezsre akkor van szksgnk, ha ugyanazt a lekrdezst tbbszr futtatjuk, de egy meghatrozott rszt mindig vltoztatjuk a lekrdezsnek. Ez a meghatrozott rsz lehet a felttel, vagy a mezkifejezs is. Ha a lekrdezst paramterekkel fogalmazzuk meg, akkor futtatskor a program a felhasznltl kri, hogy az adott futsnl milyen rtket vegyen fel a paramter. Egy lekrdezsben tbb paramtert is alkalmazhatunk. A paramtereknek nevet kell adni, ami klnbzik a lekrdezsben szerepl tblk mezinek nevtl. Futskor a program erre a nvre fog rkrdezni, teht rdemes beszl nevet adni a paramtereknek. A lekrdezs az sszes paramterrtk megadsa utn hajtdik vgre. Paramterek megadsnak kt mdja van. Az egyik, hogy a Lekrdezs men Paramterek pontjban ltrehozzuk a paramtert. Itt megadhatjuk a nevt s az adattpust is. A msik, hogy csak felhasznljuk, ilyenkor csak nevet adunk a paramternek. A hasznlatban az a klnbsg, hogy ha rossz adattpus adatot adunk meg, akkor a ltrehozott paramter esetn rgtn hibazenetet kapunk s tudunk javtani, mg az adattpus nlkli paramternl elindul a lekrdezs s nem hoz eredmnyt, vagy hibazenettel megll. Ilyenkor jra kell indtani a lekrdezs futtatst. 6-25

Ugyanazt a paramtert egy lekrdezsen bell tbbszr is felhasznlhatjuk. A lekrdezsben a paramtert szgletes zrjelek ([ ]) kztt kell megadni. Pldk: 1. Krdezzk le a HALLGAT tblbl az adott vfolyamra jr hallgatk nevt s vfolyamt! Mentsk a lekrdezst AZONOS_VFOLYAM nven!

A megolds a 6.13. brn lthat. A lekrdezs lefuttatsakor az ACCESS rkrdez az VFOLYAM paramter aktulis rtkre. Miutn ezt megadtuk, vgrehajtja a lekrdezst.

6.13. bra: 2.

Paramteres lekrdezs a paramtert kr ablakkal

Krdezzk le a MITHALLGAT tblbl a hallgatk s a tantrgyak kdjt s azt, hogy hny gyakorlati pontjuk lenne, ha valahny szzalkkal megemelnnk a pontokat Emelt pontok nven! Azt, hogy hny szzalkkal emelnk, paramterrel lehessen megadni! Ez egyben arra is plda, hogy miknt kpezhetnk egy lekrdezsben j mezt ms mez(k) rtkeibl. Mentsk a lekrdezst SZZALKOS_EMELS nven! A megolds a 6.14. brn lthat.

6.14. bra:

Paramter a mezben 6-26

Lekrdezs tbb tbla adataibl kls joinnal Az sszekapcsolt tblkbl ksztett lekrdezseknl automatikusan bels join jn ltre a tblk kztt. Egy-egy lekrdezs erejig ezeket a kapcsolatokat mdosthatjuk. (A kls joinrl ld. 4.5.6.2. pont.) Miutn a lekrdezshez hozzadtuk a megfelel tblkat, a kapcsolat vonalra jobb egrgombbal kattintva a gyorsmenbl kivlaszthatjuk az Illesztsi tulajdonsgok pontot. Itt be tudjuk lltani, hogy melyik tblbl jelenjenek meg azok az adatok is, amelyekhez nem kapcsoldik adat a msik tblbl, vagyis jobb, vagy baloldali kls joint hozunk-e ltre. Ha a belltst vltoztatjuk, akkor a vonal nyll alakul. Pldk 1. Ksztsnk lekrdezst, amely megadja, hogy az egyes oktatk hallgati milyen tlagosztlyzatot rtek el. Ha van olyan oktat, akinek nincs mg egyetlen hallgatja sem, az is jelenjen meg a lekrdezsben. A kt lekrdezett mez felirata oktat s tlag legyen! Mentsk a lekrdezst OKTATK_EREDMNYEI nven.

6.15. bra:

Kls join s az Illesztsi tulajdonsgok ablak

6-27

A megolds a 6.15. brn lthat. Ha futtatjuk a lekrdezst s olyanok az adataink, akkor tapasztalhatjuk, hogy az Avg fggvny nem kerekt, hanem akr 14 tizedesjegyet is megjelent. 2. Mdostsuk az elz lekrdezst gy, hogy az tlagosztlyzat egy tizedesre legyen kerektve! A lekrdezst mentsk r az elz OKTATK_EREDMNYEI lekrdezsre!

A megolds a 6.16. brn lthat. A kerektshez a kerek fggvnyt hasznltuk fel (ld. 6.1.2.3. pont). Mivel nem egyszer sszests szerepel a lekrdezsben, hanem egy sszetett kifejezs, a lekrdezs tervez ablakban az tlag oszlopnl a teljes kifejezst a Mez sorba kell rni s az sszests sorban az Expression kifejezst kell vlasztani.

6.16. bra:

Kls join s kerekts

6.1.4.2. Egyb lekrdezsek ltrehozsa grafikusan Ha megnyitjuk a lekrdezs-tervezt, alaprtelmezs szerint mindig vlaszt lekrdezs ltrehozst ajnlja fel. Ezen a Lekrdezs menpontban, vagy az eszkztr Futtats eltti ikonjval vltoztathatunk. Az ikon mindig az ppen aktulis lekrdezstpusnak megfelel. Amikor rkattintunk, egy legrdl listbl lehet vlasztani az albbi lekrdezs-tpusok kzl: kereszttbls lekrdezs, tblakszt lekrdezs, frisst lekrdezs, hozzfz lekrdezs, trl lekrdezs. Az albbiakban rszletesen ismertetjk ezeket a lekrdezseket. A lekrdezs elnevezse mellett feltntettk az utastsnak megfelel ikont is.

6-28

Kereszttbls lekrdezs A kereszttbls lekrdezs egy kimutatshoz hasonl tblzatot hoz ltre. Meg kell adnunk legalbb egy sor- s egy oszlopfejlcet s egy rtk mezt. A sor s oszlopfejlcek alapjn fog sszesteni s az rtkmeznl belltott fggvnyt fogja kiszmolni. A kereszttbls lekrdezs mindig sszest lekrdezs. Teht a lekrdezs tervezablakban megjelenik az sszest lekrdezsnl megismert sszests sor a mr megismert vlasztsi lehetsgekkel. Ezen kvl megjelenik egy Kereszttbla sor is. Itt a kvetkez lehetsgek kzl vlaszthatunk minden meznl: Sorfejlc: a mez rtkei alkotjk a tblzat sorainak elnevezseit. Oszlopfejlc: a mez rtkei alkotjk a tblzat oszlopainak elnevezseit. rtk: a mez rtkeibl szmtja ki a program a megadott csoport fggvnyt. (nem lthat): ez a mez csak csoportostsban, rendezsben, vagy felttelben szerepel, de a tblzatban nem jelenik meg. Adatlap nzetben nem ltszik, hogy az oszlopfejlc s a szmtott rtkek melyik mezbl szrmaznak. rdemes lehet a tervezsnl erre gondolni s gy megfogalmazni az oszlopfejlc kifejezst, hogy szvegsszefzssel hozzfzzk, hogy milyen rtkek tallhatk a tblzatban. Plda 1. Ksztsnk lekrdezst, ami vfolyamonknt s tantrgyanknt megadja az osztlyzatok tlagt. Mentsk a lekrdezst VFOLYAMTLAGOK nven! A megolds a 6.17. brn lthat.

6.17. bra: Tblakszt lekrdezs

Kereszttbls lekrdezs

Ezzel a lekrdezssel meglv tblkbl s nzetekbl egy j, adatokkal feltlttt tblt hozunk ltre A lekrdezsnl meg kell adnunk, hogy mi legyen a neve az j tblnak s hogy az a jelenlegi adatbzisba kerljn, vagy egy msikba. Ezutn a lekrdezst egy egyszer vlasztlekrdezsknt kell megadnunk. Az j tbla a lekrdezsben megadott

6-29

mezkkel s adatokkal fog ltrejnni. A futtats s az adatlap nzet itt klnbzik. Az adatlap nzet csak megmutatja, hogy hogy nz ki a lekrdezs, a futtats viszont ltre is hozza az j tblt. jra futtats nvegyezs miatt nem lehetsges, csak ha a korbban ltrehozott tblt trljk. Az j tblban az adattpusok megmaradnak, de nem lesznek indexek s elsdleges kulcs sem. Ezeket utlag, a tbla tervez nzetben ltrehozhatjuk. Plda 1. Definiljunk egy j tblt VIZSGK nven, ami a tantrgy tblbl tartalmaz minden adatot azokrl a tantrgyakrl, amibl van vizsga! A megolds a 6.18. brn lthat.1

6.18. bra: Frisst lekrdezs

Tblakszt lekrdezs

A frisst, vagy mdost lekrdezs segtsgvel a tbla adataiban akrhny sor mdostsa hajthat vgre egyszerre. A tervez rcsbl hinyzik a rendezs s a megjelents sor, mert ez a lekrdezs a tbla tartalmt mdostja, nem megjelenti. Ehelyett szerepel a mdosts sor, ahol megadhatjuk, hogy az adott mez rtkei mire mdosuljanak. Ha nem adunk meg felttelt, akkor a tbla minden rekordjban mdosul a mez rtke, ha adunk felttelt, akkor csak a felttelnek megfelel rekordokban. Adatlap nzetben megnzhetjk, hogy melyik rekordok fognak mdosulni. Futtatskor kirja a program, hogy a mdosts hny sort rint, s nyugtzs utn vgrehajtja a mdostst. Ha egy rekordban a mez rtke korbban is ugyanaz volt, mint amire most mdostjuk az akkor is mdostsnak szmt. A mdosts sorba berhatunk konkrt rtket, vagy kifejezst is. Ha a mdosts sorn egy, vagy tbb rekordban az adott mez rtke olyan rtkre mdosulna, ami nem felel meg a tbla defincijnak, akkor figyelmeztet zenetet kapunk,
1

Igen vatosan bnjunk az ilyen redundns tblk ltrehozsval! Csak akkor hasznljuk, ha az adatbzisnak egy adott pillanatban meglv szerkezett s llapott akarjuk az j tblban rgzteni! Ha ugyanis egy tantrgynl a vizsgaktelezettsg megvltozik, akkor nem csak a TANTRGY, hanem a VIZSGK tblt is mdostanunk kell. Sokkal helyesebb, ha tbla helyett trolt lekrdezsknt, nzetknt definiljuk VIZSGK-at. Ugyangy hasznlhatjuk, mintha tbla lenne, de gy mindig szinkronban lesz a TANTRGY s a VIZSGK tartalma.

6-30

amibl kiderl, hogy hny rekordot nem lehet mdostani s milyen okbl. Eldnthetjk, hogy mi trtnjen: nem futtatjuk a lekrdezst s mdostunk a lekrdezsen, vagy figyelmen kvl hagyjuk a figyelmeztetst s a szablyt nem srt rekordokra vgrehajtjuk a mdostst. Ha egy mdost lekrdezst tbbszr lefuttatunk, akkor minden futtatsnl a mdosult adatok tovbb mdosulnak. Ha vgrehajtottunk egy frisstst, akkor azt mr nem tudjuk visszavonni. Ez a lekrdezs tpus megfelel az SQL UPDATE utastsnak (ld. 5.6.3.4. pont). Plda 1. Ksztsnk frisst lekrdezst, ami a HALLGAT tbla rekordjaiban az vfolyam rtkt megnveli 1-gyel! Ha vannak olyan hallgatink, akik tdvesek, akkor a frisstst nem tudjuk vgrehajtani, mert megsrtjk azt az rvnyessgi szablyt, hogy az vfolyam 1 s 5 kztt kell legyen. Mdostsuk a lekrdezst gy, hogy azokra a rekordokra vonatkozzon, ahol az vfolyam nem 5.1 Ha tbbszr futtatnnk a lekrdezst, akkor legksbb a 4. futtats utn eljutnnk oda, hogy minden hallgat tdves lenne. Ezt ne tegyk meg. Csak egyszer futtassuk a lekrdezst! A megolds a 6.19. brn lthat.

6.19. bra: Hozzfz lekrdezs

Frisst lekrdezs

Ezzel a lekrdezssel egy meglv tblba tudjuk bevinni egy lekrdezs eredmnyt. Hasonlan mkdik, mint a tblakszt lekrdezs, csak itt elre kell ltrehozni a tblt, amibe a vlaszt lekrdezs adatai kerlnek. Vigyzni kell arra, hogy a lekrdezett mezk szma, tpusa s sorrendje megfeleljen a tbla mezinek. Az utasts megfelel a begyazott szelekttel megadott INSERT SQL utastsnak (ld. 5.6.3.5. pont).

Ezzel a formailag helyes megoldssal azonban egy komoly logikai hibt vihetnk be az adatbzisba. Ha korbban voltak tdvesek, akkor mostantl vfolyam szerint nem fogunk tudni klnbsget tenni kztk s azok kztt, akik a mdosts eredmnyeknt most lettek tdvesek.

6-31

Trl lekrdezs Ezzel a lekrdezssel akrhny rekordot tudunk trlni egy tblbl. A tervezrcs a frisst lekrdezs rcshoz hasonl, csak a Mdosts sor helyett Trls szerepel. A Trls sornak csak akkor van jelentsge, ha a trls felttelt begyazott szelekttel msik tblbl adnnk meg. Egyszer trls estn nem kell vele foglalkoznunk, automatikusan a Where kulcssz jelenik meg. Ha nem adunk meg felttelt, akkor a tbla minden rekordja trldik. Ha a tblra idegen kulccsal hivatkozik msik tbla s olyan rekordot akarunk trlni, amire van hivatkoz rekord, akkor errl figyelmeztetst kapunk s ha a kapcsolat belltsnl nem engedtk meg a kaszkd trlst (ld. 4.4.3.2 s 6.1.2.6. pontok), akkor ugyangy, mint a frisstsnl eldnthetjk, hogy a trlhet sorok trldjenek, vagy visszatrnk a tervezshez. Az utasts megfelel a DELETE SQL utastsnak (ld. 5.6.3.3. pont). 6.1.4.3. ACCESS SQL Az ACCESS adatbzis-kezel htterben is SQL motor mkdik. Mint azt eddig is lttuk, minden utastsunk gyakorlatilag egy SQL utasts. Az elz pontokban trgyalt lekrdezseknl mindig lehetsgnk van az utasts SQL kdjnak megnzsre is a Nzet men SQL nzet menpontjval, vagy a nzetvlt ikonon az SQL vlasztsval. Az utastsok szintaktikja tbbnyire megegyezik a 5. fejezetben bemutatottakkal. Bizonyos utastsokat az ACCESS automatikusan msknt fogalmaz meg, de ha berjuk, elfogadja amgy is. Pldul a feltteleknl a szksgesnl tbb zrjelet hasznl, de ha mi rjuk, nem baj, ha csak a szksges minimlis szm zrjelet hasznljuk. Fontos szintaktikai klnbsg, hogy a tblk s a mezk nevt, ha nem egy szbl llnak, akkor []-be kell rni (ha egy szbl llnak, akkor sem okoz hibt, ha kitesszk a zrjelet)1. Van nhny olyan feladat, amit csak a grafikus lekrdezs-szerkeszt fellet segtsgvel nem lehet megoldani. Ezekhez mindenkppen az SQL kdba kell belernunk. Megtehetjk azt is, hogy a teljes lekrdezst SQL-ben rjuk meg, de vlaszthatjuk azt a lehetsget is, hogy amit tudunk, megszerkesztnk a grafikus felleten s csak utna mdostunk a kdon. Nzznk nhny pldt, amiben szksgnk van az SQL kdra. Azonos sorok kihagysa A lekrdezs nem biztos, hogy tartalmazza az eredeti tbla kulcst, gy elfordulhat, hogy ismtld sorok kerlnek a lekrdezett tblzatba. Ha nem szeretnnk, hogy az azonos sorok ismtldjenek, akkor a ksz lekrdezs SQL nzetben a SELECT kulcssz utn be kell rnunk a DISTINCT kulcsszt. Plda 1. Krdezzk le, hogy Quittner Pl rit hnyadves hallgatk hallgatjk!

Ha a szoksos mdon elksztjk a lekrdezst, az oktato mezhz meghatrozzuk a felttelt s megjelentjk az vfolyam mezt (a lekrdezshez mindhrom tblzatot hozz kell adnunk, mert a MITHALLGAT tblbl ugyan nem krnk adatot, de az teremti meg a kapcsolatot a msik kt tbla kztt), akkor minden vfolyam annyiszor fog szerepelni, ahny olyan vfolyamos hallgat felel meg a felttelnek. Neknk azonban elg minden vfolyamot egyszer megjelenteni. Menjnk t SQL nzetbe s rjuk be a szksges DISTINCT kulcsszt.

Ezrt gyakorlati szempontbl javasoljuk, hogy minden objektum- s meznv csak egy sz legyen, vagy ha mgis tbb szbl akarjuk sszerakni, akkor ezeket alhzs jellel (_) kapcsoljuk ssze.

6-32

Mentsk a lekrdezst QUITTNER_VFOLYAM nven! (A lekrdezs a mdostssal egytt is vlasztlekrdezs.) Megolds: SELECT DISTINCT HALLGAT.evf FROM HALLGAT INNER JOIN (TANTRGY INNER JOIN MITHALLGAT ON TANTRGY.tid=MITHALLGAT.tid) ON HALLGAT.hid = MITHALLGAT.hid WHERE (((TANTRGY.oktato) = Quittner Pl)) ORDER BY HALLGAT.evf; Ha korbban eltroltuk az OKTATS lekrdezst (ld. 6.1.4.1. pont), akkor egyszerbben is megfogalmazhatjuk a feladatot: SELECT DISTINCT evf FROM OKTATS WHERE oktato = Quittner Pl ORDER BY evf; Egyest lekrdezs Az egyest lekrdezssel lehetsgnk van kt (vagy tbb) tbla s/vagy trolt lekrdezs (nzet) unijnak vagy metszetnek (ld. 4.5.7. s 4.5.8. pont) ellltsra. Ennek felttele, hogy a komponensek uni kompatibilisek legyenek, egyez sorrendben lv, azonos szm s tpus oszlopbl lljanak. A lekrdezseket megszerkeszthetjk kln s az SQL kdokat egyms al msolva sszefzhetjk ket az UNION vagy az INTERSECT kulcsszval. Az uni (UNION) mindkt objektum sorait szolgltatja, a metszet (INTERSECT) csak azokat, amelyek mindkettben benne vannak. Plda 1. Ksztsnk lekrdezst, ami kirja az adatbzisban szerepl sszes nevet (a hallgatk nevt sszefzve) s kln oszlopba, hogy hallgat, vagy oktat. Mentsk a lekrdezst NEVEK nven! Megolds: SELECT [vnev]& &[knev] As NV, Hallgat As Beoszts FROM HALLGAT UNION SELECT oktato, Oktat FROM TANTRGY; Begyazott szelekt Elfordulhat, hogy egy lekrdezs felttelt egy msik lekrdezssel tudjuk megfogalmazni. Ehhez a felttelbe a lekrdezst SQL kddal kell bernunk. Plda 1. Krdezzk le azon hallgatk adatait, akik egy vfolyamra jrnak egy bizonyos kd hallgatval. A kdot paramterknt lehessen megadni! Mentsk a lekrdezst VFOLYAMTRSAK nven!

6-33

A megolds a 6.20. brn lthat. Ez a lekrdezs is paramteres vlaszt lekrdezs, a kod paramter aktulis rtkt kell megadnunk.

6.20. bra: Egyb SQL utastsok

Szelekt a felttelben

Lekrdezsknt indtva, ha ttrnk SQL nzetre majdnem minden korbban tanult SQL utastst megrhatunk s futtathatunk. Hasznlhatjuk a CREATE TABLE, DROP TABLE, ALTER TABLE, INSERT, UPDATE, DELETE utastsokat. Az utastsok szintn elmenthetk. Termszetesen bizonyos utastsok nem futtathatk tbbszr. Pldul nem hozhatunk ltre kt ugyanolyan nev tblt. Az els hrom felsorolt utasts adatdefinil lekrdezs nven szerepel ( ). 6.1.5. rlap Az adatkezelsnl mr emltettk, hogy adatok kezelsre (bevitelre, mdostsra, trlsre) lehetsg van rlapokon keresztl is (ld. 6.1.3. pont). Az ACCESS vltozatos lehetsgeket ajnl fel az rlapokkal kapcsolatban. Gyorsvarzsl segtsgvel ltrehozhatunk automatikus rlapokat a tblinkhoz, lekrdezseinkhez, vagy varzsl segtsgvel sszetettebb rlapokat kszthetnk. Tervez nzetben formzhatjuk, talakthatjuk rlapjainkat. Lehetsgnk van olyan felhasznlbart rlapok ltrehozsra, amelyek megknnytik az adatbevitelt, minimlisra cskkentik a hibzs lehetsgt listk alkalmazsval. Ezek elksztse azonban mr komoly munkt ignyel. rlap kszthet tblinkbl s a legtbb lekrdezsnkbl is. Kivtel ez all az adatdefinil, a frisst, a trl, hozzfz s tblakszt lekrdezs. Ha az rlap olyan mezket tartalmaz, amelyek egyrtelmen tartoznak egy tbla rekordjaihoz, akkor tudunk

6-34

rajtuk mdostani, ha nem, akkor csak megnzni tudjuk ket tlthatbb formban, mint az adott objektum adatlap nzetben. Tekintsk t az rlapok ltrehozsnak lehetsgeit a legegyszerbbtl egy sszetettebb feladat megoldsig. 6.1.5.1. rlap ksztse gyorsvarzslval A gyorsvarzslval ksztett rlap (az ACCESS ezt autorlapnak nevezi) a tbla, vagy lekrdezs minden mezjt beviteli mezben jelenti meg egy oszlopos rlapon. Az oszlopos rlap azt jelenti, hogy egyszerre csak egy rekord adatai lthatk, a rekord mezi pedig egyms alatt oszloposan helyezkednek el. Ha a tbla idegen kulccsal hivatkozik egy msik tblra, akkor sszetett rlap jn ltre, azaz nem csak a hivatkoz tbla adatait tudjuk megtekinteni, hanem a msik, a hivatkozott tblban lv, hozz kapcsold adatokat is. A kapcsold adatok egy adatlap rlapon jelennek meg. Az adatlap rlap gy nz ki, mint a tbla adatlap nzete. Az rlap aljn mindig lthat, hogy hny rekordunk van sszesen, s azok kzl melyiknl tartunk. Lptet nyilak segtsgvel lphetnk a rekordok kztt. A 6.21. brn a HALLGAT tblbl ltrehozott autorlap lthat.

6.21. bra:

Gyorsvarzslval ltrehozott rlap

Ilyen rlap ltrehozsnak legegyszerbb mdja, ha objektumaink kzl kivlasztjuk azt, amelyikbl az rlapot kszteni szeretnnk s az eszkztron a ikont vlasztjuk, vagy a Beszrs menbl az Autorlapot vlasztjuk.

6-35

Az rlapot a szoksos mdokon menthetjk. Nevet a mentskor kell neki adnunk.1 Az rlap gyorsvarzsl hasznlatnak msik mdja, ha az objektumtpusok kzl az rlapot vlasztjuk. Az adatbzisablak eszkztrn a ikonnal j objektumot tudunk ltrehozni. A megjelen ablakban megadhatjuk, hogy melyik tblbl, vagy lekrdezsbl kszljn az rlap. A felsorolt listban tbb Autorlap lehetsget tallunk. Ezek: Oszlopos: ha itt vlasztjuk az oszlopos elrendezst, akkor a kapcsolt tbla adatai nem jelennek meg. Tblzatos: a rekordok egyszerre jelennek meg a kpernyn (ha tl sok van, akkor grgetsv jelenik meg). Minden adat beviteli mezben van. Hasonlt az adatlaphoz, de nem ugyanaz. Adatlap: megegyezik a tbla, vagy lekrdezs adatlap nzetvel. Kimutats s Kimutatsdiagram: ezek az adatok kimutatsszer megjelentsre szolgl nzetek valjban s nem igazn illeszkednek az rlapok logikjba ezrt e knyv kereteiben nem trgyaljuk ket. Plda 1. Hozzunk ltre gyorsvarzslval rlapot a HALLGAT tblbl! A megolds a 6.21. brn lthat.

6.1.5.2. rlap ltrehozsa varzslval Ha az j objektum listjbl a varzslt vlasztjuk, akkor nem kell az els lapon megadnunk a tblt, ugyanis varzslval tbb tblbl, lekrdezsbl is kszthetnk egy rlapot. Ha az rlapok objektumlistjbl az rlap ltrehozsa varzsl segtsgvel pontot vlasztjuk, akkor helybl erre a msodik oldalra jutunk. Itt tudjuk megadni, hogy melyik tblk, lekrdezsek melyik mezit szeretnnk az rlapra tenni. Csak olyan tblk adatait kombinlhatjuk, melyek kapcsolatban llnak egymssal. Ha olyan adatokat szeretnnk az rlapra tenni, amelyek nem kapcsoldnak, akkor figyelmeztetst kapunk s nem tudunk tovbblpni. Ha csak egy tblbl vlasztottunk, akkor a kvetkez lpsben azt kell megadnunk, hogy milyen felpts legyen az rlap. Itt a megismert lehetsgeken kvl a sorkizrt szerepel mg, ami elrendezsben olyan, mint a tblzatos, de egyszerre csak egy rekord ltszik. A kvetkez lpsben az rlap stlust vlaszthatjuk ki klnbz beptett stlusok kzl. Ha ezt is megadtuk, akkor mr csak az rlap nevt kell jvhagynunk s eldnthetjk, hogy a munkt tervezs, vagy rlap nzetben folytatjuk. Ha kapcsold tblkbl vlasztottunk, akkor a kvetkez lpsben eldnthetjk, hogy egyszer rlapunk legyen, azaz minden adat egyetlen rlapon jelenjen meg, vagy a kt tbla adatai klnljenek el. Ez utbbi esetben mg mindig kt lehetsgnk van. A segdrlap, amikor a csatolt tbla rlapja belegyazdik a frlapba s a csatolt rlap, amikor a csatolt tbla rlapja kln rlapknt jelenik meg. A ftbla rlapjn egy gomb segtsgvel tudjuk ki-be kapcsolni a csatolt rlapot. A kvetkez ablakban megadhatjuk a szerkezetet, utna a stlust s vgl a nevet. Mivel akr segdrlapot, akr csatolt rlapot vlasztottunk gyakorlatilag kt rlapunk van, termszetesen kt nevet kell adnunk.
Ha csak egy tblzatba/lekrdezsbe visznk be adatokat, akkor az rlapot s a tblzatot/lekrdezst is clszer azonos nvvel jellni. Ha egy tblzathoz/lekrdezshez tbb rlap tartozik, vagy egy rlappal tbb tblzatba/lekrdezsbe visznk be adatokat, akkor az rlap nevvel utaljunk arra, hogy az milyen objektum(ok)hoz kapcsoldik.
1

6-36

Plda 1. Ksztsnk rlapot tantrgyanknt a hallgatk osztlyzatrl! A hallgatknak jelentsk meg a teljes neve mellett az vfolyamt is. A frlapot mentsk TANTRGYANKNTI_OSZTLYZATOK nven, a segdrlapot pedig HALLGAT_LISTA nven! A megolds sorn a kvetkez lpseket kell vgrehajtanunk: Az rlap varzslban a HALLGAT tblbl kivlasztjuk a vezetk s keresztnevet valamint az vfolyamot, a MITHALLGAT tblbl az osztlyzatot s a TANTRGY tblbl a trgyak megnevezst. A msodik lpsben az adatok elrendezsnl a TANTRGY tblt emeljk ki. (Nzzk meg, hogy a msik kt tbla vlasztsval hogy nzne ki az rlap felptse.) Vlasszuk a mintaablak alatt az rlap segdrlappal belltst (ld. 6.22. bra).

6.22. bra:

rlap varzsl

A harmadik lpsben a segdrlap szerkezett adhatjuk meg, ez lehet tblzatos, vagy adatlap (a kimutatsokat ne vlasszuk). A neknk tetsz stlus kivlasztsa utn adjunk az rlapoknak megfelel nevet s nzzk meg a vgeredmnyt. Egy lehetsges megolds a 6.23. brn lthat.

6-37

6.23. bra:

Varzslval ksztett rlap a tantrgyanknti osztlyzatokrl

6.1.5.3. rlap tervnek mdostsa Tervez nzetben az rlap rlap nzetnek mdostst tudjuk vgrehajtani. Teljesen nullrl is sszellthatunk egy rlapot tervez nzetben, de ltalban rdemes varzslval elkszteni a vzat s csak a mdostsokat kszteni el tervez nzetben. A knyv terjedelme nem teszi lehetv minden lehetsg bemutatst, gyhogy egy konkrt pldn keresztl nznk meg nhny hasznos opcit. Az rlap varzslval trtn ltrehozsa utn menjnk tervez nzetbe. Minden rlap hrom rszbl ll: rlapfej, trzs s rlaplb. A varzslval kszlt rlapnak se feje, se lba nincs, de a tervez nzetben ltszik, hogy lehetne. A Nzet menben ki s be tudjuk kapcsolni, hogy legyen-e rlapfej s rlaplb. Ugyangy a Nzet menben kapcsolhatjuk be, hogy legyen-e oldalfej s oldallb. Ennek nyomtatsban van jelentsge. Ha nyomtatsban az rlap nem fr el egy oldalon, akkor az oldalfej s oldallb tartalma minden oldalon megjelenik, mg az rlapfej s rlaplb csak egyszer jelenik meg az egsz rlap elejn s vgn. Az rlap minden rsznek mrete egrvonszolssal mdosthat. Tervez nzetben megjelenik az Eszkzkszlet eszkztr (6.24. bra), ami szintn a Nzet menben kapcsolhat ki-be. Ezen az eszkztron talljuk meg az rlapon elhelyezhet vezrlket. Az rlapfejbe szeretnnk rni az rlap cmt. Ehhez a Felirat eszkzre van szksgnk. Kivlasztva az eszkzt rajzoljunk egy tglalapot az rlapfej rszbe, majd rjuk bele a Hallgatk adatai szveget. A tglalap a sarkainl s oldalainl fogva tmretezhet s a bal fels sarknl fogva thelyezhet.

6.24. bra:

rlap eszkzkszlete

Az rlap brmelyik rsze kijellhet. Kln az rlapon elhelyezett vezrlelemek s kln az rlap rszei is a megfelel szrke svra kattintva. Az eszkztr, a gyorsmen, vagy a Nzet men Tulajdonsgok pontjval az ppen kijellt elem tulajdonsgait nzhetjk s vltoztathatjuk meg.

6-38

Az rlap bal fels sarknl lv jelllapka segtsgvel jellhetjk ki az egsz rlapot s akkor a tulajdonsgok ablak az egsz rlap tulajdonsgait fogja tartalmazni. A tulajdonsgok kztt vannak formai tulajdonsgok: szn, bettpus, mretbelltsok. Ezenkvl lehetnek adattulajdonsgok, ahol az tekinthetjk meg, hogy az adott elem hogyan kapcsoldik az adatbzishoz. Lthatjuk pldul, hogy az rlap megrzi a kiindul tbla szr s rendezs tulajdonsgait. Az esemny tulajdonsgoknl az rlapelemhez kapcsold esemnyekhez tudunk eljrsokat csatolni. Ezekre ebben a knyvben nem trnk ki. Mindig tallhat egy sszes fl, ahol csoportosts nlkl megtalljuk egytt az sszes tulajdonsgot. Pldk 1. Hozzunk ltre varzsl segtsgvel egy oszlopos rlapot szabvnyos stlussal a HALLGAT tbla minden mezjbl. Mentsk el HALLGAT_OSZLOP_MOD nven s nyissuk meg tervez nzetben. Mdostsuk az rlapot gy, hogy legyen cme, az aljn lthat legyen mindig az aktulis dtum s az vfolyamot listbl lehessen kivlasztani. Az rlap megjelensn is mdostsunk (httrszn, feliratok szne). A megolds tervez s rlap nzete a 6.25. brn lthat.

6.25. bra:

Hallgatk adatai rlap tervez s rlap nzetben

lltsunk be az rlapnak neknk tetsz httrsznt! Az rlapfejben lv cmet formzzuk, emeljk ki! Az rlaplbba helyezznk el az eszkzkszletrl egy beviteli mezt ( )! A beviteli mez mindig kt sszekapcsolt elem, ugyanis a beviteli mezhz mindig tartozik egy felirat is. A felirat legyen az, hogy Mai dtum:, a beviteli mezbe pedig lltsuk be kifejezsknt a mai dtumot ad fggvnyt: =date()! A kvetkez lps, hogy az vfolyamot ne berni lehessen, hanem listbl kivlasztani. Ehhez vlasszuk ki az vfolyam beviteli mezjt s a gyorsmenben, vagy a Formtum menben vlasszuk a Tpus megvltoztatsa pontban megjelen listbl a Kombi panelt! Ezzel mr legrdl listnk van, de a lista nem tartalmaz elemeket. Ehhez mg a Tulajdonsgok ablak Adat lapjn be kell lltanunk, hogy milyen elemeket tartalmazzon a lista.

6-39

A sorforrs tpusnak lltsuk be, hogy Lista a sorforrs tulajdonsghoz pedig rjuk be az vfolyamokat pontosvesszvel elvlasztva. Most mr ha rlap nzetbe megynk, akkor lthatjuk, hogy valban a listban csak az ltalunk megadott vfolyamok kzl lehet vlasztani. Vigyzat, ha az adatok nzegetse kzben a listbl msik vfolyamot vlasztunk, a vltoztats azonnal bekerl az adatbzisba visszakrdezs s megersts nlkl. Mentsk az rlapot! 2. Hozzunk ltre oszlopos rlapot a MITHALLGAT tbla adataibl! Mdostsuk az rlapot gy, hogy HID s TID helyett listbl lehessen kivlasztani a hallgatk s a tantrgyak nevt!

A megoldshoz a HID beviteli mezjt alaktsuk t listapanell, majd mdostsuk a tulajdonsgait a kvetkezkppen: Sorforrs tpusa: Tbla/lekrdezs Sorforrs: SELECT HALLGAT.vnev, HALLGAT.knev, HALLGAT.hid gomb megnyomsval a szoksos FROM HALLGAT; Az SQL utastst a grafikus mdban szerkeszthetjk. Kttt oszlop: 3. Ez azt jelenti, hogy a lista 3. oszlopa fog bekerlni a tblba. Oszlopszm: 2. Ez azt jelenti, hogy a sorforrsnak megfogalmazott lekrdezs els kt oszlopa jelenik meg a listban. Ennek alapjn knnyen megszerkeszthetjk a tid helyre is a tantrgyak listjt. Egy lehetsges megolds a 6.26. brn lthat.

6.26. bra: 6.1.6. Jelents

MITHALLGAT rlap legrdl listval

Az adatbzisban szerepl adatok rendezett megjelentse, sszestsekkel val kiegsztse valsthat meg jelentsek segtsgvel. Ugyangy, mint az rlapoknl lehetsgnk van gyorsvarzsl, vagy varzsl hasznlatra, vagy kszthetnk, mdosthatunk jelentseket tervez nzetben. Az adatbzis ablakban a Jelentseket vlasztva az ablak eszkztrn az ikonra kattintva a kvetkez lehetsgek kzl vlaszthatunk: Tervez nzet: jelentsek ltrehozsnl nem javasoljuk a tervez nzet hasznlatt, csak meglv jelentsek mdostsnl. Jelents varzsl: tbb lpsben adhatjuk meg az ignyeinknek megfelel jelents adatait. AutoJelents: Oszlopos: gyorsvarzsl, melynek segtsgvel a megadott tblzatbl, vagy lekrdezsbl azonnal ltrejn egy oszlopos jelents. Ennek 6-40

elrendezse olyan, mint az oszlopos rlap, azaz az egyes tulajdonsgok egyms alatt jelennek meg mellettk a tulajdonsg rtkvel. Az egyes rekordok oszlopai egyms alatt jelennek meg. sszegzsek nem kerlnek a jelentsbe. Az oldalak aljn megjelenik az aktulis dtum s az oldalszm. AutoJelents: Tblzatos: gyorsvarzsl, melynek segtsgvel a megadott tblzatbl, vagy lekrdezsbl azonnal ltrejn egy tblzatos jelents. Ennek elrendezse olyan, mint a tblzatos rlap, azaz az egyes rekordok a tblzat sorai, az egyes tulajdonsgok pedig az oszlopai. sszegzsek nem kerlnek a jelentsbe. Az oldalak aljn megjelenik az aktulis dtum s az oldalszm. Diagram varzsl: a megadott tblbl az rtkeket tartalmaz mezkbl szmolt csoport fggvnyek klnbz csoportostsban brzolhatk. Cmke varzsl: segtsgvel a tblzat adatai cmke elrendezsben jelenthetk meg s nyomtathatk ki, gy lehetv tve, hogy a gyrilag kszlt etikett lapokra az adatokat megfelelen tudjuk kinyomtatni.

Jelents ksztsekor mindig vlaszthatunk, hogy a ksz jelentst tervez, vagy nyomtatsi kp nzeten szeretnnk-e ltni. A szoksos mdon a Nzet menbl, vagy az eszkztr megfelel ikonjval vlthatunk a nzetek kztt. Nyomtatsi kp nzetben az eszkztr ikonjaival megadhatjuk, hogy hny lapot szeretnnk ltni egyszerre, az ablak aljn pedig lthatjuk, hogy hnyadik oldalon vagyunk s a nyilak segtsgvel tudunk lpkedni a lapok kztt. Az eszkztron a Bellts gombot megnyomva az Oldalbellts ablakot hozhatjuk el, ahol margkat, az oldal elhelyezst s hasbokat llthatunk be. Tervez nzetben lthatjuk, hogy a jelents is tbb rszre tagoldik. Ezek: jelentsfej/jelentslb: az egsz jelents elejn s vgn jelenik meg egyszer, pl. a jelents cme, zr adatok. oldalfej/oldallb: a jelents minden oldalnak tetejn s aljn megjelenik, pl. oldalszm. csoportostsi szintenknt csoportfej/csoportlb: minden csoport elejn s vgn megjelenik, pl. a csoport kzs adatai s a csoportra kiszmolt sszestsek. trzs: a csoportokban szerepl, rekordonknt ismtld elemek. A jelentsfej/lb s az oldalfej/lb a Nzet menben kzvetlenl ki/be kapcsolhat. A csoportostsi szintek a Nzet men Rendezs s csoportosts pontjban, vagy az eszkztr ikonjval llthatk be. Az egyes elemek tmretezse az rlapoknl tanult mdon mkdik. Ksz jelentsnket rich text formtumban exportlhatjuk a MICROSOFT WORD programba s ott a szvegszerkeszt program eszkzeivel tovbb formzhatjuk. Az exportlst megtehetjk a Fjl men Exportls parancsval, vagy az eszkztr ikonjval. Pldk 1. Ksztsnk gyorsvarzslval tblzatos jelentst a HALLGAT tbla adataibl!

Az j jelents ablakban vlasszuk az AutoJelents: Tblzatos pontot s vlasszuk ki a listbl a HALLGAT tblt. A jelents minden tovbbi krds nlkl megjelenik Nyomtatsi kp nzetben. Mentsk a jelentst a szoksos mdok valamelyikn HALLGAT_TBLZAT nven. 2. Ksztsnk varzslval jelentst hallgatnknt az egyes trgyakbl elrt eredmnyekrl. A hallgatkrl jelentsk meg a nevket s vfolyamukat. A tantrgyakrl a nevket, az 6-41

oktatjukat, hogy volt-e bellk vizsga s a gyakorlati pontot s osztlyzatot is. tlagoljuk hallgatnknt, vfolyamonknt s sszesen is az eredmnyeket. A varzslnl megadhatjuk a HALLGAT, TANTRGY s MITHALLGAT tblkat kln is, de megadhatjuk a 6.1.4.1. pontban ksztett OKTATS nzetet is. Vlogassuk ki a megfelel mezket (vnev, knev, vf, tmegnev, oktat, vizsga, gyakpont, osztlyzat). A msodik lpsben kell megadnunk, hogy melyik tbla alapjn legyen a f csoportosts. Ez esetnkben a HALLGAT. A Tovbb gomb megnyomsa utn tovbbi csoportszinteket adhatunk meg. Itt tudjuk kiemelni a hallgatk adatai kzl az vfolyamot csoportost szintknt (ld. 6.27. bra). Csoportok kpzsekor a Csoportostsi belltsok1 gomb segtsgvel megadhat intervallum a csoportkpzshez (pl. ktvfolyamonknt sszestsen). Ezt most nem mdostjuk.

6.27. bra:

Jelents varzsl, csoportostsi szintek belltsa

A kvetkez ablakban adhatjuk meg a rendezst s az sszestsi belltsokat2. A csoportost mezk alapjn eleve megvalsul rendezs, csak azon bell adhatjuk meg most a rendezst. Ez legyen a tantrgymegnevezs alapjn. Meg lehet adni tbb rendezsi szintet s szintenknt rendezsi sorrendet. Mivel hallgatnknt minden tantrgy csak egyszer szerepelhet az adatbzisunk defincija szerint, felesleges tbb rendezsi szintet megadni. Az sszestsi belltsok gomb megnyomsra a 6.28. brn lthat ablakban tudjuk megadni, hogy melyik mezkre (csak a szmokat s a logikai rtkeket tartalmaz mezk jelennek meg), milyen fggvnyeket szeretnnk kiszmoltatni. Adjuk meg a gyakorlati pontokra s az osztlyzatra is az tlagot.

A Csoportostsi belltsoknl dtum esetn megadhatjuk, hogy milyen egysgenknt csoportostson (venknt, negyedvenknt, havonta, stb.), szveg esetn pedig a kezd karakterek szmt. 2 sszestsi belltsokat csak akkor adhatunk meg, ha van csoportosts.

6-42

6.28. bra:

Jelents varzsl, sszestsi belltsok

Ha ezekkel megvagyunk, akkor mr csak formai belltsokat kell megadnunk: az elrendezst, a lapok tjolst (ll, vagy fekv)1, stlust s a jelents cmt. Tjolsnak rdemes jelen feladatnl a fekvt vlasztani, vagy Tmr stlussal llt, a tbbi szabadon vlaszthat. A jelents cme legyen: HALLGATI_EREDMNYEK. Tekintsk meg a jelentst nyomtatsi kpknt. Megoldsunk egy rszlete lthat a 6.29. brn.

6.29. bra:

HALLGATI_EREDMNYEK jelents egy rszlete

Ha sok mezt akarunk egyms mellett megjelenteni, akkor rdemes a fekv, mg ha keveset, akkor az ll tjolst vlasztani.

6-43

3.

Mdostsuk az elz pldban ksztett jelentst gy, hogy a jelents cme vzszintesen kzpre legyen igaztva, egy hallgat adatain bell ne legyen sortrs, minden vfolyam j oldalon kezddjn s az sszegzseknl a felirat Avg helyett tlag legyen. Az tlag rtkek 1 tizedesre legyenek kerektve. Mieltt a mdostst elvgeznnk, ksztsnk egy msolatot a jelentsrl HALLGATI_EREDMNYEK_RGI nven. A mdostott lekrdezst mentsk r a HALLGATI_EREDMNYEK jelentsre s ha meggyzdtnk rla, hogy a mdostott jelents megfelel a terveinknek akkor a HALLGATI_EREDMNYEK_RGI jelentst trljk.

Nyissuk meg a jelentsnket tervez nzetben. Az rlapoknl megtanult mdon tudjuk a jelents egyes rszeinek tulajdonsgait megvltoztatni. A kvetkez lpseket hajtsuk vgre: A jelentsfejben lv cmkt szlestsk ki a jelents teljes szlessgre s lltsunk be r kzpre igaztst. Rendezs s csoportosts ikont. A megjelen Az eszkztron vlasszuk a ablakban a hid-hez megadhatjuk, hogy az Egytt tarts az egsz csoportra vonatkozzon (ld. 6.30. bra).

6.30. bra: 4.

Rendezs s csoportosts ablak

Az oldaltrs megadshoz be kell kapcsolni az Eszkzkszletet (Nzet men). Itt ikont s kattintsunk az vf lblc aljra. Ezzel a lblc tartalma vlasszuk a alatt mindig oldaltrs fog kvetkezni. A hid s az vf lblcben is rjuk t az Avg cmke tartalmt tlag-ra. Az tlagrtket tartalmaz mezben mdostsuk a kpletet, hogy az tlag 1 tizedesre kerektve jelenjen meg (a Round fggvny segtsgvel).

Ksztsnk oszlopdiagramot vfolyamonknt a tantrgyak tlagpontszmrl! Mentsk a diagramot TLAGOK nven.

Az j jelents ablakban vlasszuk a Diagram varzslt s adjuk meg az Oktats nzetet kiindulsnak. A kvetkez ablakban a diagram mezinek adjuk meg az vfolyamot, a tantrgyak megnevezst s a gyakorlati pontszmot. Ezutn adjuk meg, hogy oszlopdiagramot akarunk kszteni. A kvetkez ablakban kell megadnunk, hogy melyik mez milyen mdon szerepeljen a diagramon. A tengelyen szerepeljenek a trgyak, a klnbz oszlopok jelentsk az vfolyamokat s az brzolt mennyisg a gyakpontok sszege helyett az tlaguk legyen (ld. 6.31. bra). (A tglalapra dupln kattintva lehet ms fggvnyt vlasztani.)

6-44

6.31. bra:

Diagram varzsl elrendezs ablaka

Ezek utn mr csak nevet kell adnunk a diagramnak. Ez legyen TLAGOK. Az elkszlt diagramon tervez nzetben termszetesen lehet szpteni. Vltoztats nlkl az ltalunk ksztett diagram lthat a 6.32. brn.

6.32. bra:

vfolyamonknti tantrgytlagok diagramja

6.1.7. Biztonsg, adatvdelem Ebben a pontban kt fontos dologra kell kitrnnk. Az egyik az adatok illetktelen hozzfrk elleni vdelme, a msik az adatbzis biztonsga abban az rtelemben, hogy a hasznlk ne ronthassk el azt. Az adatvdelemmel kapcsolatos menpontokat az ACCESSben az Eszkzk men Adatvdelem pontjban talljuk. Az illetktelen felhasznlk elleni vdelem legegyszerbb lehetsge az, hogy jelszval ltjuk el az adatbzist. Ebben az esetben az Access az adatbzis megnyitsakor kri a jelszt s annak ismeretnek hinyban nem nyitja meg az adatbzist. Mr nyitott adatbzisban azonban brmit megtehet a felhasznl. Md van felhasznli szint vdelem belltsra is oly mdon, hogy klnbz felhasznli csoportokat hozunk ltre s a

6-45

csoportokhoz rendeljk a megfelel jogosultsgokat. Az Access a jogosultsgokra vonatkoz informcikat egy munkacsoport informcis fjlban trolja. A felhasznli szint vdelem segtsgvel meghatrozhatjuk, hogy az egyes felhasznli csoportok szmra mely objektumok (tblk, lekrdezsek, rlapok, jelentsek) lthatk s hogy milyen mveleteket vgezhetnek rajtuk. Ezeken kvl a teljes adatbzisra vonatkoz jogosultsgokat is bellthatunk. Ezek az adatbzis tbbszrzsnek joga, jelsz megadsnak joga s az indtsi belltsok mdostsnak joga. Ha pldul egy felhasznl jelszt adhat meg az adatbzis egy rsznek elrshez, azzal korltozza az adott rsz elrst msok szmra. Annak a felhasznli csoportnak, akinek a fenti jogosultsgokat meg akarjuk adni, Rendszergazda engedlyt kell adnunk. A Rendszergazda engedly a fent felsorolt mindhrom jogosultsgot egytt jelenti. Azok nem kezelhetk kln egymstl. Az adatbzis-kezel programok fontos jellemzje, hogy milyen biztonsgi megoldsokat knlnak arra, hogy az adatbzis integritsa ne srljn. Az Access adatbziskezelben lehetsgnk van tbbek kztt idegen kulcsok belltsra, felttelek megfogalmazsra, kls adatok importlsa helyett csatolsra s a tbbszrztt adatbzisok szinkronizlsra. 6.1.8. Tbb felhasznls kezels Az Access adatbzis-kezel elssorban egyfelhasznls mkdsre van optimalizlva, de a program jabb verzii lehetsget nyjtanak tbbfelhasznls kezelsre is. A lehetsgek: az adatbzis a hlzaton van, s minden felhasznl ugyanazzal az adatbzissal dolgozik prhuzamosan az adatbzisbl tbbszrzssel tbb pldny kszl, ezeket a pldnyokat hasznlja minden felhasznl a sajt gpn, termszetesen ebben az esetben idrl idre szksg van az adatbzisok szinkronizlsra a kett kztti kztes megolds az gynevezett eltr-httr (front-end, back-end) konfigurci, azaz a tblkat tartalmaz adatbzis a hlzaton van s az egyes felhasznlk gpein a tblkra mutat hivatkozsokat tartalmaz adatbzisobjektumok vannak. Termszetesen ha az els megoldst hasznljuk, vagy a harmadik megoldsban a hlzaton lv tblkon mdostunk, akkor szksg van a 8.3. alfejezetben trgyalt zrakra. Access-ben is klnbz szint zrak hasznlatra van lehetsg. A legtgabb, ha az egsz adatbzist kizrlagos mdban nyitjuk meg. Ez gyakorlatilag azt jelenti, hogy az egsz adatbzist elzrjuk msok ell. A felhasznli jogosultsgok belltsnl meg lehet adni, hogy az adott felhasznli csoport megnyithassa-e az adatbzist kizrlagos mdban. Ha nem az egsz adatbzist zrjuk el, akkor vlaszthatunk rekordszint, vagy lapszint zrols kztt. A zrolsi belltsokat az Eszkzk men Belltsok pontjra megnyl ablak Specilis fln adhatjuk meg (ld. 6.33. bra). Ha ezt belltjuk, akkor a kvetkez megnyitstl lesz rvnyes. Ha rekordszint zrolst lltunk be, akkor mg mindig vannak tovbbi lehetsgeink a zrolsi stratgia meghatrozsra: a Nincs zrols kapcsolval megakadlyozhatjuk a rekordok szerkeszts kzbeni zrolst: ez az alaprtelmezs, ltalban csak akkor hasznljk, ha egy felhasznl van csak. Optimista zrolsnak is nevezik. Ha kt felhasznl akarja ugyanazt a rekordot mdostani, akkor amelyik msodszor akarja menteni, az zenetet kap, amely utn eldntheti, hogy mi trtnjen az mdostsval. az sszes rekord kapcsolval szerkesztskor az adott rlap, vagy adatlap sszes rekordjt zrolhatjuk: ez id alatt a rekordok megtekinthetk, de nem mdosthatk, nem trlhetk s j rekordokat sem vehetnk fel.

6-46

a Szerkesztett rekord kapcsolval csak az ppen szerkesztett rekordot zrolhatjuk. Ezt pesszimista zrolsnak is nevezik.

6.33. bra:

Belltsok ablak Specilis fle

rlap s adatlap nzetben minden zrolt rekord jelllapkjn megjelenik a zrolt rekordot jelz szimblum: . Ha optimista zrolst hasznlunk, akkor is ltszik a jelllapkn, ha egy msik felhasznl ppen szerkeszt egy rekordot. Ennek a jele: . Bellthatjuk azt is, hogy az Access milyen idkznknt ksrelje meg elmenteni a ms felhasznlk ltal zrolt, megvltoztatott rekordokat, illetve milyen idkznknt frisstse a rekordokat. 6.2. Internet-alap adatbzis-kezelsi technikk: PHP-MySQL Az 5.7. alfejezetben trgyaltuk az SQL utastsok programba gyazst. Ebben az alfejezetben egy olyan pldt fogunk bemutatni, amelyhez az eszkzk ingyenesen telepthetk. A befogad nyelv a PHP lesz, melyben az SQL egy specilis vltozatt a MySQL nyelvet hasznljuk majd. A fejezetben szerepl pldk az 5. fejezetben ismertetett egyetemi adatbzist hasznljk. 6.2.1. Nhny sz a PHP nyelvrl A knyv keretei nem teszik lehetv a PHP nyelv rszletes ismertetst. Csak azokra a jellemzkre s tudnivalkra trnk ki, amelyek a MySQL hasznlathoz felttlenl szksgesek. A tovbbi rdekldst kielgthetik az irodalomjegyzkben tallhat mvek. A PHP egy olyan programnyelv, melynek segtsgvel lehetsges webes adatbzis alap alkalmazsok mkdtetse. Jellemzen HTML oldalakon hasznljk, de a PHP kd

6-47

csak a szerveren jelenik meg, a felhasznl mr csak a kd ltal generlt HTML oldalt ltja. A knyv pldinl felttelezzk, hogy az olvas ismeri a HTML nyelv alapjait. A HTML oldalba gyazott PHP utastsok kezdett s vgt meg kell jellni. Ezt tbb mdon megtehetjk. A hagyomnyos nyit s zrelemek: <?php utastsok . . . ?> Az utastsokat soronknt kell rnunk s pontosvesszvel (;) kell lezrnunk. A PHP kdba is tudunk HTML kdot gyazni a print() fggvny segtsgvel. A tbbi fggvnytl eltren a print fggvny utn a zrjelek elhagyhatk. Az albbiakban pldt ltunk a PHP kdba gyazott HTML kdra: <php print <h1>Ez a fcm</h1>; ?> Gyakran lehet szksgnk a kdban szvegsszefzsre, pl. vltoztartalmak s HTML kdok egyttes hasznlatra. PHP-ban a szvegsszefzs a pont (.) karakterrel trtnik. A programban hasznlatos vltozk neve egy dollrjelbl ($) s az utna ll nvbl ll (pldul: $a, $elso_szam). A PHP nem deklaratv nyelv, ezrt a vltozkat nem szksges elre ltrehozni s meghatrozni adattpusukat, azok ltrejnnek els hasznlatkor s a bennk lv adathoz igazodik a tpusuk. Mveletvgzskor a mvelet s a mveletben szerepl rtkek jellege szerint alaprtelmezett tpuskonverzi jn ltre. Ahhoz, hogy az adatbzisbl szrmaz adatokat fel tudjuk dolgozni, ismernnk kell a klnbz vezrlsi szerkezetek szintaktikjt is. Az elgazs szintaxisa: if (felttel) { // ha a felttel igaz, akkor ezek az utastsok futnak le }else{ // ha a felttel hamis, akkor ezek az utastsok futnak le } Ismtlsbl tbb flt ismer a programnyelv, ezek a While ciklus, a Do... While ciklus s a For ciklus. A szintaxisok az albbiakban lthatk: while (felttel) { // ismtld utastsok } do { // ismtld utastsok } while (felttel); for (ciklusvltoz=kezdeti rtk; felttel; mdosts){ // ismtld utastsok }

6-48

A HTML oldalakba gyazott rlapok segtsgvel kommuniklhatunk a felhasznlval. Az rlap ltal kldtt adatokat a $_REQUEST globlis tmb segtsgvel hasznlhatjuk fel. Pldul egy rlapot tartalmaz oldalon szerepel az albbi vezrlelem: <input type=text name=vezeteknev> A feldolgozst vgz PHP kdban a $_REQUEST[vezeteknev] kddal tudjuk felhasznlni a bekrt adatot. Fontos megemltennk mg egy fggvnyt, a mysql_real_escape_string()-et, mely a felhasznl ltal bekrt karaktersorozatot gy alaktja t, hogy perjeleket szr a karakterlncba, hogy levdje az aposztrfokat s idzjeleket1. Ezt az talaktst mindig el kell vgeznnk. 6.2.2. Adatbzis-kezels a PHP nyelvben Mieltt elkezdennk dolgozni egy adatbzissal, csatlakoznunk kell a kiszolglhoz. Az erre szolgl fggvny a mysql_connect([szmtgpnv],[felhasznlnv],[jelsz]). Sikeres kapcsolatfelvtel esetn a fggvny egy kapcsolatazonostt ad eredmnyl, amit egy vltozban eltrolunk. Ha hiba van, akkor a die() fggvnnyel kilphetnk a programbl s a hiba lerst a mysql_error() fggvnnyel kaphatjuk meg. $kapcsolat = mysql_connect(localhost,felhasznalo,jelszo); if (!$kapcsolat){ die(mysql_error()); } A kapcsolat bontsra a mysql_close(kapcsolatazonost) fggvny szolgl. Ha csatlakoztunk az adatbzis kiszolglhoz, akkor mg ki kell vlasztanunk az adatbzist a mysql_select_db(adatbzisnv, [kapcsolatazonost]) fggvny segtsgvel. Ha az adatbzis ltezik s hasznlhatjuk, akkor a fggvny visszatrsi rtke igaz. $adatbazis = pelda; mysql_select_db($adatbazis) or die (mysql_error()); Adatkezel utastsok kiadsra szolgl utasts PHP-ben a mysql_query(utasitas,kapcsolat). A gyakorlatban az utastst is egy vltozban szoktuk trolni s paramternek ezt a vltozt adjuk meg. $utasitas = insert into MITHALLGAT values(11111,ORA,80,4); mysql_query($utasitas,$kapcsolat) or die (mysql_error()); Ha az utastst nem statikusan szeretnnk megadni, hanem a programban hasznlt vltozkat szeretnnk hasznlni (host vltozk, ld. 5.7.3. pont), akkor ezt minden tovbbi nlkl megtehetjk a PHP-ben ismert vltozhivatkozsi mdon, azaz a $ jel hasznlatval. $azonosito=11112; $utasitas = insert into MITHALLGAT values($azonosito,ORA,80,4); mysql_query($utasitas,$kapcsolat) or die (mysql_error());

A felhasznl ltal bert karakterek kztt lehetnek olyanok, amiket a fordt program nem tud rtelmezni, vagy nem szvegknt, hanem az utasts rszeknt prblja rtelmezi azokat s ezt lehet megelzni a levdssel.

6-49

6.2.3. A MySQL nyelv sajtossgai A MySQL nyelv alapjaiban megegyezik az 5. fejezetben ismertetett SQL nyelvvel nhny elemben azonban eltr attl. Ezeket az eltrseket tekintjk t ebben a pontban. Az SQL nyelvnl felsorolt opertorok hasznlhatk MySQL-ben is (ld. 5.3.4. pont). Nmelyik opertor ms formban is hasznlhat. Az albbi lista nem teljes: NOT, vagy ! AND, vagy && OR, vagy || <>, vagy != a <=> opertor nem ad NULL rtket, ha az egyik argumentum NULL rtk, hanem ha mindkt rtk NULL rtk akkor IGAZ, ha csak az egyik, akkor HAMIS (ld. 5.3.4.3. pont). A LIKE opertor ugyangy mkdik, a helyettest karakterek (%,_) s jelentsk az 5.4. tblzatban lthatk. A trgyalt adattpusok a kvetkez neveken tallhatk meg: Karakter adattpusok: CHAR(n), VARCHAR(n), LONGTEXT Numerikus tpusok: DEC vagy DECIMAL, FLOAT vagy REAL, DOUBLE PRECISION, INTEGER vagy INT, SMALLINT Dtum, idpont: DATE, DATETIME, TIMESTAMP A MySQL fggvnyei az SQL fggvnyekkel sszehasonltsban a 6.6. tblzatban lthatk. 6.6. tblzat: Fggvnyek sszehasonltsa SQL-ben s MySQL-ben SQL fggvnyek AVG (numerikus argumentum) COUNT(*) vagy COUNT(argumentum) MAX(argumentum) MIN (argumentum) SUM (numerikus argumentum) CONCAT(char-1,char-2) INITCAP(char) Funkci Csoport fggvnyek tlag Darabszm Maximum Minimum sszeg AVG(kif) COUNT(*) vagy COUNT(kif) MAX(kif) MIN(kif) SUM(kif) A fggvny megjelense MySQL-ben

LENGTH(char) LOWER(char) | UPPER(char)

Karakter fggvnyek Szvegsszefzs CONCAT(char-1, char-2, ...) A szkezd karaktereket nincs nagybetss alaktja, de a tbbi karakteren nem vltoztat. Karakterek szma LENGTH(char), CHAR_LENGTH(char) Kisbetss s nagybetss LCASE(char), LOWER(char) | alakt UCASE(char), UPPER(char)

6-50

SQL fggvnyek

Funkci

LTRIM(char) | RTRIM(char) Levgja a kezd ill. a befejez szkzket REPLACE(char,c1,c2) | Karakterek kicserlse REPLACE(char1;c1;c2) TRANSLATE (char,c1,c2) SUBSTR(char,n,m) Az argumentum egy MID(char;m;n), rszlett adja eredmnyl SUBSTRING(char;m;n) Dtum s numerikus fggvnyek ADD_MONTHS Hnap hozzadsa DATE_ADD(date, INTERVAL expr unit) LAST_DAY Hnap utols napja LAST_DAY ROUND Kerekts ROUND SYSDATE vagy CURRENT Aktulis dtum ill. id SYSDATE(), CURDATE(), DATE, CURTIME() CURRENT TIMESTAMP TRUNC Dtum vagy szm TRUNCATE lervidtse YEAR, MONTH, DAY Dtum megfelel rsznek YEAR, MONTH, DAY kivgsa Konvertl fggvnyek TO_CHAR vagy Karakterre konvertls DATE_FORMAT(date), VARCHAR FORMAT(numerikus argumentum) TO_DATE vagy DATE Dtumra konvertls STR_TO_DATE(char,format) TO_NUMBER vagy Numerikus adatra nincs DECIMAL konvertls Egyb fggvnyek NVL vagy VALUE, NULL rtk talaktsa IFNULL COALESCE USER Aktulis felhasznl USER meghatrozsa A PHP nyelv sajtossga, hogy olyan fggvnyeket is hasznl, aminek segtsgvel knny klnbz adatbzis-kezelket, kztk a MySQL-t elrni. Ezeket a 6.7. tblzatban soroltuk fel. 6.7. tblzat: A PHP adatbzis-kezel fggvnyei Fggvny mysql_connect(szmtgpnv, felhasznlnv, jelsz) mysql_error() die() mysql_real_escape_string(szveg) mysql_close(kapcsolatazonost) mysql_select_db(adatbzisnv, kapcsolatazonost) Funkci kapcsolds a kiszolglhoz hiba esetn a hiba lerst adja hiba esetn a futtats megszaktsa a karakterlncot levdi (ld. 6.2.1. pont) kapcsolat bontsa adatbzis kivlasztsa

A fggvny megjelense MySQL-ben LTRIM(char) | RTRIM(char)

6-51

Fggvny mysql_query(utasts, kapcsolat) mysql_num_rows(eredmnyazonost) mysql_fetch_row(eredmnyazonost) stripslashes()

Funkci adatkezel utastsok kiadsa a lekrdezs eredmnynek sorainak a szma a lekrdezs eredmnytbljnak kvetkez rekordjnak mezit adja egy tmbben (ld. 6.2.4. pont), a karakterlncbl eltvoltja a vd karaktereket (vissza perjel slash: \)

Az adatler utastsok megegyeznek az 5.6.2. pontban trgyaltakkal. Objektumok ltrehozsra CREATE, trlsre a DROP, mdostsra az ALTER utastsok hasznlhatk. A MySQL adatbzis f objektuma is a tblzat. Definilhatunk feltteleket s indexeket is. Fontos eltrs, hogy idegen kulcsok definilsra nincs lehetsg. A dokumentciban szerepel az idegen kulcs megadsa, s nem jelez hibt idegen kulcs definilsakor, de a kulcsot nem hozza ltre. Az adatok integritsra a felhasznlnak, illetve a programoznak kell figyelnie. Egyedi kulcs esetn az AUTO_INCREMENT1 kulcsszval egy automatikus szmllbl veszi az oszlop rtkt j rekord felvtelekor. Index definilsakor a UNIQUE kulcsszval egyedi indexet hozhatunk ltre. Az indexoszlop megadsakor szveges oszlopoknl megadhatjuk, hogy az els hny karakter szerepeljen az indexben, ezltal cskkenthetjk az indexek trolsi helyt. Ltrehozhatunk s megszntethetnk nzeteket s triggereket is az 5. fejezetben lertaknak megfelelen. Az 5. pontban lertaktl eltren a MySQL nyelvben ALTER VIEW utasts is van, melynek szintaxisa megegyezik a CREATE VIEW szintaxisval s eredmnyekppen a meglv nzet helyett azonos nven egy msik nzet jn ltre. Jogosultsgok kezelsre ugyangy a GRANT s a REVOKE utastsok hasznlhatk. Az 5.6.3. pontban lert adatkezel utastsok, a SELECT, INSERT, DELETE s UPDATE is az ott lert szablyokkal mkdnek. Programba gyazva a SELECT utasts eredmnynek feldolgozshoz kurzorra van szksg. Ezt a kvetkez pontban rszletezzk. 6.2.4. Kurzor hasznlata PHP MySQL-ben A kurzor hasznlatra ltalnos pldt lthattunk az 5.7.4. pontban. Nzzk most meg, hogy hogyan kezelhetjk egy lekrdezs eredmnyrekordjait PHP-ben. A lekrdezst az sql_query() fggvnnyel kell kiadnunk. A fggvny visszatrsi rtke egy eredmnyazonost lesz. Ezt felhasznlva klnbz fggvnyek segtsgvel adatokat nyerhetnk a lekrdezs eredmnyrl, illetve lekrhetjk az egyes rekordokat. Pldul az eredmnysorok szmt a mysql_num_rows() fggvnnyel kaphatjuk meg. Plda 1. Krdezzk le az elss hallgatk adatait ABC sorrendben s rjuk ki, hogy hny elss hallgat van. ... $utasitas = select * from HALLGATO where evf = 1 order by vnev; $eredmeny = mysql_query($utasitas); $sorok_szama = mysql_num_rows($eredmeny);

Ez megfelel annak, amikor a mez rtkt egy sorszmgenertor tpus (Sequence) objektumbl vesszk (ld. 5.3.6. pont)

6-52

print <p>Jelenleg $sorok_szama darab elss hallgat van az adatbzisban</p> ... Az eredmnyazonostval megadott eredmny sorait a mysql_fetch_row() fggvnnyel rhetjk el. Ez a fggvny mindig az eredmnytbla kvetkez rekordjnak mezit adja eredmnyl egy tmbben. Plda 1. rassuk ki az elss hallgatk vezetk s keresztnevt egy tblzatban. ... $utasitas = select * from HALLGATO where evf = 1 order by vnev; $eredmeny = mysql_query($utasitas); print <table border = \1\>;1 while ($egy_sor = mysql_fetch_row($eredmeny) ) { print <tr>; foreach ($egy_sor as $mezo){ print <td>.stripslashes($mezo).</td>; } print </tr> } print </table> ... 6.3. Ellenrz krdsek 1. 2. Access adatbzis-kezelben hozzunk ltre egy j adatbzist s mentsk el EGYETEM nven. Hozzuk ltre a 4.2. alfejezetben definilt tblzatokat tervez nzetben. A mezk minden tulajdonsga feleljen meg az ott megadottaknak. Mdostsuk mindhrom tbla indexeit is gy, hogy az indexeknek beszl nevk legyen s minden indexet hozzunk ltre, amire szksg lehet. lltsuk be a 4.2. alfejezetben megfogalmazott feltteleket a tblk mezire rvnyestsi szablyknt. Mindegyikhez adjunk meg rvnyestsi szveget is! lltsunk be beviteli maszkot a mindhrom tblban az azonostkra gy, hogy a hallgati azonost ktelezen 5 szmjegybl lljon, a tantrgyi azonost pedig ktelezen betvel kezddjn s 4 karakterbl lljon. lltsuk be a hrom tbla kztti kapcsolatokat a kaszkd mdostst s trlst megtiltva! Vigynk be nhny adatot mindhrom tblba! Rendezzk a TANTRGY tbla adatait az oktat neve, azon bell a tantrgy megnevezse szerint ABC sorrendbe! lltsunk be szrt a MITHALLGAT tblra gy, hogy csak azok a rekordok ltszdjanak, ahol a gyakorlati pontszm magasabb 50-nl! Hozzuk ltre az albbi lekrdezseket:

3. 4.

5. 6. 7. 8. 9.
1

A kdban szerepl \ karaktereket az utnuk kvetkez karakter levdsre szolglnak, azaz a jelenlegi pldnl azt jelentik, hogy idzjel mg nem az utasts vgt jelenti, hanem azt is ki kell rnia az utastsnak.

6-53

a) b) c) d) e)

Krdezzk le B betvel kezdd nev hallgatk adatait a HALLGAT tblbl! Krdezzk le a hallgatk vezetk s keresztnevt, vfolyamt s osztlyzatait nv s azon bell osztlyzat szerinti rendezsben! Krdezzk le oktatnkknt, hogy hny hallgatt tantanak! Krdezzk le a paramteresen megadott tantrgy hallgati nvsort! Krdezzk le az egyes hallgatk tlagosztlyzatt. Ha van olyan hallgat, akinek mg nincsen egyetlen eredmnye sem, az is jelenjen meg a lekrdezsben! Az tlagok legyenek 2 tizedesre kerektve! Krdezzk le kereszttblban szletsi venknt s tantrgyanknt csoportostva a legnagyobb pontszmokat! Krdezzk le paramteresen megadott hallgat tlagnl jobb eredmny hallgatk nevt s tlagosztlyzatt!

f) g)

10. Hozzunk ltre gyorsvarzslval rlapot a TANTRGY tblbl! 11. Mdostsuk az elz pontban ltrehozott rlapot a kvetkezkkel: a) b) c) Az rlapfejbe rjuk be, hogy TANTRGY! Az rlaplbba illesszk be az aktulis dtumot! Az raszmot listbl lehessen kivlasztani, a vlaszthat rtkek 1, 2, 3, 4, 5, 6 legyenek!

12. Ksztsnk varzslval jelentst, ami tartalmazza a hallgatk nevt, szletsi dtumt, vfolyamt, a trgyakat amiket tanulnak s az eredmnyeiket: pontszmot s osztlyzatot is. Az adatok szletsi venknt, azon bell hallgatnkknt legyenek csoportostva. A gyakorlati pontszmokbl s az osztlyzatokbl szmtsunk tlagot! 13. Mdostsuk az elz pontban ltrehozott jelentst a kvetkezkkel: a) b) c) Egy hallgat adatain bell ne legyen oldaltrs! Az tlagok mindenhol 2 tizedesre legyenek kerektve! Az sszestseknl a cmkn az Avg feliratot cserljk ki tlag-ra!

14. Mik a Php utastsok nyit s zr elemei? 15. Hogyan nyithat meg egy adatbzis PHP-ben? 16. Milyen feladatokat ltnak el a programba bepthet MySQL fggvnyek? 17. Melyek a legfontosabb klnbsgek az 5. fejezetben trgyalt SQL s az ebben a fejezetben trgyalt MySQL nyelv kztt? 18. Hogyan mkdik a kurzor PHP-MySQL-ben?

6-54

7. KATALGUS, ADATSZTR
7.1. Katalgus tblzatok Az adatbzisnak az adatok mellett tartalmaznia kell az adatok definciit, kapcsolatait, trolsi s hasznlati mdjuknak a lerst. Az adatbzisnak ezt az nll rszt katalgusnak, vagy adatsztrnak (Data Dictionary, Data Directory) nevezik. A relcis modellre pl adatbzisokban a katalgus maga is tbb tblzat s nzet sszessge, melyeket sszefoglalan katalgus relciknak neveznk. Ezekkel ugyangy dolgozhatunk, mint az adatokat tartalmaz tblzatokkal s az ezekbl ellltott nzetekkel. A katalgus relcik tartalmazzk a rendszer minden objektumnak, azok rszeinek, egyms kzti kapcsolatainak s elrhetsgknek a lerst. Amennyiben valamely objektum felptsben, tulajdonsgaiban brmilyen vltozs kvetkezik be, a rendszer automatikusan mdostja a megvltozott objektum jellemzit nyilvntart katalgus relcikat. Ha pldul egy j tblzatot hozunk ltre, akkor annak jellemzi (neve, ltrehozja, ltrehozsnak ideje, fizikai trolsi helye, stb.) automatikusan bekerlnek a tblzatok ltalnos jellemzit nyilvntart katalgus relciba, az j tblzat oszlopainak jellemzi pedig az adatbzis sszes oszlopt nyilvntart relciba. A katalgus az adatbzisnak nlklzhetetlen s leggyakrabban hasznlt rsze. Amikor az adatbzisban valamilyen mveletet akarunk vgrehajtani, akkor az SQL utastsrtelmez a katalgusban nzi meg, hogy az utastsban szerepl objektumok s azok elemei lteznek-e s hogy az utasts kiadja jogosult-e ezeken a kvnt mveletek elvgzsre. Amennyiben az eredmny pozitv, akkor az SQL optimalizl a katalgusban lv statisztikai adatok, az adatok tnyleges eloszlsa s fizikai trolsi jellemzi alapjn meghatrozza a krt adatokhoz vezet optimlis elrsi utat. Interaktv feldolgozsnl ezek a mveletek minden egyes utasts vgrehajtsa eltt lefutnak. Programba beptett statikus SQL utastsoknl (ld. 5.7.1. pont) ez az elemzs csak egyszer, a program elksztsekor trtnik meg s az elrsi terven (PLAN, ld. 5.7.2. pont) keresztl hozzkapcsoldik a programhoz. Futskor mr az gy elre meghatrozott elrsi stratgia hajtdik vgre. A katalgus hatkony hasznlatt a gyakran keresett katalgus adatokra felptett indexek segtik. Az, hogy a katalgusban milyen relcikban, milyen formban, milyen informcik vannak, az ersen rendszerfgg. Ugyancsak rendszerfgg, hogy az egyes felhasznlk a teljes katalgusbl milyen informcikhoz frhetnek hozz. Az IBM UDB/DB2 rendszerben az adatbzis (DATABASE) felhasznli lnyegben a katalgus minden tblzatt lthatjk. Ezeknek a tulajdonosa a SYSIBM s nevk mindig SYS-szel kezddik. Az utnuk kvetkez nvrsz utal arra, hogy mirl tartalmaz informcit az adott katalgus relci. Az ORACLEben a felhasznlk csak a katalgus tblzatokra plt nzetek megtekintsre jogosultak. Ezekre minden felhasznl ugyanazokkal a nevekkel, un. nyilvnos (PUBLIC) szinonimkkal hivatkozhat, de mindenki csak a sajt tulajdonban (smjban) lv objektumokrl, vagy az ltala hasznlhat objektumokrl kaphat felvilgostst. Az elbbiek nevei mind USER_, az utbbiak mind ALL_-lal kezddnek. Lteznek mg a teljes rendszerinformcit szolgltat DBA_ prefixszel kezdd katalgus relcik is, melyeket csupn az adatbzis felgyel hasznlhat. Az ACCESS-ben a katalgus lnyegben el van rejtve a felhasznlk ell. Nagy rendszerek katalgusa tbb szz relcibl is llhat. A 7.1. tblzatban felsoroltuk a kt legnagyobb adatbzis-kezel rendszer, az ORACLE s az IBM/UDB/DB2 legfontosabb katalgus relciit.

7-1

7.1. tblzat: A legfontosabb katalgus relcik ORACLE-ben s UDB/DB2-ben. Az ORACLE szinonimanv eltt USER_ vagy ALL_ prefix ll, az IBM tblzatnv eltt pedig SYSIBM.SYS Oracle CATALOG CONSTRAINTS IND_COLUMNS INDEXES OBJECTS SYNONYMS TAB_COL_STATISTICS TAB_COLS TABLES TAB_PRIVS, TAB_PRIVS_MADE TRIGGERS USERS VIEWS IBM UDB/DB2 TABLES,SYNONYMS TRIGGERS CHECKS, RELS, FOREIGNKEYS KEYS INDEXES TABLES,SYNONYMS TRIGGERS PLAN SYNONYMS COLSTATS COLUMNS TABLES DBAUTH, TABAUTH TRIGGERS USERAUTH VIEWS, VIEWDEPS Tartalom Tblzatok, nzetek, szekvencik A tblzatokra s azok rszeire definilt korltozsok, felttelek Indexek oszlopai Indexek Objektumok Programokhoz tartoz elrsi tervek Szinonimk Oszlop statisztikk Tblzatok, nzetek oszlopai Tblzatok (nzetek) Objektumokra vonatkoz jogosultsgok Triggerek Felhasznlk Nzetek

A katalgus relcikat ltalban csak lekrdezni lehet. Nem lehet katalgus-relcit megszntetni, felptst mdostani, explicit elzrni msok ell, kzvetlen utastssal berni, trlni, mdostani sorokat. (Ez all kivtelek a statisztikai adatokat tartalmaz oszlopok ld. 7.3. alfejezet). A katalgus lekrdezsvel informcikat nyerhetnk az adatbzis objektumairl, illetve azok rszeirl, az egyes objektumokhoz val hozzfrsi jogokrl, a klnbz objektumok kzti sszefggsekrl, az adatok fizikai elhelyezsrl, amennyiben statisztikt ksztettnk, akkor a klnbz objektumok elemeinek szmrl s rtkek szerinti eloszlsrl. Az albbiakban vzlatosan ismertetjk a legfontosabb katalgus relcik fbb jellemzit. Megjegyezzk, hogy nem mindegyik rendszerben ltezik az sszes itt felsorolt katalgus tblzat/nzet, vagy tartalmuk az itt ismertetettl nmileg eltrhet. Az egyszerbb nyelvhasznlat rdekben sokszor az egyes katalgus relcikat is csak katalgusnak nevezzk. gy pldul az indexek jellemzit tartalmaz katalgus relci helyett rviden csak index katalgust mondunk. 7.1.1. Katalgus relcik az objektumokrl s sszetevikrl Minden katalgusban megtalljuk a legfontosabb objektum tpusok nll tblzatokban sszefoglalt jellemzit. A felhasznl ltal elrhet katalgus relci vagy kzvetlenl ez a tblzat vagy egy erre pl nzet. gy nll katalgus relci van a

7-2

tblzatokrl, nzetekrl, tblzatok/nzetek minden egyes oszloprl, indexekrl s azok komponenseirl, szinonimkrl, szekvencikrl, triggerekrl, az adatbzis fizikai s logikai egysgeirl, a lefordtott programokhoz hozzrendelt adatelrsi mdokrl. Ezek a relcik tartalmazzk a bennk foglalt objektumok minden meghatroz jellemzjt. A fentieken kvl egyes rendszerekben lteznek olyan katalgus relcik is, amelyek ltalnos ttekints cljbl sszefoglaljk az adatbzis legfontosabb objektumtpusairl azok nevt, tpust, tulajdonost, ltrehozsnak s utols mdostsnak az idejt. 7.1.1.1. Tblzat katalgus Ez a katalgus az adatbzis minden egyes tblzatrl (esetleg nzetrl is, belertve a katalgus tblzatokat/nzeteket is) tartalmaz egy sort. A tblzat katalgus legfontosabb oszlopai: a tblzat (nzet) neve, a tblzat (nzet) tulajdonosa (smja), tpusa (tblzat vagy nzet), ltrehozsnak s utols mdostsnak ideje (ez az ORACLE-ben nem az egyedi objektum tpusok katalgusban van, hanem az ltalnos objektum katalgusban) oszlopok szma, hny tblzattl fgg, hny tblzat fgg tle, csak tblzatoknl a sorok szma, hny lapot foglal el, fizikai trolsi helye, tlagos rekordhossz, az utols statisztika elksztsnek ideje. 7.1.1.2. Oszlop katalgus Ez a katalgus az adatbzis minden egyes tblzatnak s nzetnek minden egyes oszloprl tartalmaz egy sort. A katalgus relci legfontosabb oszlopai: Az oszlopot tartalmaz tblzat neve, tulajdonosa, az oszlop neve, sorszma a tblzatban/nzetben, a benne trolhat adattpus, a benne trolhat adat (maximlis) hossza, tartalmazhat-e NULL rtket, alaprtelmezett rtk, tlagos oszlophossz, 7-3

klnbz rtkek szma, leggyakoribb rtkek, az utols statisztika elksztsnek ideje. 7.1.1.3. Index s indexkomponens katalgus Az index katalgus az adatbzis minden egyes indexrl tartalmaz egy sort. A katalgus relci legfontosabb oszlopai: Az index neve, tulajdonosa (smja), oszlopainak szma, tpusa, az indexet tartalmaz tblzat neve, tulajdonosa (smja), ltrehozsnak s utols mdostsnak ideje (ez az ORACLE-ben nem az egyedi objektum tpusok katalgusban van, hanem az ltalnos objektum katalgusban), egyedi vagy dupliklt, srsd-e s ha igen, a srsds mrtke, B+ fa szintjeinek s az index-lapoknak a szma, trolhely foglalsa, a klnbz indexrtkek szma, az utols statisztika elksztsnek ideje. Az indexkomponens katalgus az adatbzis minden egyes indexnek minden egyes sszetevjrl (oszloprl) tartalmaz egy sort. A katalgus relci legfontosabb oszlopai: Az index neve, tulajdonosa (smja), az index oszlopnak neve, sorrendje az indexen bell, nvekv vagy cskken az oszlopon bell a rendezettsg. 7.1.1.4. Objektumokkal kapcsolatos egyb katalgusok Tovbbi katalgusok tartalmazhatjk a szinonima sztrt, mely lehetv teszi, hogy az azt definil felhasznl az ltala szinonimaknt meghatrozott nevekkel hivatkozzon a rendszer klnbz objektumaira, az adatbzis feloszlst fizikai s logikai rszekre, fizikai adathordozkhoz val hozzrendelst s helyfoglalst, a lefordtott s trolt felhasznli programoknak az adatbzis elrs mdjt meghatroz rszeinek lerst, az egyes oszlopokra fennll klnleges felttelek lerst (pl. milyen rtkek trolhatk bennk).

7-4

7.1.2. Katalgus a hozzfrsi jogokrl Tbb felhasznl ltal hozzfrhet adatbzisoknl elengedhetetlen, hogy pontosan meg legyen hatrozva, ki mire jogosult. Ki hozhat ltre vagy mdosthat tblzatokat, ki olvashat, trlhet vagy mdosthat adatokat egy mr meglv tblzatban, ki pthet indexeket vagy hivatkozhat idegen kulccsal egy tblzatra, ki futtathat az adatbzissal dolgoz programokat, stb. Az ltalnos alapelv az, hogy aki ltrehozta az objektumot vagy akinek a nevben azt az adatbzis felgyel ltrehozta (az objektum tulajdonosa, akinek a smjban van), az brmit csinlhat vele, s ezeket a jogokat a GRANT s a REVOKE utastssal tovbb is adhatja msoknak, illetve vissza is vonhatja tlk (ld. 5.6.2.4. pont). ppen ezrt a hozzfrsi jogokat ler katalgusok mindig tartalmazzk az adott objektum ltrehozjnak s a hasznlatra jogosultaknak az azonostjt. Ebbl llaptja meg mkds kzben az adatbziskezel rendszer, hogy az utasts kiadja vgrehajthatja-e a krt mveletet. A jogosultsgokat ki lehet adni egyes felhasznlkra vagy a felhasznlk meghatrozott csoportjaira is. A legtbb rendszerben van egy klnleges felhasznli csoport, amelyiknek a neve PUBLIC. Ha ennek adunk engedlyt, akkor az adott objektumon gy engedlyezett mveletet az adatbzis minden felhasznlja elvgezheti. 7.1.2.1. ltalnos rendszer jogosultsgok katalgusa Ezek a katalgus relcik minden felhasznlra tartalmazzk sok ms egyb mellett az adatbzishoz val hozzkapcsoldsra jogosultak adatait, milyen objektumokat hol hozhatnak ltre, a maximlisan felhasznlhat trol helyet, van-e adatbzis felgyeli jogosultsguk. 7.1.2.2. Katalgus az objektumokra val jogosultsgokrl Azokat a jogosultsgokat sorolja fel, amelyekkel az egyes felhasznlk rendelkeznek, hogy az adott objektummal dolgozhassanak. Az, hogy egy katalgus relci csak egy objektum tpusra vonatkoz jogosultsgokat tartalmaz-e, vagy kln katalgusban vannak az adott s a kapott jogosultsgok, az rendszer fgg. Tblzatoknl/nzeteknl a legfontosabb jogosultsgokat a 7.2. tblzatban foglaltuk ssze. Ha egy felhasznl ugyanabban a tblzatban tbbfle jogosultsgot is kapott, akkor azok mindegyike nll sorknt szerepel a katalgusban. 7.2. tblzat: Legfontosabb jogosultsgok tblzatokon/nzeteken elvgezhet mveletekre. Jogosultsg Elvgezhet mvelet ALL minden mvelet ALTER tblzat defincijnak mdostsa DELETE Sor(ok) trlse tblzatbl, nzetbl INDEX index ltrehozsa tblzaton INSERT adatbevitel tblzatba, nzetbe REFERENCES idegen kulccsal val hivatkozs tblzatra SELECT olvass tblzatbl, nzetbl UPDATE adatok mdostsa tblzatban, nzetben

7-5

Az objektum jogosultsgokat ler katalgusok legfontosabb oszlopai a kvetkezk: a jogosultsgot ad azonostja, a jogosultsgot kap azonostja, az objektum tpusa, az objektum neve s tulajdonosa, mire vonatkozik a jogosultsg, tovbb adhat-e a jogosultsg, a jogosultsg megadsnak ideje. Bizonyos mveleteknl (pl. UPDATE) a jogosultsg tovbb is finomthat s az egsz tblzat/nzet helyett annak egyes oszlopaira korltozhat. Akkor ez gy szerepel a katalgusban. 7.1.2.3. Katalgus a programok hasznlati jogrl Ha az adatbzis-kezel utastsokat nem prbeszdes zemmdban adtk ki, hanem statikusan beptik az alkalmazsi programba, akkor a futtatshoz lefordtott program nll modulknt (csomag, package) tartalmazza az adatbzis-elrsi utastsokat is (ld. 5.7. alfejezet). Amennyiben ezt a programot brki futtathatn, ezeket az elrsi utastsokat lemsolhatn, hozzkapcsolhatn a sajt programjhoz, akkor az adatbzishoz val hozzfrst nem lehetne ellenrizni. ppen ezrt kln katalgus tblzat(ok) tartalmazzk ezeknek az adatbzis-elrsi moduloknak a jellemzit s azt, hogy kik jogosultak ezekkel dolgozni, ezeket futtatni. Miutn ilyenkor az ellenrzs egyszer, a program elksztsekor trtnik, ennek idpontja fontos adata ezeknek a katalgusoknak. Ezt az adatbzis-kezel rendszer a program futsa eltt sszehasonltja az elrni kvnt objektum utols vltoztatsi idpontjval. Amennyiben ez ksbbi, akkor jra elvgzi az ellenrzst. Ha a vltozsok nem akadlyozzk, akkor a program most mr az j elksztsi/ellenrzsi dtummal lefut, klnben hibajelzssel lell. 7.1.3. Katalgus a fggsgekrl Ezek a katalgus tblzatok az idegen kulcs kapcsolatokat, az adatbzis nzeteknek, programoknak, elrsi utaknak s terveknek a tblzatoktl val fggsgt tartalmazzk. Ezek ismerete fontos, mert pldul egy tblzat trlsekor (DROP) automatikusan megsznik az sszes rpl nzet is. gy azok, akik eddig mit sem sejtettek a tblzatrl, mert csupn egy rpl nzettel dolgoztak, nem tudnak tovbb dolgozni. Ugyancsak mkdskptelenek lesznek azok a programok is, amelyek ezzel a trlt tblzattal vagy nzettel kvnnnak dolgozni. Ezeket a programokat a katalgus alapjn jobb megkeresni s a hibt mg a futs eltt kijavtani. Ha egy nzet tbb tblzatra pl, vagy egy program tbb tblzattal dolgozik, akkor a fggsget mindegyikre egy kln sor jelzi a katalgusban. A katalgus relcik legfontosabb oszlopai: az alapobjektum neve, tpusa s ltrehozja, a fgg objektum neve, tpusa (nzet, program, adatbzis-elrs) s ltrehozja, a fggsg ltrehozsnak ideje, idegen kulcsnl a kulcs kapcsolat jellemzi (korltozott, kaszkd, NULL rtkre llts). Gyakorlati tancs, hogy ha egy objektumot meg akarunk szntetni, akkor elbb nzzk meg a katalgusban, hogy ez milyen tovbbi hatsokkal jr. ltalban olyan tblzatot nem is tudunk megszntetni, amelyikre egy msik tblzat idegen kulccsal hivatkozik.

7-6

7.2. Katalgus osztott adatbzisokban Az osztott adatbzisok katalgusnak a centralizlt rendszer katalgusa ltal nyjtott szolgltatsokon kvl informcit kell adni arrl is, hogy az egyes rekordokat fizikailag hol, melyik helyen troljuk, ha tbb helyrl kell egy logikai rekordot sszeszedni, akkor annak sszetevi hol tallhatak, milyen adatokat trol tbbszrsen a rendszer, a dupliktumok hol tallhatak s hogyan kell konzisztencijukat biztostani. Ezek a megfelelen definilt j, az osztott rendszerek specialitsait s ignyeit is figyelembevev katalgus tblzatokbl megkaphatk. Sokkal nagyobb problmt jelent a gyakorlatban az, hogy hol troljuk magt a katalgust. Alapjban vve a kvetkez lehetsgek kzl vlaszthatunk: 1. Kzponti, egy helyen trolt, centralizlt katalgus. 2. A teljes katalgust tbbszrzzk. Minden nll adatbzis helynek sajt, teljes pldnya van. 3. Particionlt katalgus. Minden nll adatbzis hely csak az ottani adatbzisrl vezet egy helyi katalgust. A teljes katalgus az egyes helyeken lv katalgusok unija. 4. Minden hely vezeti a sajt helyi katalgust s ezen kvl egy helyen egy kzponti nyilvntarts is van (1. s 3. kombincija). 5. Az egsz rendszerre vonatkoz egysges nvkonvenci hasznlat s katalgus tartalom. Mindegyik megoldsnak megvannak az elnyei s a htrnyai. Ha a klnbz elemzsek alapjn vgl osztott adatbzis mellett dntttnk, akkor az 1. megoldsnl ennek elnyeit rszben elvesztjk. A kzponti katalgus miatt az egyes helyeken trtn feldolgozsok ki vannak szolgltatva a kzpontnak. A kzponti katalgus-szolgltats brmilyen hibja minden adatbzis helyi mkdst befolysolhatja, esetleg mkdskptelenn is teheti. A 2. mdszer gyorsan mdosul rendszereknl szinte kivihetetlen, hacsak nem engedjk meg, hogy a katalgusok adatai bizonyos ideig inkonzisztensek legyenek. Az sszes katalgus pldny egyidej, azonnali aktualizlsa olyan bonyodalmas eljrsokhoz vezethet, hogy a tnyleges munka megbnulhat. A 3. mdszer csak akkor elnys, ha a mveletek csaknem kizrlag a helyi adatbzisra korltozdnak. Ha mshol trolt adatokra van szksgnk, akkor ezek megtallshoz tlagosan a tbbi adatbzis helyi katalgusainak a felt t kell vizsglnunk, kedveztlen esetben (mrpedig ezek valsznsge Murphy trvnye alapjn jval nagyobb), akr minden helyi katalgust t kell nznnk. A 4. mdszer kikszbli ezt a htrnyt, de ismt behozza, - br kisebb mrtkben a kzponti helytl val fggsget. A gyakorlatban az 5. mdszer kecsegtet a legjobb eredmnnyel, ha biztostjuk az albbi szablyok betartst: Minden felhasznlnak minden objektum nvre (ld. 5.3.2. pont), amellyel dolgozhat ltrehozunk egy, az egsz rendszerben rvnyes sajt szinonimt, mely az albbiakbl ll: az objektum ltrehozjnak az azonostja, ltrehozsnak helye (ahol a CREATE utasts lefutott), minden minsts nlkli neve (Pl. HALLGATO vagy TANTARGY), els trolsi helye. Ez a nv egyrtelm a rendszerben s sohasem vltozik meg, akrhol lesz ksbb trolva az objektum.

7-7

A felhasznlk ltalban a minsts nlkli, vagy a ltrehoz azonostjval minstett nvvel hivatkoznak egy objektumra. Ekkor a rendszer automatikusan a helyi adatbzisban keresi. Ms helyen lv objektumra az elbb definilt szinonimval hivatkoznak. Hogy gy is megtallja az adatbzis-kezel rendszer a keresett objektumot, minden helyi katalgusban troljuk az egsz rendszerre rvnyes szinonimk adatait, az sszes ott trolt objektum jellemzit, az sszes ott ltrehozott objektum pillanatnyi trolsi helyt. Brmely objektumra a minsts nlkli nevvel illetve azt minstve a ltrehozja azonostjval s a hellyel hivatkozva (vagy ha ez nincs, akkor alaprtelmezsknt az adott hellyel s felhasznlval kiegsztve), a krdses hely helyi katalgusbl minden informcit megkaphatunk, ha az objektum ott van trolva. Ugyanezt legfljebb kt nem helyi lekrdezssel megkaphatjuk a nem helyben trolt objektumokrl is, ha a szinonimval krdeznk r. Ha az objektum a helyi adatbzisban van, akkor a helyi katalgusbl olvassuk ki az informcikat. Ha nincs ott, akkor a helyi szinonima tblzatbl megllaptjuk, hol hoztk ltre. Annak helyi katalgusbl ha mg ott van az objektum rgtn megkapunk mindent, vagy megtudjuk, hol van pillanatnyilag. gy ehhez az adatbzishoz kapcsoldva a msodik tvoli lekrdezssel jutunk hozz a keresett informcihoz. A katalgus aktualizlsa itt abbl ll, hogy j objektum ltrehozsakor az objektum jellemzi bekerlnek a helyi katalgusba, a helyi katalgusok szinonima tblzatba bekerl egy j bejegyzs, objektum mdosulsakor ha az objektum trolsi helye nem vltozik, akkor aktualizldik a helyi katalgus, ha a helye vltozik, akkor az adatok mellett az objektum jellemzi tkerlnek az j hely katalgusba s a ltrehozs helyn mdosul a katalgusban a pillanatnyi trols helye. Ha pldul SQL00-nak a Budapesten ltrehozott HALLGATO tblzatra SQL30 a HALLGATO00 szinonimt hozta ltre, akkor ezzel SQL30 brhol dolgozhat a HALLGATO00 nvvel. Ha a tblzatot idkzben thelyezik Budapestrl a debreceni adatbzisba, akkor a ltrehozs helyn, a budapesti katalgusban a pillanatnyi trols helye Budapestrl Debrecenre mdosul, SQL00.HALLGATO katalgus bejegyzsei trldnek a budapesti katalgusbl, SQL00.HALLGATO jellemzi bekerlnek a debreceni katalgusba. 7.3. Statisztikk Az adatbzis hatkony mkdtetshez szksges optimlis adatelrsi utak meghatrozshoz az SQL optimalizl a katalgus relcikbl szerzi meg az. informcikat. Ehhez nem elg az adatok szerkezete, szksges a trolt adatok szmnak s eloszlsnak az ismerete is. Nem mindegy, hogy egy csupn 100 s egy 10 milli rekordot tartalmaz tblzat join-jnl az els sorain megynk egyenknt vgig, hogy a msodikbl index alapjn meghatrozzuk az sszetartoz sorokat, vagy a msodik 10 milli rekordjn. Ugyancsak nem mindegy, hogy ha dupliklt indexnl egy rtkhez 100 klnbz rekord tartozik, akkor azokat 100 fizikai olvasssal 100 klnbz laprl olvassuk be, vagy az index szerint srsd rekordokbl egy, legfljebb kt olvasssal egy vagy kt laprl. Ezrt az objektum katalgusok a bennk fizikailag trolt adatok szmrl s eloszlsrl is tartalmaznak informcikat. (Egyes rendszereknl kln katalgus relcik is vannak ezek trolsra). 7-8

Elvileg ezeknek a statisztikknak llandan napraksznek kellene lenni. Ez azt jelenten, hogy minden adatvltoztatsnl ezeket mdostani kellene. Ez akkora terhet rna a rendszerre, hogy gyakorlatilag csak a sajt adminisztrcijval foglalkozna. ppen ezrt a katalgus statisztikk aktualizlsa csak kln krsre, vagy egy erre szolgl SQL utasts (pl. ANALYZE, ORACLE) vagy egy specilis szolgltat program (RUNSTATS, UDB/DB2) vgrehajtsakor trtnik meg. Ebben szablyozhatjuk azt is, hogy milyen objektumokrl, milyen mlysg statisztikt krnk. Mivel az optimlis elrsi t ltalban nem klnsebben rzkeny arra, hogy egy tblzat 10 vagy 13 milli adatot tartalmaz, vagy hogy egy indexben 1000 vagy 1500 klnbz rtk van, ezeket a statisztikkat elegend csak idnknt, pl. minden jjel egyszer, amikor kisebb on-line terhels van lefuttatni. Br a katalgust SQL utastsokkal nem lehet mdostani, ezeket a statisztikai adatokat az adatbzis felgyel manulisan egyenknt is beviheti, tetszs szerint megvltoztathatja. A katalgusban trolt legfontosabb statisztikai adatok az albbiak: az utols statisztika idpontja, tblzatban a sorok szma, a hasznlt lapok szma, indexnl index-lapok szma, B+ fa szintjeinek szma, srsds mrtke, klnbz index-rtkek szma, oszlopoknl a leggyakoribb oszloprtkek s ezek gyakorisga. 7.4. Ellenrz krdsek 1. 2. 3. 4. 5. Mikor lehetnk biztosak abban, hogy a CREATE utastsban lertak megfelelnek az adatbzis aktulis llapotnak? Hogyan tudjuk megllaptani, hogy melyek azok az objektumok, amelyeket ltrehozsuk ta mg egyszer sem vltoztattunk meg? Meg tudjuk-e llaptani, hogy egy tblzat hny vltoztatson ment keresztl? Hogyan tudjuk egy lekrdezssel megkapni egy index s sszes indexoszlopa jellemzit? Megkapjuk-e minden jogosultsgunkat, ha a kapott jogosultsgok katalgusban a jogosultsgot kap (GRANTEE) oszlopra gy krdeznk r, hogy where grantee = user vagy where grantee =sajt azonostnk 6. 7. 8. Hogyan kell kiegszteni az elz lekrdezst, hogy a helyes vlaszt megkapjuk? Milyen katalgus relcikban trtnnek vltozsok, ha egy tblzatot megszntetnk? Milyen katalgus relcikban trtnnek vltozsok, ha egy tblzat minden sort trljk?

7-9

8. GYAKORLATI PROBLMK S MEGOLDSUK


Egy adatbzisban sokan dolgozhatnak egyszerre, egymssal prhuzamosan. A hatkony munkhoz a felhasznlknak az alkalmazsaikat gy kell elksztenik, hogy azok a lehet leggyorsabb mdon rjk el s dolgozzk fel az adatokat, optimalizljk a sajt alkalmazsukat. Ezt hatkony programok tervezsvel (melynek tmja kvl esik knyvnk keretein) s az adatszerkezet s az adatelrsi mdok megfelel megvlasztsval (ld. 2.5. alfejezet) rhetjk el. minl kevsb zavarjk, htrltassk msok munkjt az adatbzisban (s termszetesen, viszonzsul, a tbbiek se akadlyozzk az munkjukat). Ez idnknt csak sajt munkjuk hatkonysgnak rovsra valsthat meg. Mivel nem mindenkitl vrhat el ilyen ers kzssgi elktelezettsg, a j adatbziskezel rendszerek automatikusan rknyszertik a felhasznlkat a kzs munka alapszablyainak betartsra. Amg mindenki csak olvasni akarn az adatbzis adatait, addig nincs problma. Ha tbben nzik ugyanazt, abbl mg nem lesz semmi gond. Amint azonban brmelyik felhasznl vltoztatni kvn a tbbiek ltal is hasznlt adatokon, problmk merlnek fel. Mit lthatnak a tbbiek a vltoztatsaibl? Mi legyen, ha k is mdostani akarnak ugyanazokban a rekordokban? Az eredeti, vagy a mdostott adatokkal dolgozzanak? Egyidej vltoztatsi krelmeknl melyiknek legyen elsbbsge? Ha a vltoztats egy tblzat tbb sort is rinti, akkor egy msik, ezzel egyidejleg dolgoz felhasznl a sorok egy rsznl mg a rgi, ms rszknl mr az ppen megvltoztatott adatokat kapn meg. Ezltal nagy valsznsggel tves kvetkeztetseket vonna le. Pldul az egyik utasts minden dolgoz fizetst nveli 10000 forinttal (UPDATE ALKALMAZOTTAK SET FIZETES = FIZETES + 10000), mg egy msik ugyanakkor fizetsi statisztikt ksztene osztlyonknt ugyanezen adatokrl (SELECT OSZTALY,AVG(FIZETES) FROM ALKALMAZOTTAK GROUP BY OSZTALY), akkor attl fggen, hogy a csoporttlag kpzs pillanatban a csoport hny tagjnl trtnt mr meg a fizetsemels, ms s ms eredmnyt kapnnk. Ez nem engedhet meg. Ezrt a j adatbzis-kezel rendszerek automatikus vdelmet nyjtanak az egyidej hozzfrsbl szrmaz inkonzisztencik ellen. A 8.2. alfejezetben bemutatjuk azokat a problmkat, amelyek tbb-felhasznls adatbzisokban a prhuzamos hozzfrs miatt fellphetnek. A 8.3. alfejezetben ismertetjk ezek megoldst a zrak hasznlatval. A 8.4. alfejezetben fontossga miatt kln trgyaljuk a prhuzamos feldolgozs taln legveszlyesebb hibaforrst, a patthelyzetet s a patthelyzetek feloldst. A 8.5. alfejezetben nhny sajt gyakorlatunkban elfordult pldn mutatjuk be, miknt lehet utlag elemezve akr trivilis butasgokat is elkvetni, de bonyolult hibkat is kijavtani. 8.1. Tranzakcik A prhuzamos munkk legfontosabb eleme a tranzakci. Sok rendszerben ezt az adatbzis hasznlatval kapcsolatban logikai munkaegysgnek (Logical Unit Of Work, LOW) is nevezik. Ez olyan egymst kvet adatbzis-mveletek sorozata, melyek vagy teljes egszkben mind megvalsulnak, vagy egy elemk sem hajtdik vgre, illetve nem vglegestdik. Ilyen utastssorozatokra mutattunk be pldkat az 5.6.4. pontban. Kvlrl, a feldolgozs egsze szempontjbl nzve a tranzakci egy atomi mvelet, nem bonthat

8-1

tovbbi rszekre.1 A tranzakci az adatbzist az egyik konzisztens llapotbl tviszi egy msik konzisztens llapotba. Egy tranzakci minden utastsnak az eredmnyt vglegesthetjk az adatbzisban a COMMIT, hatstalanthatjuk, azaz visszallthatjuk az adatbzist a tranzakci kezdetn fennll llapotba a ROLLBACK utastssal (ld. 5.6.4. pont).2 A prhuzamos feldolgozs koordinlsnak a lnyege az, hogy a tranzakcik egymstl fggetlenl fussanak, ne dolgozhassanak ugyanazokkal a rekordokkal, ha az nem egyrtelm llapothoz vezetne. Ha valamilyen okbl mgis konfliktus alakulna ki kzttk, miknt azt a kvetkez alfejezetben trgyaljuk, akkor az gy olddjon meg, hogy az adatbzis utna is konzisztens, egyrtelmen definilhat llapotban maradjon. 8.2. Problmk prhuzamos feldolgozsnl A prhuzamos feldolgozsbl eleve addnak a kvetkez hibalehetsgek: elveszett mdosts, nem vglegestett adatok feldolgozsa, munka inkonzisztens adatokkal, patthelyzet. Az els hrom helyzetet ebben, a patthelyzetet a 8.4. alfejezetben ismertetjk. 8.2.1. Elveszett mdosts

8.1. bra:

Elveszett mdosts.

Tekintsk a 8.1. brn lthat helyzetet. Az A felhasznl beolvassa a T1, B pedig a T2 idpontban az 1111 kd, 3-as kategriba sorolt, 1000 Ft rtk ru-rekordot.3 Ezutn A mdostja T3-kor az rt 1200 Ft-ra, s visszarja az adatbzisba a megvltoztatott rekordot az j rtkekkel (1111;3;1200). Ekzben T3-kor B is mdostja a beolvasott rekordjt. tsorolja
Ez az elnevezs termszetesen ugyangy elnagyolt, mint a tovbb nem bonthat atomok fogalma. De mindkett elfogadott a mindennapi, illetve az informatikai szhasznlatban. 2 A visszallts pontosabban csak az adatbzisnak az adott tranzakci ltal rintett rszre vonatkozik. 3 Az adatok mozgatsa (beolvassa, kirsa) az adatbzisban logikailag mindig rekord (sor) szinten trtnik. A beolvasott rekordokban a tovbbi munka mr trtnhet mez (oszlop) szinten.
1

8-2

az 5-s kategriba, majd visszarja a helyre a nla rvnyes j rtkekkel (1111;5;1000). Attl fggen, hogy T3 vagy T3 kvetkezett be elbb, vagy A, vagy B mdostsa elveszik. (Az brn A mdostsa). Ez nyilvn megengedhetetlen. Az ilyen hibk ellen vdekezni kell. 8.2.2. Nem vglegestett adatok feldolgozsa Az adatbzis-kezel rendszer lehetv teszi egy tranzakcin bell a mdostott adatok eredeti llapotnak a visszalltst. Ezrt elfordulhatna, hogy kt prhuzamosan fut tranzakci kzl a msodik az els ltal mr mdostott, de mg nem vglegestett rekordokkal dolgozik. Ekzben az els valamilyen okbl a mdostst egy ROLLBACK-kel visszavonja, rvnytelenti. Ezltal a msodik tranzakci hibs, rvnytelen adatokkal dolgozott.

8.2. bra:

Nem vglegestett adatok feldolgozsa.

Ezt lthatjuk a 8.2. brn. A B tranzakci azzal a felttelezssel dolgozik a T3-kor trtnt beolvass alapjn, hogy az 1111 kd ru ra 1200 Ft, holott az a T4-kor vgrehajtott ROLLBACK kvetkezmnyekppen maradt az eredeti 1000 Ft. Hogy ez milyen hibt okoz, azt nem lehet megjsolni. Ezrt az ilyen hibk elfordulst is meg kell akadlyozni. 8.2.3. Munka inkonzisztens adatokkal A problma lnyegt a 8.3. brn lthatjuk. Az A feldolgozs T1-kor beolvassa az elz pldkban szerepl ru adatait. Klnbz szmtsokat vgez vele. Ekzben T2-kor B mdostja ezt a rekordot, tteszi az rut az 5-s kategriba. T3-kor A tovbb dolgozik az ru ltala mr beolvasott rekordjn. Szmra ez mg mindig a 3-as kategriban van, holott azt B mr megvltoztatta. Jelen esetben az sem segtene rajta, ha jra beolvasn a rekordot. Nem tudn eldnteni, hogy korbbi eredmnyei a 3-as kategria felttelezsvel rvnyesek-e, vagy t kell-e teljesen vagy rszben szmolnia mindent az 5-s kategrival. Csak akkor 8-3

folytathatn biztonsggal a feldolgozst, ha az jraolvassnl meggyzdne arrl, hogy senki nem vltoztatta meg az 1111 rukd rekord adatait a kt beolvass kztt.

8.3. bra: 8.3. Zrak

Munka inkonzisztens adatokkal.

Nagy adatbzisokban egymssal prhuzamosan sok felhasznl dolgozik egyidejleg ugyanazokkal az adatokkal is. A prhuzamos feldolgozsbl add hibk kikszblsre az adatbzis-kezel rendszerek zrakat hasznlnak. Az adatbzis konzisztencijnak rdekben minden tranzakci az adatbzisnak ltala ppen hasznlt rszre egy zrat helyez, amit mindaddig fenntart, amg az ott lv adatok feldolgozst be nem fejezte. Ms tranzakcik addig, amg a zr rvnyben van az adatbzisnak a zrral vdett rszhez nem, vagy csak korltozottan frhetnek hozz. A zrolsi mechanizmust egy videotka mkdshez hasonlthatjuk. Minden beiratkozott szemly klcsnzhet videoszalagot s DVD-t. De ha valaki mr kiklcsnztt egyet, akkor azt ms addig nem viheti el, amg azt vissza nem hozzk. Ugyanakkor, a klcsnvevvel egytt msok is megtekinthetik mg ugyanazt az anyagot. Az adatbzisban hasznlt zrakra jellemz a zr mrete, a zr erssge, a zr idtartama, 8.3.1. A zrak mrete Az adatbzis-kezel rendszer elzrhatja a teljes adatbzist (Database Lock). Ezt nemigen alkalmazzk, mert ez a prhuzamos feldolgozst lehetetlenn teszi. a feldolgozand adatokat tartalmaz adathordoz logikailag sszetartoz rszt (Tablespace Lock). Ezt ltalban a szolgltat programok (ld. 1.3.4. pont)

8-4

hasznljk, amikor nagy adatmennyisgek jraszervezsnek, betltsnek zavartalansgt, megszakts mentes vgrehajtst kvnjk biztostani. a feldolgozand adatokat tartalmaz tblzatot (Table Lock). a feldolgozand adatokat tartalmaz lapot (Page Lock). a feldolgozand adatokat tartalmaz sort (rekordot) (Row Lock). Minl nagyobb az elzrt terlet, annl kevesebb zrra van szksgnk, annl kisebb rendszeradminisztrcit jelent a zrak nyilvntartsa, de annl jobban cskken a prhuzamos feldolgozs lehetsge. Ezrt a legtbb rendszer szszer kompromisszumknt alaprtelmezsben a feldolgozand adatokat tartalmaz lapokat zrja el. Ez azonban mdosthat. A zr aktulis mrett az adatbzis-felgyel vagy a felhasznl esetenknt maga is meghatrozhatja. Ezt a zrat az adatbzis-kezel rendszer automatikusan rteszi az adatbzisnak a hasznlatba vett (vagy hasznlatba venni kvnt) rszre, illetve ha valamilyen okbl nem tudja feltenni, akkor eljegyzsbe veszi a zrolsi szndkot. Kivtelt ez all csak a tblzat szint elzrs kpez. A LOCK TABLE tblzat-nv IN SHARE MODE illetve a LOCK TABLE tblzat-nv IN EXCLUSIVE MODE SQL utasts kiadsval a felhasznl maga dnti el, mikor teszi fel ezt a zrat az utastsban megadott tblra. Az adatler utastsok (ld. 5.6.2. pont) vgrehajtsuk idejre automatikusan elzrjk az utastsban rintett katalgus tblzatokat. 8.3.2. A zrak erssge A zr erssge hatrozza meg, hogy ms tranzakcik milyen mdon hasznlhatjk a zrolt elemeket. Ennek alapjn van Osztott zr. (Share vagy S zr). Brki ms olvashatja az gy zrolt elemeket, de senki nem vltoztathatja meg ket. Kizrlagos zr. (Exclusive vagy X zr). Ms tranzakcik nem frhetnek hozz az gy zrolt elemekhez. A zrmechanizmus finomtsa, a prhuzamos feldolgozs elsegtse s a patthelyzet (ld. 8.4. alfejezet) kialakulsnak megakadlyozsa rdekben egyes adatbzis-kezel rendszerek tovbbi zrakat is alkalmaznak, melyek egy ksbbi feldolgozsi szndkra utalnak. Ezek kzl az IBM UDB/DB2-ben rendszerestett mdostsi zrat (Update vagy U zr) ismertetjk mg. A tovbbi pldkban az egyszersg kedvrt rekord szint zrakrl beszlnk, de az elmondottak ugyangy rvnyesek a magasabb szint zrakra is. Osztott zr (S) esetn brki olvashatja az gy zrolt rekordot, rtehet egy jabb S zrat. Senki ms nem zrhatja el egy X zrral. Az eredeti S zr feltevje is csak akkor vltoztathatja meg a zr erssgt X-re, ha msnak nincs a rekordon S zrja. A norml SELECT utasts (ld. 5.6.3.2. pont) ltal elhelyezett S zr a rekord beolvassa utn azonnal megsznik, kivve, ha az utastsban megismtelhet olvasst (Repeatable Read, RR) ktttnk ki. A mdostsi zr (U) azt jelzi, hogy a rekordot valamikor ksbb esetleg meg akarjuk vltoztatni. Erre plda egy mdosthat kurzorral (SELECT FOR UPDATE ) val beolvass (ld. 5.7.4. pont). Amg a rekordot tnylegesen nem vltoztatjuk meg, addig brki olvashatja, rtehet egy S zrat. De U vagy X zrat nem rakhat r. A mdosts pillanatban az U zr tvlt X zrba (feltve, ha idkzben ms nem tett ugyanerre a rekordra egy S zrat). Az U zrak elnyeit a 8.4. alfejezetben a 8.7. brn lthatjuk. Kizrlagos (X) zrat nem tehetnk ms mdon mr zrolt rekordra. Ugyangy, ha X zr van mr egy rekordon, akkor erre ms semmifle zrat nem rakhat, nem vgezhet a rekordban semmifle mveletet. (A zr feltevje termszetesen minden olyan mveletet 8-5

vgezhet rajta, melyre jogosultsga van.) Kivtel ez all a nem vglegestett adatok beolvasst is engedlyez olvass (Uncommitted Read, UR). Ez vgrehajthat kizrlagos mdon elzrt rekordokra is. Termszetesen ilyenkor a beolvas felelssge, hogy az esetleg hibs adatokbl milyen kvetkeztetseket von le. Az S s az X zrat mindegyik tbbfelhasznls adatbzis-kezel rendszer hasznlja. Az U zrat nem mindegyik ismeri. Akkor, amikor egy tranzakci egy rekordot be akar olvasni, vagy meg kvn vltoztatni, akkor egy S, U vagy X zrat helyez a rekordra. Ezeket a zrakat az adatbziskezel rendszer zrmenedzser komponense kezeli automatikusan, s ez tartja nyilvn a zrolt rekordokat is. Ha egy msik tranzakci is dolgozni szeretne ugyanezzel a rekorddal, akkor az is r akarja tenni a megfelel erssg zrat. Ha egy rekordon nincsen semmifle zr, akkor rtelemszeren brmilyen zr feltehet r. (Feltve termszetesen, hogy a tranzakci vgrehajtja jogosult a rekordban a kvnt mvelet elvgzsre). A 8.1. tblzat mutatja, hogy milyen zrak kompatibilisek egymssal, melyek tehetk fel ugyanarra a rekordra egyidejleg. 8.1. tblzat: Zr kompatibilits Els tranzakci zrja Osztott (S) Mdostsi (U) Kizrlagos (X) Tovbbi tranzakci(k) zrja(i) Osztott (S) Mdostsi (U) + + + Kizrlagos (X) -

A + jel azt jelenti, hogy a zrak kompatibilisek. Az j zr(ak) is felrakhat(k) ugyanarra a rekordra az elz(k) mell. A - jel a zrak inkompatibilitst jelzi. Ilyen zrak nem lehetnek egyidejleg ugyanazon a rekordon. Termszetesen brmely tranzakci megvltoztathatja a sajt maga ltal feltett zr erssgt, feltve hogy az j zr kompatibilis a rekordon mr rajta lv, ms tranzakcik ltal fltett zrakkal. Amikor egy tranzakci egy olyan erssg j zrat kvn elhelyezni, amelyik nem kompatibilis a rekordon mr rajta lv(k)vel, akkor ez a tranzakci vr addig, amg az inkompatibilis zr meg nem sznik, vr a rendszer paramterei ltal meghatrozott ideig (ltalban 30 120 msodpercig), ha ez alatt az id alatt az inkompatibilitst okoz zr megsznik, akkor rteszi a sajt zrt, ha az inkompatibilits fennmarad, akkor hibajelzst ad (s ennek eredmnyeknt ltalban ROLLBACK-kel befejezdik), azonnal hibajelzst ad (s ennek eredmnyeknt ltalban ROLLBACK-kel befejezdik). 8.3.3. A zrak idtartama A zr ltalban az utasts kiadsakor lp letbe, s a COMMIT/ROLLBACK vgrehajtsakor sznik meg. A patthelyzetet teljesen kikszblhetjk, ha az adatbzisnak azokat a rszeit, melyeket a tranzakcik folyamn kizrlagosan is akarunk hasznlni, rgtn a feldolgozs kezdetekor X zrral elzrjuk. Lap s sor szint zraknl ezt szinte soha sem tehetjk meg. Az elzrand lapokat, rekordokat nem ismerjk elre. Tbb utastsbl ll tranzakcik esetn ezeket ltalban csak az egyes utastsok vgrehajtsakor, a WHERE felttelben szerepl aktulis rtkekbl tudjuk meg. Statikus SQL utastsokkal (ld. 5.7.1. pont) dolgoz programokban azonban mr a program elindtsakor tudjuk, hogy az milyen tblzatokkal s 8-6

TABLESPACE-ekkel fog dolgozni. gy ezeket mr a program indulsakor is elzrhatjuk a feldolgozsban ignyelt legersebb zrral, s elzrva tarthatjuk egszen a feldolgozs vgig. Ilyenkor patthelyzet nem tud kialakulni, de a prhuzamos feldolgozs eslyeit nagymrtkben leszktettk. 8.3.4. A zr mechanizmus mkdse A zrak mkdsnek megrtse cljbl nzzk meg a 8.4. brn lthat pldt.

8.4. bra:

A zr mechanizmus mkdse.

A tranzakcik lnyegben ugyanazok, mint amiket a 8.2. alfejezetben ismertettnk. A zrak alkalmazsa kvetkeztben azonban az ott fellp problmk itt nem jelentkeznek. A T1 idpontban az A tranzakci megismtelheten olvassa be az 1111 rukd rekordot. Ezrt egy tarts S zrat rak r. Ez nem zavarja a B tranzakcit a rekord olvassban T2-kor egy pillanatnyi S zrral, hiszen az S zrak kompatibilisek egymssal. T3-kor, a rekord mdostsakor A egy X zrat tesz az eddigi S helyett a rekordra. Emiatt B nem tudja azt T4kor mdostani. Ezt csak a zr felszabadtsa, a T5-kor vgrehajtott vglegests utn teheti

8-7

meg1. Lthatjuk, hogy normlis esetben mindkt mdosts vgrehajtdott. Ha viszont a msodik nem trtnt meg, akkor errl a hibajelzs rvn tudomst szerznk s ennek megfelelen cselekedhetnk. A mdosts kvetkeztben T5-kor most B rak egy X zrat a rekordra. Ez megakadlyozza T6-kor A-t abban, hogy egy mg nem vglegestett rekordot beolvasson.2 Ha T2-kor B mdostani akarn a rekordot, akkor X zrat kellene felraknia r. Ezt azonban az A ltal mr feltett S zr miatt nem teheti. gy, ha A jra be akarn olvasni a rekordot, akkor azt vltozatlan rtkekkel kapn meg. A zrak ilyen mdon trtn alkalmazsval a prhuzamos feldolgozsbl add problmkat kikszbltk. Ugyanakkor a prhuzamos feldolgozs lehetsge br nmileg korltozott mrtkben, de fennmaradt. Minl hamarabb oldjuk fel a zrakat, minl gyorsabban vglegestjk COMMIT/ROLLBACK-kel az adatbzis llapott, annl kevesebbet kell a prhuzamosan fut tranzakciknak vrni, annl hatkonyabb lesz a mkds. Mivel minden vglegests adminisztrcis terhet jelent a rendszer szmra, a gyakorlatban kompromisszumknt rendszerint 0,5 5 percenknt, illetve nagy tmeg adat sikeres feldolgozsakor 200 1000 rekordonknt clszer egy-egy COMMIT-ot kzbeiktatni. 8.4. Patthelyzet A prhuzamos feldolgozsban a legnagyobb veszlyt a patthelyzetek jelentik. Ezek akkor alakulhatnak ki, ha egyidejleg fut tranzakcik kizrlagosan is lefoglalhatnak erforrsokat, ltalban adatbzis lapokat vagy rekordokat. Ilyenkor kt vagy tbb tranzakci vr olyan erforrsokra, amelyeket egyikk kizrlagos mdon zrolt, de nem tud felszabadtani, mert maga is vr olyan erforrsra, melyet egy msik tart zrva. Kt tranzakci ltal kialaktott tipikus patthelyzetet lthatunk a 8.5. brn. Az A tranzakci T1-kor mdostja az 1111 rekordot, X zrat tesz fel r. Ugyanezt csinlja B T2-kor a 2222 rekorddal. T3-kor A-nak szksge lenne a 2222 rekordra, de nem frhet hozza a B ltal feltett X zr miatt. (Nem vglegestett adatok beolvasst a feldolgozs logikja nem engedi meg.) Ezrt A vr egszen addig, amg B nem vglegesti a vltoztatsokat 2222-ben. Ez ltalban idben bekvetkezik. A nmi vrakozs utn folytathatja munkjt. Balszerencss esetben azonban B-nek T4-kor pont az 1111 kulcs rekordra lenne szksge. De ehhez nem frhet hozz A X zrja miatt. Ezt A nem tudja felszabadtani, mivel vr a 2222 rekordra, amit viszont B nem tud szabadd tenni. A rka fogta csuka, csuka fogta rka tipikus esete. Ha a vrakozsi id nincsen korltozva, akkor idtlen idkig vrakozna mindkt tranzakci. Ha limitlva van, akkor elbb-utbb valamelyik tranzakci hibajelzssel lellhat, az ltala elzrt rekord felszabadulhat, s a msik tranzakci tovbblphet. Ez azonban mg ha be is kvetkezik, percekig eltarthat s oly mrtkben lelasstan az adatbzis mkdst, hogy az gyakorlatilag hasznlhatatlan lenne.

Ha nincs a zr felszabadulsra vrakozsi id, vagy az kzben letelt volna, akkor B hibajelzst (SQLCODE = -911, SQLSTATE = 40001) kapott volna, aminek alapjn eldntheti, hogy ROLLBACK-kel befejezze-e a tranzakcit (ez az ltalnos), a rekord kihagysval tovbb folytassa-e a feldolgozst, vagy ksbb jra ksrelje meg a rekord elrst, htha az idkzben mr felszabadult. 2 Egyes rendszerek, gy pldul az ORACLE is megengedi a nem vglegestett rekordok olvasst. Ekkor A a rekord eredeti, nem mdostott llapott ltja. Problmt okozhat, ha ebbl A tves kvetkeztetseket von le. Ezrt a legtbb rendszer ezt csak akkor engedi meg, ha A kifejezetten jelzi, tudomsa van arrl, hogy esetleg mr nem rvnyes adatokat olvas be, azaz kifejezetten UNCOMMITTED READ (UR) paramterrel adta meg a SELECT utastst.

8-8

8.5. bra:

Patthelyzet

Elvileg meg lehetne akadlyozni a patthelyzet kialakulst, ha a tranzakcik rgtn indulskor feltennk az ltaluk menet kzben ignyelni kvnt sszes zrat. Ezt azonban, mint azt mr a 8.3.3. pontban megindokoltuk, a gyakorlatban nem lehet az adatbzisokban megvalstani. Ezrt minden adatbzis-kezel rendszer, mint szksges rosszat tudomsul veszi, hogy patthelyzetek kialakulhatnak. Amit ez ellen tehetnek, csupn annyi, hogy igyekeznek ennek valsznsgt, s a bekvetkezsk miatti vrakozsi idt minimlisra cskkenteni. Minl kisebb elemeket zrolunk, annl kisebb a valsznsge annak, hogy kt tranzakcinak egyidejleg arra legyen szksge. Ekkor viszont tbb zrra van szksgnk, aminek kezelse s nyilvntartsa megnveli a rendszer adminisztrcis munkjt. Az idvesztesg minimalizlsa rdekben az adatbzis-kezel rendszer zrakat kezel komponense 5-10 msodpercenknt vgigvizsglja a lefoglalt s a lefoglalni kvnt erforrsok listjt. Ebbl meg tudja llaptani, hogy ltrejtt-e patthelyzet. Ha igen, akkor az egyik tranzakcit hibazenettel lelltja, annak zrai felolddnak. A msik tranzakci teht az emiatti pr msodperces vrakozs utn akadlytalanul dolgozhat tovbb. A lelltott tranzakcit termszetesen jra kell indtani. De errl legalbb igen hamar rteslnk. Vgl a 8.6. s 8.7. brn bemutatjuk, miknt alakulhat ki patthelyzet ugyanazon rekord megismtelhet mdon val beolvassakor is, s hogy hogyan segt ezen az U zrak bevezetse. Az A tranzakci T1-kor, a B T2-kor olvassa be az 1111 rukd rekordot megismtelhet (RR) olvasssal. Miutn nem tudjk biztosan, hogy meg fogjk-e menetkzben vltoztatni, egyikk sem tesz r X zrat, hiszen ekkor B biztosan nem tudna prhuzamosan dolgozni. A T3-kor, B pedig T4-kor szeretn tnylegesen megvltoztatni ezt a rekordot. Ezrt a meglv S zrat t akarjk alaktani az ersebb X zrr. De ezt egyikk sem teheti meg a msik S zra miatt. Ltrejtt a patthelyzet! Ha A T1-kor gondol arra, hogy alakulhat gy a feldolgozs, hogy mdostani akarja a rekordot, akkor S helyett U zrat ttet fel r (ld. 8.7. bra). Ha B csak olvasni kvnn az 1111 rekordot, akkor ezt minden korltozs nlkl megteheti. Az S s az U zrak kompatibilisek egymssal. Ha viszont B is szmt esetleges mdostsra, akkor neki is U zrat kellene feltetetnie. Ez a mr ltez U zr miatt nem lehetsges. Vrakozni knyszerl, mg a T4 idpontban az A tranzakci vget nem r. Ami viszont bekvetkezik, mert patthelyzet nem alakulhatott ki. 8-9

8.6. bra:

Patthelyzet ugyanazon rekord miatt.

8.7. bra:

Patthelyzet megakadlyozsa U zr alkalmazsval

Ez a plda is mutatja, valamit valamirt. A hatkony prhuzamos feldolgozst csak szszer kompromisszumokkal lehet megvalstani. Mint azt mr tbbszr hangslyoztuk, Nincs potya kaja, de legalbb elfogadat ron lakjunk jl.

8-10

8.5. Problmk s megoldsuk Ebben az alfejezetben a szerzk kzl az idsebb (QP) tbb vtizedes gyakorlati tapasztalatbl ismertet nhny olyan hibt, melyet elssorban fnkei, munkatrsai, beosztottjai, de szintn bevallva idnknt maga kvetett el, majd szerencsre ki is javtott. Utlag visszatekintve, e tvedseknek a tbbsge annyira nyilvnval volt, hogy soha sem lett volna szabad ezeket elkvetni. Gondos tervezssel, a feladat alapos vgiggondolsval mindegyikk elkerlhet lett volna. De mindenki, aki csak kicsit is komolyabban dolgozott olyan informatikai rendszerekkel, melyeket profi fejlesztk ksztettek a szmra, vagy megfordtva, neki kellett msok ltal hasznland szoftvert ellltani, tudja, hogy hiba nlkli informatikai rendszer nem ltezik. Legfljebb mg nem vettk szre az sszes hibjt. A j adatbzis-felgyelt az klnbzteti meg a kezdtl, hogy a j mr sokkal tbb hibt kvetett el, mint a kezd. A kivl pedig mg tbbet. Hiba mondjk, hogy ugyanabba a verembe, stackbe (bocsnat a szmtstechnikai szakkifejezsrt, magyarul folyba) nem lphetsz ktszer bele, s hogy a blcs a ms krn tanul, mg a legblcsebb adatbzisfelgyel s felhasznl is csak azokbl a hibkbl okul igazn, amelyeket sajt maga is elkvetett. Ha valaki napokat tlttt el egy ravasz hiba megtallsval s kijavtsval, akkor gy vli, ugyanazt a hibt mg egyszer nem fogja mr elkvetni. De ha nem mdost plyt, vagy nem vonul ideiglenes vagy rk nyugdjba, akkor bizony nagy valsznsggel jra beleesik ugyanabba a verembe. De ekkor mr sokkal hamarabb, esetleg mr nhny ra alatt rjn a hiba okra. Kijavtja, s tbbet mr nem fogja ugyanezt elkvetni. Vagy ha mgis, akkor mr tz perc alatt megoldja a problmt, s ezutn Ha elg hossz ideig dolgozik a szakmban s elg sok helyen megfordul, akkor ennek a majdnem vgtelen ciklusnak a vgre ezen problma kezelsnek orszgosan elismert szakrtje lesz. Miutn hossz letem sorn elg sok hibt elkvettem mr (sajnos nem csak adatbzisokkal kapcsolatban), ezek tanulsgait levonva nhny tipikus eset ismertetsvel szeretnk az olvask szmra segtsget nyjtani, hogy hasonl hibkba ne essenek bele, vagy megoldsukra tleteket kapjanak. Egy igazn profi adatbzis-felgyel teljestmnyre az jellemz, hogy hasznos munkaidejnek mintegy 70%-t azoknak a problmknak a megoldsa teszi ki, amelyek abbl addtak, hogy a felhasznlk s a menedzserek nem fogadtk meg a tancsait, javaslatait. A megmaradt 30%-ban pedig azokat a problmkat prblja kikszblni, amelyek azrt alakultak ki, mert megfogadtk a tancsait. Amg ezt az arnyt tartja, addig munkja eredmnyes. 8.5.1. Be kellett a rcsos kaput zrni A pldkban ismertetend rendszerben 16 darab tbb processzoros risi IBM mainframe volt. Ezekre 60 darab kzpgp csatlakozott, melyeken sszesen 2000 PC lgott adatlekrdezsi s beviteli clokbl. Az adatllomnyt az IBM gpeken nhny szekvencilis fjl kivtelvel UDB/DB2-ben, a kzpgpeken INFORMIX-ban troltk. A rendszer az zemszer mkdskor mintegy 250 rekord tpust s 2 millird rekordot tartalmazott. Ebben a biztonsgi mentseket s a hatkonysg rdekben elvgzett rendszeres tszervezseket nem szmtva naponta tz milli tranzakcit kellett vgrehajtani. Az informatikai fejlesztsen s a karbantartson veken keresztl 150-250 ember dolgozott folyamatosan. Az on-line tranzakcik indtsa, j adatok bevitele PC-krl trtnt. Az adatok zmt a kzpgpeken ellenriztk, s onnan kldtk tovbb a megfelel mainframere. Bizonyos ellenrzseket azonban nem lehetett azonnal elvgezni, az ehhez szksges adatok a nagygpeken voltak. Ezeket a rendszer sszegyjttte. jszaka, ktegelt zemmdban hajtottk ket vgre. Ennek eredmnyt a kzpgpeken keresztl visszakldtk a PC-kre s az ellenrzs befejeztt nyugtztk. A tranzakcikban rsztvev rekordok sttusmezjben a 8-11

mainframen jeleztk ezt: feldolgozsra vr - feldolgozott - visszakldtt - visszarkezett. A rendben visszarkezett tranzakcik egy id utn trldtek a nagygpen. A ktegelt feldolgozs vgt egy erre szolgl specilis bit jelezte. Ha szabadot mutatott, a kzpgpek nekiugrottak a mainframenek. tvittk a DB2-s tblzatok adatait s mdostottk a sttusvltozkat. A rendszertesztnl semmi problma nem merlt fel. Amikor azonban 4-5 kzpgp egyidejleg rohamozta meg a DB2-t, bellt a katasztrfa. Pontosabban a patthelyzet. A DB2ben ugyanis a zrmret automatikusan a lap. Mivel egy tranzakci tbb tblzatot, s egy tblzaton bell tbb rekordot is rintett, a mdostott rekordokat tartalmaz lapokat a rendszer automatikusan elzrta a tbbi felhasznl ell. Mivel a sttusmdostsok mg egy tranzakci rekordjainl sem kvetkeztek be egyidejleg, s ugyanarra a lapra klnbz tranzakcik lapjai is kerlhettek, az elzrt lapok pillanatokon bell sszekeveredtek. Ltrejtt a patthelyzet. Az els gondolat az volt, hogy a kzpgpek egyms utn vegyk t az adatokat. Ekkor viszont kifutottunk volna az idbl. gy maradt a msik, utlag visszagondolva pofonegyszer megolds. Megvltoztattuk a zrmretet! Nem a lapokat, hanem csak a megvltozott rekordokat zroltuk. Ezekben a tblzatokban a feldolgozsban ppen rintett rekordok szma nem tl nagy, legfljebb 15-20 ezer lehet. Ekkora mennyisgnl a lapzrak helyett az egyedi sorzrak alkalmazsbl add rendszeradminisztrcis tbbletmunka elviselhet. Ilyen mdon a patthelyzetek s az ebbl kvetkez knyszer programlellsok szma napi szzrl a mr kezelhet 2-3 -ra cskkent. A kvetkez pldban az elbbi korrekci ellentettjt mutatjuk be. Nem szabad mindig kicsire vlasztanunk a zrolsi egysgeket azrt, hogy a prhuzamos feldolgozs lehetsgt megnveljk. Egy trzsadat-vltoztatst vgz programban a programoz nem vglegestette a vltozsokat (ami egyben a zrak feloldst is maga utn vonja) feldolgozs kzben, hanem csak a program vgn. Ez ltalban nem okozott gondot, mivel egy feldolgozsban legfljebb nhny tzezer rekord mdosult. Egyszer azonban mg a feltlts llapotban a vltozsok szma (j adatok bevitele) a tbb millit is elrte. Ilyen sok zr kezelsre a rendszernek nem volt elegend munkaterlete. Ebbe nemcsak ez a program halt bele. Az egsz adatbzis-kezel rendszer lellt! A helyes megolds ez lett volna. Kiegsztjk a programot, hogy idnknt (pl. minden 500 rekord feldolgozsa utn) adjon ki egy COMMIT-ot, szabadtsa fel a zrakat. Ez azonban a program tdolgozst jelentette volna. Mivel a problmt srgsen meg kellett oldani, egy ideiglenes, de gyors megoldst vlasztottunk a kzlekedsbl jl ismert plda alapjn. Ha tl sok baleset van egy ton, akkor a legbiztosabb az egsz utat elzrni mindennem kzlekeds ell. Lapok helyett indulskor az egsz tblzatot elzrtuk. gy milli lapzr helyett csak egy tblzat zr maradt. Igaz, hogy ezen id alatt senki ms sem frhet a tblzathoz. De ilyen nagy volumen mdosts esetn ne is tegye volt a magyarzat. s klnben is, ez csak egy ideiglenes megolds, mihelyst idnk lesz, tdolgozzuk a programot. Termszetesen az ideiglenes megolds vglegess vlt. Mivel a trzsadat karbantart program csak jszaka futott, senki nem vette szre, hogy az egyik legfontosabb tblzat hosszabb ideig el volt zrva minden ms feldolgozs ell. Trtnt azonban, hogy valamilyen ok miatt a programot csak hajnalban indtottk el, s mg akkor is futott, amikor az on-line feldolgozs elkezddtt volna. De senki sem tudott dolgozni, mert mindenkinek szksge lett volna erre az elzrt tblzatra. Az zemben viszonylag hamar kidertettk a hiba okt. Jogosan gy dntttek, hogy az on-line feldolgozsnak adnak elsbbsget. Ezrt a trzsadat-karbantart programot mestersges kls beavatkozssal lelltottk. Igen m, de ez az adatbzis konzisztens llapotnak megtartsa miatt egy ROLLBACK-et vont maga utn. Ennek a programnak miutn nem volt benne COMMIT az elindtstl kezdve vgrehajtott sszes mdostst rvnytelenteni kellett. Ez pedig olyan rgen trtnt, hogy a

8-12

helyrellts alapjul szolgl, a vltoztatsokat nyilvntart fjl mr archivlva lett, nem volt kzvetlenl elrhet. Miutn az id srgetett, a helyrelltst is lelltottk, aminek eredmnyeknt az egsz adatbzis-kezel rendszert jra kellett indtani. Azt viszont nem lehetett addig, amg az adatbzist a vltoztatsok eltti llapotba vissza nem lltottk. Ezek a munkk vgl majdnem egy napot vettek ignybe. Addig senki nem dolgozhatott az adatbzissal. Ezutn az epizd utn a karbantart programot trtuk. Lapzrakkal s rendszeres COMMIT-tal dolgozik, immr mindenki teljes megelgedsre. Konklzi: Nem mindegy, hogy mit s hogy mekkora lakattal zrunk le. 8.5.2. Utols pr, elre fuss! Viszonylag sok idt takartottunk meg a kvetkez egyszer trkkel is. A napi tranzakcikat tartalmaz klnfle tblzatokban az elsdleges kulcs az egyedtpus azonostja mellett egy folyamatosan nvekv sorszm volt. Ennek rtkt j adat bevitelekor a program hatrozta meg a SELECT MAX(SORSZM) FROM WHERE AZONOSIT = :inputbl jv azonost SQL utasts alapjn. Az j sorszm a kivlasztott maximlis sorszm +1 lesz. Ehhez vgig kellett olvasni az adott azonosthoz tartoz sszes index bejegyzst, esetenknt akr tbb szzat is. Az AZONOSIT + SORSZM sszetett indexben a SORSZM szerinti rendezettsget cskkenre mdostva az els indexbejegyzs megadta azonnal az utols sorszm rtkt. Mg az adott azonost rtkhez tartoz indexeket sem kellett vgigolvasni. Sok kicsi sokra megy. Mivel a mveletet nagyon sokszor kellett vgrehajtani, a futsi id rzkelheten lecskkent. Konklzi: Nem mindegy, melyik klyhtl indulunk el, ha mr teli a szoba. 8.5.3. Hlye-biztos programokkal csak hlyk dolgoznak A felhasznlk s a rendszerszervezk biztostani szeretnk magukat minden lehetsges meglepets ellen. Mindent, mindenhol le akarnak ellenrizni, hogy mg ha szemt is menne be, akkor se jjjn szemt ki. Az ilyen programokat hlye-biztosnak tekinthetjk. De egy id utn annyira nehzkess vlhatnak, hogy csak a hlyk fogjk ezeket hasznlni. Papron, tesztkrnyezetben az ilyen hlye-biztosts nem okoz gondot. Legfljebb meghosszabbtja a program tervezshez, kdolshoz s az adatbzis kialaktshoz szksges idt. De amikor egy rgebbi vltozatbl esetleg megmaradt hiba kiszrse miatt naponta vgig kell vizsglni tz millis tblzatokat, akkor ez a biztonsg mr igen sokba kerlhet. Az egyik 100 milli rekordot tartalmaz trzsadat tblzatba a kezdeti hibs tervezs miatt belekerlhettek olyan adatok, melyeknek keletkezsi dtuma vagy a bevitelrt felels fik ismeretlen volt. Ezrt a szervez minden feldolgozsi ciklus eltt beptett egy ellenrzst, vajon vannak-e ilyen adatok. Ez a teljes tblzat soros vgigolvasst, ennl az adatmennyisgnl mr napi 10-15 percet jelentett. Persze lehetne indexet is pteni ezekre a mezkre. Ekkor az ellenrzsi id msodpercekre cskkenne. Csak ppen az indexek trolsra mg 4-5 Gigabyte-ra lenne szksg. Ez pedig mg egy ekkora rendszernl is megfontoland. Az adatok elemzse azt mutatta, hogy a 100 milli rekordbl csupn egynek volt ismeretlen a keletkezsi dtuma s ezernl is kevesebb nem tartozott egyik fikhoz sem. De ezt mindig leellenriztk. A helyes megolds: egyszer kijavtani a hibs adatokat. Az 8-13

ellenrz felttelt bepteni az adatbzisba s ez ltal a hibs adatok bevitele lehetetlen lesz. A napi ellenrzst nem kell tbb vgrehajtani. Egy id utn vgl meg is valstottuk ezt. Konklzi: Ne akarjuk a programot minden ron hlye-biztoss tenni. Inkbb eleve vjuk meg a hlyktl. 8.5.4. Nincs optimlis optimalizl A nagy informcis rendszerek napjainkban a relcis modellre plnek. Ezekben ltrehozhatunk a hatkony feldolgozs rdekben klnbz objektumokat (tablespace-k, indexek), meghatrozhatunk paramtereket (srsds, res helyek fenntartsa ksbbi bvtsekre, zrolsi egysgek). De abba, hogy egy adott feladat megoldshoz a rendszer milyen utat vlasszon, kzvetlen beavatkozsi lehetsgnk az utbbi nhny v kivtelvel ltalban nem volt. A feldolgozsi programoknl a gyakorlatban legtbbszr a fordts utni BIND lpsnl (ld. 5.7.2. pont) hatrozza meg az SQL optimalizl a szerinte optimlis elrsi utat. Az optimalizlshoz szksges informcik a katalgusban (ld. 7. fejezet) vannak. Ezeket azonban csak idnknt, a statisztikkat elkszt szolgltat programok futtatsakor aktualizljk, mert klnben minden erforrs rmenne a statisztikk ksztsre. Ezrt fontos, hogy a statisztikai adatok eloszlsa lnyegben azonos legyen az elrsi t meghatrozsakor (a BIND idpontja) s a program futsakor. Hogy az milyen bajokat okozhat, ha nem gy van, ismt egy letbl vett pldn mutatjuk be. Itt csak effektv csalssal tudtuk az SQL optimalizlt a helyes tra terelni. A napkzbeni on-line feldolgozs klnbz tpus tranzakcikat olvasott be, trolt, majd trlt. Az ideiglenesen trolt rekordok szma menetkzben tbb szzezer is lehetett. Ezek tbbsgnek tpuskdja 00 volt. Az ilyen kd tranzakcik az on-line feldolgozs vgn trldtek az adatbzisbl. gy amikor a statisztika kszlt, az azt mutatta, hogy ilyen tranzakci egyltalban nincsen. A programok gyakran kerestek rekordokat a tranzakciban szerepl szemly azonostja s a tpuskd = 00 felttel alapjn. Br az els felttel szerint a kivlaszts majdnem egyrtelm (egy sorszm jelzi mg, az illetnek aznap ez hnyadik tranzakcija volt), az optimalizl mgis a tpuskdra ptett indexek alapjn ment vgig a rekordokon, hiszen itt a statisztika azt grte, hogy rgtn megllapthatja, nincs tallat. A valsg azonban az volt, hogy ahogy telt az id, gy lett egyre tbb 00 tpus rekord a tblzatokban. Tbb tzezer ezen indexrtkhez tartoz rekordot kellett vgigolvasni az adott tulajdonos nhny rekordjnak megtallshoz. j statisztika s BIND itt csak akkor segtett volna, ha azt napkzben, adatokkal feltlttt tblzatokon vgeznnk el. Ez azonban zavarta volna a feldolgozs menett. Itt mr csak a csals segtett. Rendes statisztika helyett mestersgesen meghatrozott rtkeket vittnk be a katalgus megfelel helyeire. gy az optimalizl azt ltta, rdemesebb neki a tranzakci tulajdonosra pl index nhny rekordjt vgigolvasni s megvizsglni, vajon 00-e ott a tpuskd. Ezt a hamistst egyszer hajtottuk vgre. A programokat jra BINDeltk. Azta ezeknek a tblzatoknak a statisztikjt nem aktualizltuk. A feldolgozs ideje csaknem egy nagysgrenddel lecskkent. Egyes rendszerekben (pl. ORACLE, UDB/DB2 jabb verzii) ma mr lehetsg van arra, hogy mi adjuk meg kzvetlenl az utastsban, milyen ton kvnjuk elrni az adatokat. Ekkor nem knyszerlnnk csalsra. Ez persze veszlyeket is rejt. Nem mindig lesznk okosabbak az SQL optimalizlnl! Els konklzi: Csak annak a statisztiknak higgyl, amelyiket magad hamistottl meg.

8-14

Msodik konklzi: Egy stradivari hangjait csak egy nagy mvsz tudja igazn kihozni. 8.6. Ellenrz krdsek 1. 2. 3. 4. 5. 6. Milyen problmk lphetnek fel prhuzamos feldolgozsnl? Milyen szempontok szerint csoportosthatjuk a zrakat? Milyen zrak kompatibilisek egymssal? Mi a klnbsg az ismtelhet olvass (Repeatable Read) s a nem vglegestett adatok olvassa (Uncommitted Read) kztt? Mi a patthelyzet kialakulsnak az elfelttele? Mirt nem tudjuk adatbzisokban teljesen megszntetni a patthelyzetet?

8-15

9. ADATTRHZAK
A knyv eddigi fejezeteiben vgig feltteleztk, hogy az adatbzisokat felhasznl szervezetek egy egysges, integrlt adatbzist hoztak ltre s azt mkdtetik. A valsg azonban mg ma sem ilyen szp! A legtbb helyen egyes rszlegek, alkalmazsi terletek a sajt ignyeiknek megfelel nll adatbzissal (is) dolgoznak, melyek csak tbb-kevsb illeszkednek be az integrlt rendszerbe. Nmi tlzssal azt is mondhatnnk, hogy a vllalatok, szervezetek megfulladnak az adatok tengerben, de hen halnak az informcik hinytl. Magyarorszgon mg mindig nem sikerlt ltrehozni az egysges llamigazgatsi informcis rendszert, amelynek az alrszei (belgyi, egszsggyi, ad, stb.) teljes mrtkben tjrhatak s kompatibilisek egymssal. Ennek rszben technikai okai is vannak, de jelents mrtkben hozzjrul az a tvhit is, ami a szemlyi adatok eltlzott vdelmbl addik. A hagyomnyos adatbzisok elssorban a szervezet napi feladatait tmogatjk. A szervezet mkdshez szksges tranzakcik regisztrlst, folyamatos feldolgozst vgzik el. A vezeti dntsekhez azonban msfle informcik is szksgesek. A pillanatnyilag rvnyes adatok mellett nagy sly helyezdik a klnbz szempontok szerint sszevont adatok aggregtumaira s ezek idbeli vltozsaira. Br a hagyomnyos adatbzisokkal ilyen feladatokat is meg lehet oldani, clszerbbnek ltszott a mkdshez s az elemzshez szksges adatokat sztvlasztani. Az elemzshez szksges adatok trolsra, egyszer s hatkony elrsre hoztk ltre az adattrhzakat (Data Warehouse) s az ezekben rejl informcik feldertsre szolgl specilis mdszereket, elssorban az adatbnyszatot (Data Mining). A 9.1 tblzatban sszefoglaljuk, melyik mdszer milyen feladatok elvgzsre a legalkalmasabb. 9.1. tblzat: A hagyomnyos adatbzisok s az adattrhzak sszehasonltsa. Mdszer Hagyomnyos adatbzis Adattrhz Adatbnyszat F funkcik Lekrdezsek, tranzakcik, mdostsok Lekrdezsek igen nagy statikus adatmennyisgbl Az adattrhz adatai kzt fennll (rejtett) sszefggsekre dert fnyt Jelleg Dinamikus, elssorban az aktulis llapotot tkrzi Idbeli vltozsokat mutatja, Adatok elemzsre szolgl Ad hoc s nem pontosan definilt feladatok megoldsa

9.1. Az adattrhz jellemzi. Az adattrhz a relcis adatbzisoknak egy specilis tpusa, amelyet nem tranzakci feldolgozsra, hanem lekrdezsek s elemzsek vgrehajtsra terveztek. Klnbz tranzakcis adatokbl szrmaztatott adatokat trol egysges formban idbeli vltozsuk s felhasznlsi terletk szerint csoportostva. Bevezetskkel a tranzakci s az elemz feldolgozs sztvlik. Az els tovbbra is az adatbzisokban trtnik, mg a msodik (egyre inkbb) az adattrhzakban valsul meg. Az adattrhzhoz hozztartozik a kiszolgl krnyezete is. Ez az adattrhzba bekerl adatok kivlasztst, tvitelt, egysges formtumra val tkonvertlst, betltst, on-line trtn automatikus elemzst s az eredmnyeknek a felhasznl szmra ttekinthet megjelentst is biztostja. Az adattrhz fbb jellemzi:

9-1

Tmakrk, felhasznlk (pl. beszerzs, elads, rukszlet,) szerint orientlt. Ha ezek a specializlt ignyek szerint szerkezetileg fggetlenek egymstl s nllan lekrdezhetek, akkor az adattrhz gy elklnl rszeit adatpiacoknak (Data Mart) nevezzk. Integrlt. Egysges a klnbz helyekrl szrmaz adatok elnevezse, trolsi formja. Idfgg. Az esemnyek idbeli vltozsa nyomon kvethet. Statikus. Az egyszer bert adatok soha sem mdosulnak. A vltozst csak j adatok bersa, vagy elavultak vgleges trlse jelenti. Ezekkel a mveletekkel nem folyamatosan, hanem csak idnknt aktualizljk az adattrhz adatait.

9.2. A hagyomnyos adatbzisok s az adattrhzak sszehasonltsa. A tranzakci feldolgozsra orientlt hagyomnyos adatbzis komplex adatszerkezett normalizlt, ltalban 3NF relcikban (ld. 4.6.4. pont) brzoljk. Ezekre a feldolgozs hatkonyabb ttele rdekben nhny indexet ptenek s rendszeresen kpezik klnbz relcik joinjt, ami nagy tblzatoknl meglehetsen idignyes. A redundancit kerlik s csak ritkn trolnak az alapadatokbl kiszmolhat szrmaztatott adatokat. Az egyes rekordokat rendszeresen mdostjk s az utols llapot hatkony elrsre optimalizlnak. A feladatok jelents rszt elre be lehet programozni. Ezzel szemben az adattrhzak a relcis modell lehetsgeit kibvtik a 9.4.2. pontban ismertetett csillag szerkezettel s a dimenzikkal. Lnyegesen tbb indexszel dolgoznak, de jval kevesebb joint hasznlnak. A gyakran szksges joinok helyett inkbb redundnsan trolnak adatokat 1NF s 2NF relcikban. Mivel a mr bert adatok tartalmt sohasem mdostjk, az alacsonyabb normalizcis fokbl addhat anomlik (ld. 4.6.3. pont) nem okoznak problmt. A gyors lekrdezs rdekben sszevont adatokat, aggregtumokat is rendszeresen trolnak (Pl. idszakok, vagy hely szerint sszegzett adatokat). Az adatokat hossz idszakra visszamenleg is troljk. Az adattrhzakban nagysgrendekkel tbb adatot trolnak s tbbel is dolgoznak egyidejleg, mint a tranzakcis adatbzisokban. A fenti eltrseket a 9.2 tblzatban foglaltuk ssze. 9.2. tblzat: Tranzakci orientlt adatbzisok s adattrhzak f eltrsei. Tranzakci feldolgozsra orientlt adatbzis Elssorban adott feladatokra optimalizlt Brmikor lehetsges Normalizlt (3NF) Adattrhz Ad hoc jelleg lekrdezsek Bent lv adatokat nem lehet vltoztatni. j adatok bevitele, elavultak trlse csak meghatrozott intervallumokban lehetsges Rszben normalizlt, s csillag. Lekrdezsre optimalizlt Sok milli rekord beolvassa

Feladatok Adatok vltoztatsa Adatmodell Tipikus mveletek Adatok idbeli vltozsnak trolsa

Nhny rekord kivlasztsa, mdostsa, bersa, trlse Aktulis, vagy csak rvid idre Hossz idre visszamenleg trolt visszamenleges

9-2

9.3. Adattrhz architektra Minden adattrhz a kvetkez mveletekkel s komponensekbl pl fel. adatforrsok, adatkivlaszts, adatelkszts s bevitel, eredeti s szrmaztatott adatok s defincijuk trolsa, on-line analitikus elemz, felhasznli analizl eszkzk, adatbnyszati eszkzk, eredmny megjelentk. Az albbiakban rviden ismertetjk ezek feladatait. Adatforrsok. Az adattrhzba klnbz forrsokbl, tranzakcis adatbzisokbl, klnfle adatfjlokbl, esetenknt kzvetlen inputbl kerlnek be az adatok. Ugyancsak innen kerlnek be az adatok rtelmezsre szolgl adatlersok, az gynevezett metaadatok is. (Ezek lnyegben a 7. fejezetben trgyalt katalgusnak felelnek meg.). Ahhoz, hogy ezekbl sszelljon az adattrhz adattartalma, az albbi lpsekre van szksgnk: Az adatok kivlasztsa. Az esetenknt tbb tucat adatforrs adataibl kijelljk azokat, amelyeket t kell vinnnk az adattrhzba. Ez a kivlaszts az adatok tartalma s az elemzsi feladatok alapjn trtnik. Tartalmazza azokat, amelyeket az adattrhzban eredeti formjban is trolunk s azokat is, amelyekbl szmtssal, aggregtumok ksztsvel, ms adatokkal val sszevonssal (pl. joinnal) olyan szrmaztatott adatokat kpeznk, melyeket szintn trolni fogunk az adattrhzban. Az adatok egysgestse, ellenrzse, javtsa. A klnbz helyekrl szrmaz adatok elnevezse, formja, rtelmezse eltr lehet. Ezrt ezek az adattrhzba val bevitel eltt egy egysgestsi, tiszttsi s ellenrzsi folyamaton mennek keresztl. Ez lehet egy egyszer, automatikusan elvgezhet mrtkegysg transzformci (pl. Fahrenheit fokok tszmtsa Celsiusra, azonos ruk mennyisge kg-ra), nevek s hozzjuk kapcsold cmek (Dr., ifj., grf, stb.) azonos formba val trsa, klnbz azonost kulcsok (pl. katalgus szm s alkatrsz szm) egysgestse. De lehet egy hibajavtssal kombinlt ellenrzs is. (Pl. ugyanahhoz a szemlyhez kt eltr lakcm tartozik). Ugyancsak idetartozik az azonos adatok egysges rtelmezse is. Tipikus plda erre, amikor nem hasznljk a NULL rtket. (Pl. ha nem ismerik valaminek a kezdsi vagy befejezsi idpontjt egy rtelmezhetetlen dtumot, ismeretlen szmrtk helyett csupa 0-t vagy 9-et rnak be). Az gy konszolidlt adatokbl lltjk el azokat az sszegz adatokat, lekrdezsekre optimalizlt 3NF-nl alacsonyabban normalizlt tblzatokat is, melyeket a tranzakcis rendszer kivlasztott adataival egytt trolnak. A periodikusan, ltalban naponta vagy hetente trtn tnyleges adattvitel kt mdon valsulhat meg. Az egyszerbb mdszer az, amikor az adatforrsokbl mindig minden adatot tvisznek az adattrhzba. Mivel azonban igen nagy adatmennyisgek feldolgozsrl van sz, a gyakorlatban az adattrhz els feltltse utn a legtbbszr csak inkrementlis kivlasztssal s tvitellel dolgoznak. Ez azt jelenti, hogy az adatforrsokbl csak azokat az adatokat veszik tekintetbe, melyek az adattrhzba val utols tvitel utn keletkeztek. Az adattrhzak eredmnyes hasznlathoz hozztartoznak mg a benne lv informcik kinyerst szolgl eszkzk, gy a klnfle on-line analitikus elemz szoftverek, adatbnyszati eszkzk s az eredmnyek grafikus megjelentsre szolgl interfszek. Ezek trgyalsa azonban meghaladja ezen knyv kereteit. Az adattrhz felptsi s mkdsi architektrjt a 9.1 brn lthatjuk.

9-3

9.1. bra:

Az adattrhz felptsi s mkdsi architektrja.

Az egyszerbb s gyorsabb hasznlhatsg rdekben a rengeteg adatot tartalmaz adattrhzakbl gyakran redundnsan dupliklnak olyan rszeket, melyek kizrlag egyes alkalmazsi terletek informcis ignyeit elgtik ki. Az gy kapott mini adattrhzakat nevezzk adatpiacnak. Az adatpiacok mr az adattrhzbl kapjk az adatokat, de olyan szerkezetben, sszettelben, hogy az optimlisan megfeleljen az adott rszterlet (pl. elads, beszerzs) feldolgozsi ignyeinek. Tartalmazzk a sajt szerkezetk lersnak metaadatait is. Az adatpiacokkal kiegsztett adattrhz felptst a 9.2. brn mutatjuk be. Az ttekinthetsg kedvrt a 9.1 brn mr rszletezett komponenseket nem tntettk fel.

9.2. bra: 9.4. Adatszerkezet

Adatpiacokkal kiegsztett adattrhz

Az adattrhz szerkezett tekintve egy relcis adatbzis az albbi specilis kiegsztsekkel: a tblzatokba csak rni lehet, j adattpus kerlt bevezetsre, a dimenzi, j relcik kzti kapcsolat kerlt bevezetsre, a csillag szerkezet. 9-4

9.4.1. Csak berhat tblzatok A tranzakci orientlt adatbzisok tblzatain brmilyen adatkezel mveletet elvgezhetnk. gy ezek sorait mdosthatjuk, trlhetjk is. Egy ilyen mvelet utn a rekord eredeti tartalma elveszik a tblzatbl. A megmarad rekordok mindig az ppen aktulis rtkeket tartalmazzk. A korbbi, a vltoztats eltti rtkek legfljebb korltozottan, rvid idre visszamenleg llnak rendelkezsre, vagy llthatk vissza a trolt tranzakcikbl s a biztonsgi mentsekbl. A csak berhat tblzatokban (insert only table) a meglevk megtekintsn kvl csak j sorokat rhatunk be. Sorok tartalmnak mdostsa vagy teljes trlse tilos. (Ez utbbi all az elavult adatokat tartalmaz sorok vgleges trlse az adatbzisbl az egyetlen kivtel.) Az adattrhzak adatait kizrlag csak berhat tblzatokban troljuk. Ezltal azok rekordjainak minden rtke hossz tvon, az adattrhzban troland adatok teljes idintervallumn bell a rendelkezsnkre ll. Hogy az gy elllt adathalmazt rtelmezni tudjuk, a bert rekordok mindegyikt kiegsztjk egy idblyeggel (timestamp), ami megadja, mikor kerlt be a rekord a tblzatba s egy mvelet jelz oszloppal, ami megmutatja, hogy a berskor egy j rekord jtt-e ltre (C, Create), egy mr korbban is meglv rekord mdostott adatait tartalmazza-e (U, Update), vagy mr nem is tartozik a tblzatba, mert trltk onnan (D, Delete). A rekord aktulis rtkt a legfrissebb idblyeghez tartoz sor szolgltatja. Ha ebben a mvelet rtke D, akkor a rekord tartalmilag mr megsznt, nem rsze a tblzatnak. A ktfle brzolsmd kzti klnbsget egy pldn mutatjuk be. Leegyszerstett adatbzisunk illetve adattrhzunk takarkbettknyvek nyilvntartsra szolgl s a kvetkez adatokat tartalmazza: Tranzakcis adatbzisoknl az rvnyben lv bettknyv azonostja, aktulis egyenlege s az utols mdosts idpontja, norml tranzakcinl (bett/kivt), hogy az melyik bettknyvre vonatkozik, mekkora az sszege (+ bett, - kivt) s mikor trtnt, specilis tranzakcinl (j bettknyv megnyitsa, meglv megszntetse) tartalmazza a specilis mvelet jelzst is. Itt teht egy aktv bettknyvhz mindig pontosan 1, egy megszntetetthez 0 rekord tartozik.

9.3. bra:

Tranzakcis adatbzis tblzatai s adatai 2007. janur 17-n

9-5

9.4. bra:

Tranzakcis adatbzis tblzatai s adatai 2007. februr 28-n

Adattrhzaknl minden bettknyvre szerepel a rekordban a bettknyv azonostja, a mdosts utni egyenlege, a mdosts ideje, hogyan keletkezett az j rekord (C, U vagy D). Itt egy bettknyvhz, akr l, akr megszntetett, legalbb egy de tbb rekord is tartozhat.

9.5. bra:

Adattrhz tblzatai s adatai 2007. janur 17-n

Az adattrhzban ezen kvl troljuk mg a tranzakcikat s mivel a pnzforgalomrl naponta, havonta s vente, a bettknyvekrl havonta s vente sszestket kell ksztennk az albbi aggregtumokat is: Pnzforgalmi sszest: idpont s idtartam jelzse, az adott intervallumban az j s megszntetett bettknyvek szma, az adott intervallumban az sszes mvelet, a befizetsek, a kivtek szma, sszege, egyenlege. Takarkbettknyv sszest: a bettknyv azonostja, 9-6

idpont s idtartam jelzse, a bettknyv megnyitsnak s megszntetsnek idpontja, egyenlege az idszak elejn s vgn, tlagos egyenlege az adott idtartam alatt, az adott intervallumban a bettknyvbe trtn sszes mvelet, a befizetsek, a kivtek szma, sszege, egyenlege. Az adattrhz vrhat lekrdezseit figyelembe vve kpeztk ezeket az aggregtumokat s a bennk lev redundancikat.

9.6. bra:

Adattrhz tblzatai s adatai 2007. februr 28-n

A tblzatok tartalmt kt klnbz idpontban a tranzakcis adatbzisban a 9.3, 9.4., az adattrhzban a 9.5 s 9.6 brkon mutatjuk be. Azokrl a napokrl, amikor nem trtnt semmi, nem ksztettnk bejegyzst. Az azonos bettknyvben ugyanazon a napon trtnt pnzmozgsok sorrendjt a tranzakci rjnak, percnek ideje alapjn meg tudjuk hatrozni, de ezeket az ttekinthetsg rdekben nem tntettk fel. A bettknyv megnyitsa automatikusan egy bett elhelyezst, megszntetse egy kivtet (esetleg 0 sszeggel) is jelent.

9-7

A tranzakcis adatbzisokban a prhuzamos feldolgozsnl zrakkal (ld. 8.3. alfejezet) kell biztostanunk az adatok konzisztencijt. Ez kln adminisztrcit r az adatbzis-kezel rendszerre, megnehezti a prhuzamos munkt s patthelyzetet (ld. 8.4. alfejezet) is ltrehozhat. Az adattrhzakban zrakra mg igen hossz id alatt lefut lekrdezsek esetben sincsen szksg. A lekrdezs eredmnye mindig a lekrdezs kiadsakor fennll llapotot tkrzi. Ha a lekrdezs vgrehajtsa alatt kerltek be j rekordok a tblzatba, ezek a bennk lv idblyeg miatt nem fognak az eredmnybe bekerlni. Mg akkor sem, ha a fizikai kivlaszts pillanatban mr bent vannak az adattrhzban. 9.4.2. Csillag elrendezs Az adattrhzak s adatpiacok adatmodellje a csillag elrendezsre (Star schema) pl. Ennek a kzppontjban ll a minden elemi adatot s azok kereshet sszegzseit, szrmaztatott adatait tartalmaz tnytblzat (Fact table). Ennek elsdleges kulcsa az sszes klnbz lekrdezsi szempont konkatencija, adatai pedig ezen szempontok minden kombincijhoz tartoz elemi s sszegzett rtk. A tny-tblzat normalizlt. (ld. 4.6.4. pont). A kzponti tnytblzathoz kapcsoldnak idegen kulccsal a dimenzik (dimension), melyek a klnbz lekrdezsi szempontokat rjk le. Ezek nem normalizlt tblzatok. Legtbbszr egy (vagy tbb) hierarchit valstanak meg. Elemei a vizsglni kvnt szempont elemei s ezeknek a hierarchia klnbz szintjein elhelyezked rtkei. Grafikusan brzolva a tnytblzatot s az azt krbevev dimenzikat egy csillagszer alakzatot kapunk (ld. 9.7. bra). Innen szrmazik az elrendezs elnevezse. A fenti, nehezen tlthat defincit egy egyszer pldval tesszk rthetv. Adattrhzunk egy nemzetkzi hipermarket lnc eladsait tartalmazza. Ezeket hrom szempont, id, eladsi hely s termk szerint akarjuk elemezni. A tny-tblzat elemei az eladsok, melyek az elads dtumt, helyt, valamint az eladott termk mennyisgt, eladsi rtkt s a rvettett eladsi kltsget tartalmazzk. A legegyszerbb elemi rtk, amit be akarunk vonni az elemzsbe egy adott termknek egy adott ruhzban a napi forgalma. Ezrt az adattrhz feltltsekor (ld. 9.3. alfejezet) az ruhzak produkcis adatbzisbl nem az egyes eladsok adatait, hanem ezeknek termkek szerinti napi sszegzst visszk be az adattrhzba. A napi ruhzi termkeladsok mellett vizsglni akarjuk a forgalmat heti, havi, negyedves s ves bontsban, rufajtk s rucsoportok (pl. lelmiszerek, ruhzati cikkek, hradstechnikai eszkzk, stb.) szerint, valamint az ruhzak terleti eloszlsa (vros/megye, orszg ) alapjn s brmely szempont szerint annak minden elfordulsra sszegezve is. (Tejes idszak, minden termk s minden orszg). Mindegyik vizsglati szempont egy dimenzi lesz. Az egyes dimenzik elemei s jellemzik: Dtum dimenzi: teljes trolt id, vek, negyedvek, hnapok, hetek, napok. Termk dimenzi: minden termk, termkcsoportok, egyedi termkek. Eladsi hely dimenzi: minden ruhz, orszgok, vrosok/megyk, ruhz. Az adattrhz logikai felptst a 9.7. brn, a tnytblzat nhny nknyesen kivlasztott adatt a 9.8 brn, az egyes dimenzikt pedig a 9.9., 9.10. s a 9.11. brn lthatjuk. PK, Primary Key, elsdleges kulcs (rsze), FK, Foreign Key, idegen kulcs. A tny-tblzatnak eleme pldul a budapesti Csillag ruhzban (Eladsi-hely-kd: 0000001) 2005.01.04-n (Dtum-kd: D050010004) eladott 48-as mret, kk Prince melegtk (Termk-kd: RSM0010) darabszma, eladsi sszrtke s eladsi kltsgeinek sszrtke (ld. a 9.8. bra els sort). Ugyancsak elemei az ebbl a termkbl ezen a napon

9-8

az egsz vilgon (Eladsi-hely-kd: XXXXXXX), valamint a teljes elemzsi idszakban (Dtum-kd: XXXXXXXXXX) Budapesten (Eladsi-hely-kd: 0000100) eladott darabszmok s rtkek (3. s 9. sor).

9.7. bra:

Csillag elrendezs logikai felptse.

9.8. bra:

Az ELADS tnytblzat nhny nknyesen kivlasztott adata.

Az egyes dimenzik azonostsra elsdleges kulcsknt mestersgesen kpzett kdot hasznlunk. Az entits esetleg ltez termszetes azonostja, produkcis adatbzis-bli elsdleges kulcsa a dimenzi egy attribtuma. Ennek az az oka, hogy a termszetes azonostk br ritkn, de idnknt mgis megvltozhatnak. Ezt a vltozst azonban a csak berhat tnytblzattl, melyek a dimenzik elsdleges kulcsaira idegen kulccsal hivatkoznak, tvol akarjuk tartani.

9-9

9.9. bra:

A DTUM dimenzi nhny nknyesen kivlasztott adata.

9.10. bra:

Az ELADSI-HELY dimenzi nhny nknyesen kivlasztott adata.

9.11. bra:

A TERMK dimenzi nhny nknyesen kivlasztott adata

Az adattrhzbl az informcik zmt a tnytblzat s a dimenzik egyestsvel SQL lekrdezsekkel (join, ld. 5.6.3.2. pont) vagy a kifejezetten erre a clra kifejlesztett szoftver eszkzk segtsgvel kapjuk meg. Az adatpiacok s a nem nagyon komplex adattrhzak felptst jl rja le a csillag elrendezses adatmodell. Bonyolult adatszerkezetek is modellezhetk tbb tnytblzattal s az ezekhez tartoz egyedi s/vagy kzs dimenzikkal. (Az id/dtum mindig kzs dimenzi). A dimenzikon belli hierarchit is bepthetjk a modellbe. Az gy kibvtett brzolsi mdot hvjuk hpehely (Snowflake) modellnek. 9-10

9.5. Adatbnyszat Az adattrhzak felhasznlsnak egyik leggyorsabban fejld terlete az adatbnyszat (Data Mining). Az adatbnyszat clja az, hogy miknt lehet nagy adatbzisokban rejtett tudst, j sszefggseket, eddig nem ismert szablyokat, nem vrt mintkat felfedezni. Ha pontosan tudjuk, hogy mit keresnk, akkor hasznlhatjuk az SQL nyelvet is az adattrhzban val keressre. Tipikus pldk erre: Ki, mikor, milyen termket vsrolt? Mekkora az tlagos forgalom egy rgiban jliusban? Ha bizonytalanok vagyunk, mit is keresnk, prblkozsok sokasgval akkor is megkaphatjuk a vlaszt sorozatosan mdostott SQL lekrdezsekkel. Ehelyett azonban clszerbb adatbnyszati mdszereket alkalmazni, mert ezek segtsgvel az eredmnyt automatikusan megkapjuk. Igen nagy szerepe van az adatbnyszatnak a marketingben. Kzhely, hogy a reklmkltsgek legalbb. 80 %-a kidobott pnz. De sajnos nem tudjuk, melyik az a 20 %, amit rdemes kiadnunk erre a clra. Egy luxus cikkeket forgalmaz cg nyilvnvalan nem fogja elkldeni a drga katalgust a laktelepi panel laksokba. Inkbb a jmd villanegyedek lakira fog koncentrlni. De egy diszkont ruhz lnc kzepes s jobb minsg termkeinl mr nem ilyen egyrtelm, hogy hov clszer a szranyagokat koncentrlni, honnan jnnek, vagy honnan jhetnek a legtbbet vsrl vevk. Adatbnyszati mdszerekkel erre vlaszt tudunk kapni. Tovbbi tipikus adatbnyszati krdsek: Melyek a legfontosabb gyfl tpusok? Melyek a legfontosabb gyflvsrlsi szoksok? Mirt maradnak vagy lpnek ki a dolgozk a vllalattl? Mikor s milyen ron rdemes egy j termket a piacra dobni? Jelents szakirodalma van s szmos adatbnyszati szoftver eszkz is tmogatja azokat a mdszereket, amelyek segtsgvel az ilyen s ezekhez hasonl, nehezen algoritmizlhat krdsekre vlaszolni tudunk. De ne felejtsk el, hogy a gyakorlati szakemberek szerint az adatbnyszatban a munka 80 szzalkt az adatok ellltsra fordtjuk s csak 20 szzalkt teszi ki a tnyleges elemzs. 9.6. Ellenrz krdsek 1. 2. 3. 4. 5. Mik a legfbb klnbsgek a tranzakci orientlt adatbzisok s az adattrhzak kztt? Mit tartalmaznak a metaadatok? Mirt trolnak az adattrhzban sszevont adatokat? Mirt nem okoz problmt az adattrhzakban s az adatpiacokon a nagyfok redundancia s a harmadik norml forma hinya? Az id mirt szerepel mindig az adattrhzak s adatpiacok dimenzii kztt?

9-11

10. IRODALOMJEGYZK
Knyvnket ltalnos sszefoglal tanknyvnek szntuk. Ezrt szndkosan nem adtunk meg konkrt irodalmi utalsokat egyes tmakrkre, rszterletekre. Ugyanakkor tisztban vagyunk vele, hogy egy knyv sem tartalmazhat mindent s olyan jl, ahogyan azt a szerzk meg szerettk volna rni, s amit az egyes olvask tudni kvnnak a klnbz tmkrl. Ezrt az albbiakban felsorolunk nhny olyan knyvet, melyek hasznos segtsget nyjthatnak az adatbzisokkal val munka mg rszletesebb, vagy ms szempontok szerint trtn megismersre. A relcis modellben, mint azt tbbszr is hangslyoztuk, a sorok sorrendjnek semmifle kitntetett szerepe nincsen. Ezt szem eltt tartva, a most kvetkez felsorolsi sorrend sem tkrz valamifle rtkelst. Csupn a szerzk neve szerint ORDERED BY relci. Access 2003 sg s tmutat http://office.microsoft.com/hu-hu/access/FX100646921038.aspx Adrians, P. Zantige, D.: Adatbnyszat, Budapest, 2002 Czenky Mrta: Adatmodellezs SQL s Access alkalmazs SQL Server s ADO, ComputerBooks, Budapest, 2005 Date, J. C.: An Introduction to Database Systems, Addison Wesley, 2004 Denne, N.: DB2, Thoeorie und Praxis, DGD, Wiesbaden, 2001 Dr. Szelezsn: Adatbzisok LSI, Budapest, 2000) Halassy B.: Az adatbzis-tervezs alapjai s titkai, IDG, Budapest, 1994 Halassy B.: Ember, Informci, rendszer, IDG, Budapest, 1996 Halassy, B.: Adatmodellezs, Nemzeti Tanknyvkiad, Budapest, 2002 Hoffer, J.A Prescott, M. B. McFadden, F. R.: Modern Database Management, Prentice Hall, New Jersey, 2002 Inmon, W.H, - Welch, J.D. Glassey, K.L.: Managing the Data Warehouse, John Wiley and Sons, 1997 Kovcs, Kovcsn, Ozsvth: Adatkezels az MS Access 7.0 hasznlatval , ComputerBooks, Budapest, 1997 Marakas, G.M.: Modern Data Warehousing and Mining, Prentice Hall, New Jersey, 2003 Meloni, J. C.: Tanuljuk meg a MySQL hasznlatt 24 ra alatt, Kiskapu, Budapest, 2003 MySQL Documnetation http://dev.mysql.com/doc/ Ptery Kristf: Microsoft Office Access 2003 Lekrdezstl testre szabsig (magyar vltozat), Mercator Stdi, Szentendre, 2005 Quittner P. Kotsis D,: Szmtstechnika rendszerszervezknek, Akadmiai Kiad, Budapest, 1989 Quittner P.: Adatbzis-kezels a gyakorlatban, Akadmiai Kiad, Budapest, 1993 Quittner P.: ORACLE, www.uni-corvinus.hu/~qp/Oracle/ORACLE_osszefoglalo.html Quittner P: ORACLE gyakorlat, www.uni-corvinus.hu/~qp/Oracle/Gyakorlat/Oracle_gyakorlat.ppt Quittner, P.: A Practical Approach to Database Systems, Akadmiai Kiad, Budapest, 1994 Ullman, J. - Widom, J.: A First Course in Database systems, Prentice Hall, New Jersey, 2002 Ullman, Widom: Adatbzisrendszerek, Panem, Budapest, 1998) Watson, R.T.: Data Management, Databases and Organizations, John Wiley and Sons, 1999 Zandstra, M.: Tanuljuk meg a PHP5 hasznlatt 24 ra alatt, Kiskapu, Budapest, 2005

10-1

11. TRGYMUTAT
aritmetikai opertor, 5-7, 6-9, 6-11 asc, 5-57 tlag, 5-23, 6-12, 6-50 tnevezs, 4-14 attribtum, 3-1, 3-4 auto_increment, 6-52 AutoJelents, 6-40 Autorlap, 6-35 avg(), 5-23, 6-12, 6-24, 6-50 azonost, 3-5, 4-3, 5-4

$
$_REQUEST, 6-49

A,
ACCESS, 6-1 adat, 1-1 adat tbbszrzs, 1-25 adattvitel, 9-3 adatbnyszat, 9-1, 9-11 adatbzis, 1-18 adatbzis-felgyel, 1-17 adatbzis-kezel rendszer, 1-18 adatbevitel, 2-10, 2-15, 4-11, 6-17 adatelrs, 2-7 adat-felgyel, 1-17 adatfggetlensg, 1-7 adatkezel nyelv, 1-14 adatkezel utasts, 5-50, 6-17 adatlap nzet, 6-17 adatlap rlap, 6-35 adatler nyelv, 1-13 adatler utasts, 5-30 adatmodell, 3-1 adatmdosts, 6-18 adatpiac, 9-2 adatszerkezet, 9-4 adatszervezs, 2-1 index, 2-11, 2-23 kzvetlen elrs, 2-11 lineris, 2-8 soros, 2-8, 2-22 szekvencilis, 2-8, 2-22 adatsztr, 1-15, 7-1 adattrhz, 9-1 adattrhz architektra, 9-3 adattrols, 2-1 adattpus, 4-2, 5-18, 6-5, 6-50 adattmrts, 2-27 adatvdelem, 6-45 add_month(), 5-27, 6-12, 6-51 alaprtelmezett rtk, 4-2, 5-32, 6-7 alkalmazsi program, 1-3 all, 5-8 all jogosultsg, 7-5 lland, 5-6, 6-8 ltalnos rendszer jogosultsgok katalgusa, 7-5 alter, 5-42, 6-52 alter jogosultsg, 7-5 alter sequence, 5-30 alter table, 5-30, 5-42, 6-8, 6-34 alter trigger, 5-30 alter view, 6-52 alternatv kulcs, 4-7 alternative key, 4-7 and, 6-20 anomlia, 4-32, 9-2 any, 5-8 architektra, 1-6 argumentum, 5-7

B
B+ fa, 2-13 bjt, 6-6 begyazott szelekt, 5-59, 5-68, 6-31, 6-33 bersi anomlia, 4-32 bels join, 4-17, 5-55, 6-22 bels szint, 1-12 between, 5-8, 6-20 bevitel, 5-68 beviteli maszk, 6-7 bitmap index, 2-16 bit-trkpes index, 2-16 biztonsg, 6-45 boolean, 6-5 Boyce-Codd norml forma, 4-40 bvts, 4-23

C
candidate key, 4-7 cbyte(), 6-13 cdate(), 6-13 cdbl(), 6-13 cdec(), 6-13 char, 5-19, 6-50 char_length(), 6-50 ciklus, 6-48 cm, 6-7 cmke varzsl, 6-41 cint(), 6-13 close, 5-81, 5-84 coalesce(), 5-27, 6-51 commit, 5-71, 6-18 concat(), 5-25, 6-12, 6-50 constraint, 5-32, 6-7, 6-8 count(), 5-23, 6-12, 6-24, 6-50 create, 4-24, 5-30, 6-52, 9-5 create index, 5-30, 5-39 create sequence, 5-30 create synonim, 5-30 create table, 5-30, 6-3, 6-34 create trigger, 5-30 create view, 5-30, 5-36, 6-20, 6-52 curdate(), 6-51 current date(), 5-27, 6-13, 6-51 current timestamp(), 5-27, 6-13, 6-51 curtime(), 6-51

11-1

Cs
csak berhat, 9-5 csatols, 6-14, 6-46 csatolt rlap, 6-36 csere(), 6-12 csillag elrendezs, 9-8 csillag szerkezet, 9-4 csoport fggvny, 5-23, 6-12, 6-50 csoportfej, 6-41 csoportkpzs, 4-23 csoportlb, 6-41 csoportosts, 6-24 csoportostsi bellts, 6-42 cstr(), 6-13 cscsrtk, 6-23

drop table, 5-30, 6-8, 6-34 drop trigger, 5-30 drop view, 5-30 dupla, 6-6 dupliklt index, 6-14

E,
egsz, 6-6 egy felhasznls rendszer, 1-20 egyb fggvny, 5-27, 6-51 egyed, 5-14 egyedi index, 6-14, 6-52 egyedtpus, 3-1, 3-4 egy-egy kapcsolat, 6-16 egyests, 4-17 egyest lekrdezs, 6-33 egyszeres, 6-6 egy-tbb kapcsolat, 4-9, 6-16 egytt tarts, 6-44 elgazs, 6-48 elemi tnyadat, 1-2 elrsi md, 1-12 elhelyezsi kulcs, 2-7, 4-12 els norml forma, 4-28 elsdleges kulcs, 2-7, 3-5, 4-3, 4-7, 6-4, 6-10, 9-8 elveszett mdosts, 8-2 end-exec, 5-76 entits, 3-1, 3-4 eredmnyazonost, 6-52 rvnyestsi szveg, 6-7 rvnyessgi szably, 6-7 s, 6-20 exec sql, 5-76 expression, 6-24 exsists, 5-8 extend, 4-23

D
darab, 5-23, 6-12, 6-50 Data Control Language, 1-14, 5-47, 5-71 Data Definition Language, 1-13, 5-30 Data Dictionary, 7-1 Data Manipulation Language, 1-14, 5-50 Data Mart, 9-2 Data Mining, 9-1, 9-11 Data Warehouse, 9-1 date, 6-5, 6-50 date(), 5-27, 6-10, 6-13 date/time, 5-21 date_add(), 6-51 date_format(), 6-51 dateadd(), 6-12 datetime, 6-50 dtum, 6-5 dtum fggvny, 6-12, 6-51 dtum/idpont, 5-21 dtum/idpont fggvny, 5-26 day(), 5-27, 6-13, 6-51 DCL, 1-14, 5-47, 5-71 DDL, 1-13, 5-30 dec, 6-50 decimal, 6-50 decimal(), 5-27, 6-13, 6-51 decimlis, 6-6 declare, 5-81 default, 4-2, 5-32, 6-7 dekomponls, 4-33, 4-38 dekompozci, 4-33, 4-38 delete, 5-64, 6-18, 6-32, 6-34, 6-52, 9-5 delete jogosultsg, 7-5 desc, 5-57 Descartes szorzat. Lsd keresztszorzat determinns, 4-27 diagram varzsl, 6-41 die(), 6-49, 6-51 difference, 4-22 dimenzi, 9-4, 9-8 dinamikus utasts, 5-74 distinct, 5-24, 5-53, 6-32 DML, 1-14, 5-50 domain, 4-2 double precision, 6-50 drop, 5-41, 6-52 drop index, 5-30 drop sequence, 5-30 drop synonim, 5-30

F
Fact table, 9-8 felhasznl, 1-4 felhasznli interfsz, 1-15 felhasznli szint vdelem, 6-45 felirat, 6-38 feljegyzs, 6-5 felttel, 5-7, 5-32, 6-7, 6-8, 6-46 fenntartott szavak, 5-4 fetch, 5-81, 5-83 first(), 6-24 fizikai szint, 1-12, 2-1 float, 6-50 for update, 5-57 Foreign Key, 4-8, 9-8 format(), 6-51 formtum, 6-6, 6-18 formzs, 6-18 frisst lekrdezs, 6-30 from, 5-54 front-end, back-end, 6-46 full join, 5-55 funkcionlis fggs, 4-26 funkcionlis teljes fggs, 4-28 futtats, 6-22 fggsg, 4-26 fggsgi diagram, 4-27 fggsgi kapcsolat, 4-8

11-2

fggsgi katalgus, 7-6 fggvny, 5-23, 6-8, 6-12

is null, 5-8 ismtls, 6-48

G
globlis tmb, 6-49 grafikus interfsz, 1-15, 6-1 grant, 5-30, 5-47, 6-52 group by, 4-23, 5-56, 6-24

J
jelents, 6-40 jelents gyorsvarzsl, 6-40 jelents tervezse, 6-41 jelents varzsl, 6-40 jelentsfej, 6-41 jelentslb, 6-41 jelllapka, 6-5, 6-39 jelsz, 6-45 jogosultsg, 5-47 jogosultsg kezelse, 5-47 join, 4-17, 4-20, 5-55, 6-22, 6-27 join-index, 2-18 joker karakter, 5-10, 6-11, 6-50

H
halmaz opertor, 5-12 hls adatmodell, 3-2 hardver, 1-2 harmadik norml forma, 4-35 hashing, 2-19, 2-23 hatrol jel, 5-13 having, 5-56 helyettest karakter. Lsd joker karakter hierarchikus adatmodell, 3-2 hiperhivatkozs, 6-5 hivatkozsi felttel, 4-8 hivatkozsi integrits, 6-16 hivatkoz relci, 4-8 hivatkozott relci, 4-8 hpehely modell, 9-10 horizontlis adatmegoszts, 1-25 host vltoz, 5-73, 5-79, 6-49 hossz adat, 5-22 hossz egsz, 6-6 hozzfrsi id, 2-5 hozzfrsi jogok katalgusa, 7-5 hozzfz lekrdezs, 6-31 HTML, 6-47

K
kapcsolat, 3-1, 3-5, 4-8, 6-15 kapcsolat trlse, 6-16 kapcsolatazonost, 6-49 kapcsolatok szerkesztse, 6-16 karakter, 5-19 karakter fggvny, 5-25, 6-12, 6-50 kardinalits, 4-2 kaszkd, 4-12, 6-16, 6-18, 6-32 kaszkd trls, 4-12 katalgus, 1-15, 7-1 kerek(), 6-12, 6-51 kerekts, 6-12, 6-51 keres, 5-25 keress varzsl, 6-5 keressi kulcs, 2-7, 4-13 keresztszorzat, 4-16 kereszttbla, 6-29 kereszttbls lekrdezs, 6-29 kifejezs, 5-17, 6-23, 6-30 kifejezs-szerkeszt, 6-8, 6-19, 6-23 kijells, 4-24 kivlaszts, 5-51 kizrlagos md, 6-46 kizrlagos zr, 8-5 kliens-szerver architektra, 1-21 kdtblzat, 2-27 kombinlt adatmegoszts, 1-26 koncepcionlis szint, 1-12 konvertl fggvny, 5-26, 6-13, 6-51 korltozs, 4-15 korltozott trls, 4-11 kzvetlen elrs, 2-11 kulcs, 2-7, 4-6 alternatv kulcs, 4-7 elhelyezsi kulcs, 4-12 elsdleges kulcs, 3-5, 4-3, 4-7, 6-4, 9-8 idegen kulcs, 4-8, 6-15, 6-46, 9-8 keressi kulcs, 4-13 srsdsi kulcs, 4-12 kurzor, 5-74, 5-81, 6-52 klnbsg, 4-22 kls adatok tvtele, 6-13 kls join, 4-20, 5-55, 6-27 kls szint, 1-12

I,
idegen kulcs, 4-8, 6-15, 6-46, 9-8 id, 6-5 id fggvny, 6-12, 6-51 idblyeg, 9-5 ifnull(), 6-51 igen/nem, 6-5 illesztsi tulajdonsgok, 6-27 importls, 6-13, 6-46 in, 5-8 index, 2-11, 2-23, 6-8, 6-14, 6-52 index jogosultsg, 7-5 index katalgus, 7-4 index ltrehozsa, 5-39 indexkomponenes katalgus, 7-4 indiktor, 5-80 informci, 1-1 informcis rendszer, 1-1 initcap(), 5-25, 6-12, 6-50 inkonzisztens adat, 8-3 inner join, 4-17, 5-55 insert, 5-68, 6-17, 6-31, 6-34, 6-52 insert jogosultsg, 7-5 insert only table, 9-5 int, 6-50 integer, 6-5, 6-50 integrits, 4-6 intersect, 4-22, 5-12, 5-56, 6-33 irnytott szrs, 6-19

11-3

L
lapszint zrols, 6-46 last(), 6-24 last_day(), 5-27, 6-12, 6-51 lcase(), 6-12, 6-50 left join, 5-55 lehetsges kulcs, 4-7 lekrdezs, 4-6, 6-20 begyazott szelekt, 6-33 egyest lekrdezs, 6-33 frisst lekrdezs, 6-30 hozzfz lekrdezs, 6-31 kereszttbls lekrdezs, 6-29 sszest lekrdezs, 6-24 paramteres lekrdezs, 6-25 tblakszt lekrdezs, 6-29 trl lekrdezs, 6-32 vlaszt lekrdezs, 6-21 lekrdezs tervez, 6-21 lemez felptse, 2-3 len(), 6-12 length(), 5-25, 6-12, 6-50 levds, 6-49 like, 5-8, 6-11, 6-50 lineris adatszervezs, 2-8 literl. Lsd lland logikai munkaegysg, 5-72 logikai opertor, 5-11, 6-9, 6-11 logikai szint, 1-12 long, 6-5 longtext, 6-50 lower(), 5-25, 6-12, 6-50 ltrim(), 5-25, 6-12 LTrim(), 6-51

mysql_query(), 6-49, 6-52 mysql_real_escape_string(), 6-49, 6-51 mysql_select_db(), 6-49, 6-51

N
natural join, 4-17, 5-55 negyedik norml forma, 4-42 nem vglegestett adat, 8-3 nem vgrehajthat utasts, 5-74 nzet, 4-6, 4-39, 5-15, 6-20, 6-52 nzet ltrehozsa, 5-36 normalizci, 4-25 normalizls, 4-25, 4-28, 4-31, 4-35, 4-40, 4-42, 9-2 NULL rtk, 4-2, 5-16, 6-7 NULL rtkre llts, 4-11 number, 6-5 numerikus adattpus, 5-20 numerikus fggvny, 5-25 nvl(), 5-27, 6-51

Ny
nyomtatsi kp, 6-41

O,
objektum, 5-13, 6-2 objektum ltrehozsa, 5-30 objektum megszntetse, 5-41 objektum mdostsa, 5-42 objektum trlse, 6-8 objektumokra val jogosultsgok katalgusa, 7-5 oldalbellts, 6-41 oldalfej, 6-38, 6-41 oldallb, 6-38, 6-41 oldaltrs, 6-44 OLE objektum, 6-5 open, 5-81, 5-82 opercis rendszer, 1-2 operandus, 5-7 opertor, 5-7, 5-8, 5-11, 5-12, 6-8, 6-11, 6-50 optimlis elrsi t, 2-25 optimista zrols, 6-46 or, 6-20 order by, 5-56, 6-19 oszlop, 5-14 oszlop fggvny, 5-24 oszlop katalgus, 7-3 oszlopdiagram, 6-44 oszlopfejlc, 6-29 oszlopos rlap, 6-35 osztott adatbzis, 1-22, 7-7 osztott zr, 8-5 outer join, 4-20, 5-55

M
magasabb norml formk, 4-40 msodik norml forma, 4-31 maszk karakter. Lsd joker karakter materializlt nzet, 4-6 materialized view, 4-6, 5-15 max(), 5-23, 6-12, 6-24, 6-50 maximum, 5-23, 6-12, 6-50 megjelents, 6-21 ments, 6-8 metaadat, 1-15, 9-3 metszet, 4-22, 6-33 mez, 1-2, 2-7, 6-21 mez tnevezse, 6-3 mezmret, 6-5 Microsoft Word, 6-41 mid(), 6-12, 6-51 min(), 5-23, 6-12, 6-24, 6-50 minimum, 5-23, 6-12, 6-50 minus, 5-12, 5-56 mdosts, 2-10, 4-12, 5-65, 6-18 mdostsi anomlia, 4-32 mdostsi zr, 8-5 month(), 5-27, 6-13, 6-51 munkacsoport informcis fjl, 6-46 mysql_close(), 6-49, 6-51 mysql_connect(), 6-49, 6-51 mysql_error(), 6-49, 6-51 mysql_fetch_row(), 6-52, 6-53 mysql_num_rows(), 6-52

,
sszeg, 5-23, 6-12, 6-50 sszehasonlt opertor, 5-8, 6-9, 6-11 sszekapcsols, 4-17 sszests, 6-24 sszestsi bellts, 6-42 sszest lekrdezs, 6-24 sszetett index, 2-25, 6-15 sszetett rlap, 6-35

11-4

P
paramter, 6-25 paramteres lekrdezs, 6-25 prhuzamos feldolgozs, 8-2 patthelyzet, 8-8 pnznem, 6-5 pesszimista zrols, 6-47 PHP, 6-47 PHP-MySQL, 6-47 pillanatfelvtel, 4-6 pointer, 2-9 precedencia, 6-11 prekompiler, 5-75 Primary Key. Lsd elsdleges kulcs print(), 6-48 programba gyazs, 5-73, 6-47 programba bepthet rendszer, 1-3 programok hasznlati joga katalgus, 7-6 programozsi nyelvhez illeszts, 1-14 project, 4-15 projekci, 4-15 pszeudooszlop, 5-22 public, 7-5

sorazonost, 5-22 sorfejlc, 6-29 soros adatszervezs, 2-8, 2-22 sorszm genertor, 5-15 SQL, 6-32 SQL elfeldolgoz, 5-75 SQL kifejezs, 5-17 SQL kommunikcis terlet, 5-73 SQL optimalizl, 2-25, 7-1, 7-8 SQL utasts, 5-29 sql_query(), 6-52 sqlcode, 5-76 sqlstate, 5-76 Star schema, 9-8 statikus utasts, 5-74 statisztika, 7-8 str_to_date(), 6-51 strconv(), 6-12 stripslashes(), 6-52, 6-53 substr(), 5-25, 6-12, 6-51 sum(), 5-23, 6-12, 6-24, 6-50 summarize, 4-23 srsds, 2-21 srsdsi kulcs, 4-12 sysdate(), 5-27, 6-13, 6-51

R
real, 6-50 references jogosultsg, 7-5 rekord, 1-2, 2-7 rekordazonost, 2-4 rekordszint zrols, 6-46 relci, 4-1 relci foka, 4-1 relci fokszma, 4-1 relcis adatmodell, 3-3 relcis mvelet, 4-13 rename, 4-14 rendezs, 2-28, 6-18 rendezs s csoportosts, 6-44 rendszergazda engedly, 6-46 replace(), 5-25, 6-12, 6-51 restrict, 4-15 restrikci, 4-15 revoke, 5-30, 5-47, 6-52 right join, 5-55 rollback, 5-71, 6-18 round(), 5-27, 6-12, 6-51 rowid, 2-4, 5-22 rtrim(), 5-25, 6-12 RTrim(), 6-51

Sz
szm, 6-5 szmll, 6-5 szmossg. Lsd kardinalits szrmaztatott adat, 1-2 szekvencilis adatszervezs, 2-8, 2-22 szelektlista, 5-54 szervezsi md, 1-12 szinkronizls, 6-46 szinonima, 2-20 szinonima sztr, 7-4 szinonima tblzat, 7-7 szintaxis, 5-2 szoftver, 1-2 szolgltat program, 1-16 szveg, 6-5 szveges informci-visszakeres rendszer, 1-6 szveghossz, 5-25 szvegsszefzs, 5-25, 6-11, 6-12, 6-50 szrs, 6-18 szrs kijellssel, 6-19 szrs kizrssal, 6-19 szrs rlappal, 6-19

S
savepoint, 5-72 schema, 5-13, 5-14 segdrlap, 6-36 select, 5-51, 6-20, 6-52 select jogosultsg, 7-5 sma, 5-13, 5-14 sequence, 5-15 smallint, 6-50 snapshot, 4-6 Snowflake, 9-10 some, 5-8 sor, 5-14

T
tbla, 6-21 tbla megjelentse, 6-15 tbla mdostsa, 5-42 tbla varzsl, 6-3 tblafelttel, 6-10 tblakszt lekrdezs, 6-29 tblzat, 4-5, 5-14, 6-3 tblzat katalgus, 7-3 tblzat ltrehozsa, 5-30, 6-3 tblzat mdostsa, 6-8 tblzat trlse, 6-8 table, 4-5, 5-14 trolsi md, 1-12 trolt nzet, 5-15

11-5

tny adatbzis, 1-6 tnytblzat, 9-8 termszetes join, 4-17, 5-55, 6-22 time(), 6-13 times, 4-16 timestamp, 6-50, 9-5 tizedeshelyek, 6-6 to_char(), 5-27, 6-13, 6-51 to_date(), 5-27, 6-13, 6-51 to_number(), 5-27, 6-13, 6-51 tovagyrz trls. Lsd kaszkd tbb felhasznl, 6-46 tbbrtk funkcionlis fggsg, 4-28 trls, 2-10, 4-11, 4-12, 5-64, 6-8, 6-18 trlsi anomlia, 4-32 trl lekrdezs, 6-32 translate(), 5-25, 6-12, 6-51 tranzakci, 5-72, 8-1 tranzakcis adatbzis, 9-2 tranzakcivezrl utasts, 5-71 trigger, 5-15, 6-52 trunc(), 5-27, 6-13, 6-51 truncate(), 6-51 tulajdonsg, 3-1, 3-4, 5-14 tulajdonsgok, 6-39

felirat, 6-38 rlap gyorsvarzsl, 6-35 rlap tervezse, 6-38 rlap varzsl, 6-36 rlapfej, 6-38 rlaplb, 6-38

V
vagy, 6-20 vlaszt lekrdezs, 6-20, 6-21 vltoz, 6-48 vltoz hosszsg mez, 2-27 vltoztatsi anomlia, 4-32 value(), 5-27, 6-51 values, 5-68 varchar, 5-19, 6-5, 6-50 varchar(), 5-27, 6-13, 6-51 varchar2, 5-19 vertiklis adatmegoszts, 1-26 vetlet, 4-15 vezrlsellenrz nyelv, 1-14, 5-47, 5-71 view, 4-6, 4-39, 5-15, 6-20, 6-52

W
whenever, 5-76 where, 5-55, 5-64, 5-66, 6-19, 6-25

U,
ucase(), 6-12, 6-50 j adatbzis, 6-2 uni, 4-21, 6-33 union, 4-21, 5-12, 5-56, 6-33 union all, 5-56 unique, 6-52 update, 5-65, 6-18, 6-31, 6-34, 6-52, 9-5 update jogosultsg, 7-5 upper(), 5-25, 6-12, 6-50 user(), 5-27, 6-51

Y
year(), 5-27, 6-10, 6-13, 6-51

Z
zr, 6-46, 8-4 zr erssge, 8-5 zr idtartama, 8-6 zr mrete, 8-4

,
rlap, 6-34

11-6

You might also like