Vous êtes sur la page 1sur 94

ADATBZISOK

Eladsi jegyzet (BSc)

Ksztette: dr. Katona Endre

Szegedi Tudomnyegyetem Informatikai Tanszkcsoport 2010.

Ez a jegyzet az adatbzis-tanknyvek szoksos felptst kveti: Az 1.-5. fejezetek az adatbzis-tervezs krdskrt trgyaljk (egyedkapcsolat modell, relcis modell, normalizls). A 6.-9. fejezetek az SQL nyelvet s annak alkalmazsait tekintik t. - A 10.-12. fejezetek konkrt adatbzis-kezel rendszerekrl szlnak. A mintapldk tbla-, mez- s vltoznevei a knnyebb olvashatsg rdekben kezetes betkkel szerepelnek, konkrt programozsi krnyezetben azonban ez esetleg nem megengedett vagy zavarokat okozhat, teht kerlend. Az apr bets szvegrszek kevsb fontos (de nem flsleges) rszleteket tartalmaznak.

A jegyzetben tallt esetleges hibkat krem jelezzk a katona@inf.uszeged.hu cmre.

Tartalom
Tartalom .................................................................................................................................................. 3 1. Bevezets............................................................................................................................................. 5 1.1. Adatmodellek ttekintse.............................................................................................................. 7 2. Egyed-kapcsolat modell ...................................................................................................................... 8 2.1. Kapcsolatok tpusai..................................................................................................................... 10 2.2. sszetett s tbbrtk attribtumok.......................................................................................... 12 2.3. Gyenge entitsok ........................................................................................................................ 12 2.4. Specializl kapcsolatok............................................................................................................. 13 3. A relcis adatmodell........................................................................................................................ 15 3.1. A relcis adatmodell fogalma ................................................................................................... 15 3.2. Kulcsok ....................................................................................................................................... 17 3.3. Indexek ....................................................................................................................................... 18 3.4. E-K diagrambl relcis adatbzissma ksztse...................................................................... 20 4. Relcis algebra ................................................................................................................................ 27 4.1. Halmazmveletek ....................................................................................................................... 27 4.2. Redukcis mveletek.................................................................................................................. 28 4.3. Kombincis mveletek ............................................................................................................. 29 4.4. Multihalmazok............................................................................................................................ 31 5. A relcis adatbzis normalizlsa.................................................................................................... 32 5.1. Redundns adattblk ................................................................................................................. 32 5.2. Funkcionlis fggsg ................................................................................................................ 33 5.3. Felbonts (dekompozci) .......................................................................................................... 36 5.4. Normlformk............................................................................................................................. 38 6. Az SQL nyelv.................................................................................................................................... 46 6.1. ltalnos jellemzs ..................................................................................................................... 46 6.2. Relcismk definilsa (DDL)................................................................................................ 48 6.3. Indexek ltrehozsa .................................................................................................................... 50 6.4. Adattbla aktualizlsa (DML)................................................................................................... 51 6.5. Lekrdezs (DML)...................................................................................................................... 52 6.6. Alkrdsek .................................................................................................................................. 57 6.7. Virtulis tblk (nzettblk)...................................................................................................... 58 7. Aktv elemek (megszortsok, triggerek) .......................................................................................... 61 7.1. Attribtumok megszortsai........................................................................................................ 61 7.2. Tblra vonatkoz megszortsok .............................................................................................. 62 7.3. ltalnos megszortsok ............................................................................................................. 62 7.4. Megszortsok kezelse .............................................................................................................. 63 7.5. Triggerek .................................................................................................................................... 63 8. Begyazott SQL ................................................................................................................................ 65 8.1. SQL begyazs ANSI C-be ........................................................................................................ 65 8.2. ODBC ......................................................................................................................................... 70 8.3. JDBC .......................................................................................................................................... 73 8.4. PHP............................................................................................................................................. 74 9. Adatbiztonsgi mechanizmusok........................................................................................................ 76 9.1. Tranzakcis feldolgozs ............................................................................................................. 76 9.2. Prhuzamos hozzfrsek ........................................................................................................... 77 9.3. Jogosultsgok.............................................................................................................................. 80 10. Az Access adatbzis-kezel rendszer.............................................................................................. 81 10.1. ltalnos jellemzs ................................................................................................................... 81 10.2. Relcismk ltrehozsa, mdostsa ..................................................................................... 83 10.3. Kapcsolatok (kls kulcsok) kezelse ...................................................................................... 84 10.4. Indexels ................................................................................................................................... 84

10.5. Adatok aktualizlsa ................................................................................................................. 85 10.6. rlap ltrehozsa ...................................................................................................................... 85 10.7. Adatelrsi lapok ...................................................................................................................... 85 10.8. Lekrdezsek ............................................................................................................................ 86 11. A MySQL adatbzis-szerver ........................................................................................................... 88 12. Xbase tpus rendszerek.................................................................................................................. 90 12.1. A parancsnyelv alapjai.............................................................................................................. 90 12.2. Relcismk s adattblk ltrehozsa, kezelse.................................................................... 91 12.3. Szrk alkalmazsa .................................................................................................................. 91 12.4. Kapcsolat kt tbla kztt......................................................................................................... 92 12.5. Algoritmikus eszkzk ............................................................................................................. 93 Irodalom ................................................................................................................................................ 94

1. Bevezets
Az els szmtgpeket matematikai feladatok megoldsra ksztettk, de mr az 1960-as vek elejtl a szmtgpes alkalmazsok nagyobbik rszt az adatfeldolgozs tette ki. Kezdetben egyedi programok kszltek az egyes vllalatoknl a munkagyi, termelsi, stb. adatok nyilvntartsra. A tmeges alkalmazsi igny azonban kiknyszertette az adatformtumok szabvnyostst, s ltalnos cl adatbzis-kezel szoftverek kifejlesztst.
Adatok gpi kezelsre tbbfle eszkz is alkalmas lehet: 1. Szvegszerkeszt program. Tegyk fel pldul, hogy egy vllalat dolgozinak nletrajzt troljuk egy szvegfjlon. Ebben a fjlban r lehet keresni adott nvre, lakcmre, lehet csoportostani vllalati osztlyok szerint (vzlatszint). Ugyanakkor problma lekrni pldul azon dolgozk listjt, akik 1960 s 1970 kztt szlettek. 2. Hypertext (web). A hivatkozsok (linkek) segtsgvel fjlon bell s fjlok kztt is komplex kapcsolatok alakthatk ki (lsd mg a HTML s XML egyb lehetsgeit). 3. Tblzatkezel program. Itt a fontosabb letrajzi adatok (nv, lakcm, szletsi dtum, iskolai vgzettsg) mr elklntve trolhatk, s szmos lekrdezsi lehetsg van. Viszont sokfle adat kztti bonyolult kapcsolatrendszert, nagy adathalmazok hatkony s biztonsgos kezelst nem tmogatjk a tblzatkezelk. 4. Adatbzis-kezel rendszer. A nyilvntarts valamilyen adatmodellre pl, amely komplex kapcsolatrendszer kzbentartst is lehetv teszi. Az adatbzis-kezel rendszerek kimondottan nagy adatmennyisg hatkony s biztonsgos kezelst tmogatjk.

Adatok tpusai: a) Egyszer (atomi) adat: szm, string, dtum, logikai rtk. b) sszetett adat: egyszer adatokbl kpezhet. Vltozatai: halmaz: egynem elemek halmaza. Plda: egy vllalat osztlyai. lista: egynem elemek rendezett sorozata. Plda: knyv szerzi. struktra: klnfle elemek rendezett sorozata. Plda: lakcm = (helysg, utca, hzszm). a fentiek kombincii. c) NULL: definilatlan adat. Adatbzis (= DB = database): adott formtum s rendszer szerint trolt adatok egyttese. Adatbzis-kezel rendszer (= DBMS = Database Management System): az adatbzist kezel szoftver. Rekord (= feljegyzs): az adatbzis alapvet adategysge. ltalban struktra felpts. A DBMS f feladatai: - adatstruktra (adatbzissma) definilsa, - adatok aktualizlsa (j felvtel, trls, mdosts), - lekrdezsi lehetsgek, - fejleszt krnyezet biztostsa clalkalmazsok ltrehozshoz. Nhny ismertebb DBMS: xBase rendszerek (dBase, FoxPro, Clipper): elavult, de mg sok alkalmazs mkdik. Access (Microsoft): knnyen kezelhet grafikus fellet, kisebb alkalmazsokhoz. MySQL: nylt forrskd adatbzis-szerver, kzepes mret (pl. webes) alkalmazsokhoz.

Oracle: nagy teljestmny rendszer, nagy adatbzisok, sok felhasznl, klnleges biztonsgi kvetelmnyek esetn ajnlott. Egy adatbzis-alkalmazsnl az albbi szinteket klnbztethetjk meg: Felhasznli fellet Clalkalmazsknt ksztett program Adatmodell (logikai adatstuktra) DBMS Fizikai adatstruktra

1.1. Adatmodellek ttekintse


Adatbzissma: az adatbzis struktrjnak lersa. Erre klnfle adatmodellek hasznlatosak. Hierarchikus modell: a rekordok fastruktra-szer hierarchiba rendezettek (pldul vllalat, fosztlyok, osztlyok, dolgozk). A feldolgozs fabejr s egyb fastruktra kezel algoritmusok segtsgvel trtnik. A hierarchikus modellnek ma mr csak trtneti jelentsge van. Hls modell (1961): a rekordok pointerekkel kapcsoldnak egymshoz. A pointerek ciklikusan krbefutnak egy sszetartoz rekordcsoporton, egy ilyen csoportot setnek neveznek. Egy set mindig egy "szl" s tbb "gyermek" rekordot tartalmaz (pldul set lehet egy vllalati osztly s a dolgozi, lsd 1. bra.) A hls modell ma mr szintn csak trtneti jelentsggel br.

1. bra. Vllalati osztlyok s dolgozk nyilvntartsa hls modellben (V: vllalat, O: osztly, D: dolgoz) Relcis modell (1970): az adatok ktdimenzis tblkban troldnak, a rekordok kztti kapcsolatot pointerek helyett szintn tblzatok valstjk meg. A relcis modellre pl adatbziskezelket RDBMS-nek (Relational DBMS) nevezzk. Szabvnyos ler/lekrdez nyelvk az SQL. A relcis modell jelenleg a legszlesebb krben hasznlatos. Objektumorientlt modell (1990-es vek). Az objektumorientlt programozsi nyelvek (C++, Smalltalk) eszkzrendszervel definilja az adatbzis struktrjt. Ler nyelve az ODL, lekrdez nyelve az OQL. Az objektumorientlt modellre pl adatbzis-kezel rendszereket OODBMS-nek nevezzk (Object Oriented DBMS). Ezek fejleszt nyelve ltalban C++ vagy Smalltalk. Az OODBMS rendszerek a gyakorlatban nem terjedtek el. Objektum-relcis modell: a relcis modell bvtse objektumorientlt lehetsgekkel, az erre pl rendszereket ORDBMS-nek nevezzk (Object Relational DBMS). Ezek szles krben hasznlatosak.

2. Egyed-kapcsolat modell
Grafikus ler eszkz, diagram segtsgvel szemlletesen adja meg az adatbzis struktrjt. Az adatbzis implementlshoz a diagramot transzformlni kell valamilyen adatmodellre, ill. annak megfelel nyelvi lersra (pl. SQL). 1. Plda. Tegyk fel, hogy egy knyvtr klcsnzsi nyilvntartst szeretnnk adatbzissal megoldani. Ehhez nyilvntartst kell vezetni - a knyvekrl, - az olvaskrl, - a kiklcsnzsi s visszahozsi idpontokrl. A modell megalkotshoz nhny alapfogalmat meg kell ismernnk. Egyednek vagy entitsnak neveznk egy, a vals vilgban ltez dolgot, amit tulajdonsgokkal akarunk lerni. Esetnkben egyed lehet egy knyv a knyvtrban, illetve egy adott olvas. ltalnostott fogalmakat hasznlva beszlhetnk "knyv" egyedrl s "olvas" egyedrl is. Tulajdonsgnak vagy attribtumnak nevezzk az egyed egy jellemzjt. Pldul a knyv, mint egyed legfontosabb tulajdonsgai a cime, s a szerz neve. Az attribtumokat gy clszer megvlasztani, hogy azok egyrtelmen meghatrozzk az egyedet. Mivel adott szerz adott cm knyve tbb kiadsban is megjelenhet, st adott kiadsbl is tbb pldny lehet a knyvtrban, gy minden knyvhz egy egyedi azonostt, knyvszmot (knyvtri szmot) clszer felvenni. Ekkor a "knyv" egyed tulajdonsgai: knyvszm, szerz, cm. (Tovbbi tulajdonsgoktl, mint kiad, kiadsi v, stb. esetnkben eltekintnk.) Hasonl meggondolsok alapjn az "olvas" egyedhez olvasszm, nv, lakcm tulajdonsgokat rendelhetnk. Egy egyed attribtumainak azt a minimlis rszhalmazt, amely egyrtelmen meghatrozza az egyedet, kulcsnak nevezzk s alhzssal jelljk. Esetnkben a knyv egyed kulcsa a knyvszm, az olvas egyed az olvasszm. Knyvtri nyilvntartsunk azonban ezzel mg nincs ksz. A "knyv" s "olvas" egyedek kztt ugyanis egy sajtos kapcsolat lphet fel, amelyet klcsnzsnek neveznk. Ezen kapcsolathoz a kivtel s visszahozs idpontjt rendelhetjk tulajdonsgknt. A vals vilg jelensgeit egyedekkel, tulajdonsgokkal s kapcsolatokkal ler modellt egyed-kapcsolat modellnek, az ezt brzol diagramot egyed-kapcsolat diagramnak nevezik. (Rvidtve az E-K modell s E-K diagram, illetve az angol entity-relationship model elnevezs alapjn az E-R modell s az E-R diagram elnevezsek hasznlatosak.) Megjegyezzk, hogy hasonl modellezsi technikt hasznl az SSADM rendszerszervezsi mdszertan is. Az egyed-kapcsolat diagramoknak sajtos jellsrendszerk van: - az egyedeket tglalappal, - az attribtumokat ellipszissel, - a kapcsolatokat rombusszal

szoktk jellni. A 2. bra a fentiekben trgyalt knyvtri nyilvntarts E-K diagramjt brzolja. A tervezs kezdeti szakaszban, illetve bonyolult E-K diagramok esetn az attribtumok brzolst el szoktk hagyni. Az eddig lertaknl kiss pontatlanul fogalmaztunk, ugyanis meg kell klnbztetni egyedpldnyt s egyedtpust. Pldnkban az elbbi egy adott knyvet, az utbbi a knyv fogalmat jelenti. Egy vals adatbzisban minden egyedtpusnak egy konkrt egyedhalmaz (egyedpldnyok halmaza) felel meg. A kiss nehzkes terminolgia elkerlsre az egyedpldny, egyedtpus s egyedhalmaz helyett egyszeren egyedet mondunk, ha ez nem rtelemzavar. Hasonlan beszlhetnk tulajdonsgpldnyrl, amely egy egyedpldny adott tulajdonsgt jelenti (pldul adott knyv szerzjnek nevt), s tulajdonsgtpusrl, amely adott egyed tpus adott tulajdonsgt, mint fogalmat jelli (pldul knyvek esetn a "szerz" fogalmat). Ugyangy meg lehet klnbztetni kapcsolatpldnyt, amely kt egyed pldny kztti konkrt kapcsolatot jelent (pldul X olvas kiklcsnzte Y knyvet), s kapcsolattpust amely kt egyedtpus kztti kapcsolatok sszessgt jelenti.

2. bra: Knyvtri nyilvntarts E-K diagramja. Fontos az egyedtpus pontos (informlis) meghatrozsa. Pldul, egy egyetemi oktatsi adatbzisnl a kurzus egyedtpus tbbflekpp rtelmezhet: (i) Tbb flven keresztl tart kurzust egy egyednek tekintnk. (ii) Az sszetartoz eladst s gyakorlatot egy kurzusnak tekintjk. (iii) Adott helyen s idpontban tartott foglalkozst tekintnk kurzusnak. Ha tbb hallgati csoport van, akkor mindegyik csoport gyakorlati rja kln egyedpldnyt jelent.

10

2.1. Kapcsolatok tpusai


A kapcsolatok tpusai a kvetkezk: a). Kt egyed kztti (msnven binris) kapcsolat, mint a knyvtri plda esetben. Ennek hrom altpusa lehetsges (E s F jelli a kt egyedtpust): - 1:1 kapcsolat, amikor minden E-egyedhez csak legfeljebb egy F-egyed tartozhat, s fordtva. - 1:N kapcsolat, amikor egy E-egyedhez tbb F-egyed tartozhat, de ez fordtva nem igaz, vagyis egy F-egyedhez csak legfeljebb egy E-egyed tartozhat. - N:M kapcsolat, amikor mindkt fajta egyedhez tetszleges szm msik fajta egyed tartozhat. b). Kettnl tbb egyed kztti (msnven sokg) kapcsolat. Ez a tpus ritkbban lp fel, szksg esetn visszavezethet binris kapcsolatokra.

3. bra: Kapcsolat tpusnak jellse felirattal

4. bra. Kapcsolat tpusnak jellse nyllal az "1"-oldalon (rendre 1:1, N:1, N:M kapcsolat) A knyvtri nyilvntarts mindhrom tpusra pldval szolglhat. 1. vltozat: Ttelezzk fel, hogy a knyvtros kt felttelezssel l: a). Egy olvasnak egyszerre csak egy knyvet hajland kiadni. b). Csak azt kvnja nyilvntartani, hogy egy adott knyv ppen kinl van, azt nem, hogy korbban ki(k)nl volt. (Ekkor valjban flslegess vlik a "visszahozs" tulajdonsg, hisz a knyv visszahozsakor a knyv-olvas kapcsolat megsznik.) A fenti felttelezsek mellett a knyv s olvas egyedek kztt 1:1 kapcsolat lp fel, hiszen egy knyv egyszerre csak egy olvasnl lehet, illetve egy olvas egyszerre csak egy knyvet vihet ki. 2. vltozat: Most ttelezzk fel, hogy a knyvtros eltekint az a). feltteltl, s egy olvasnak egyszerre tbb knyvet is hajland kiadni. Ekkor a knyv s olvas egyedek kztt N:1 kapcsolat lp fel, ugyanis egy olvasnl egyszerre tbb knyv lehet, viszont egy knyv egyszerre csak egy olvasnl tartzkodhat.

11

3. vltozat: Tegyk fel, hogy a knyvtros eltekint a b). feltteltl is, s azt is nyilvn akarja tartani, hogy egy adott knyv korbban mely olvasknl mettl meddig volt kint. Ekkor mr egy knyv tbb knyv-olvas kapcsolatban is rszt vehet, ezrt a kt egyed kztt N:M kapcsolat ll el. Ltjuk, hogy a kapcsolat tpusa igen lnyeges az E-K modell szempontjbl, ezrt azt az E-K diagramon a 3. bra vagy 4. bra szerint jellni szoktk. Egy egyedtpus teljesen rszt vesz egy kapcsolatban, ha minden egyedpldny kapcsolatban ll valamely msik egyeddel. Ha ezt hangslyozni akarjuk, akkor az egyed s a kapcsolat kztti ketts vonalat hzunk. A teljes rszvtel ltalban nem teljesl, pldul a knyvtri nyilvntarts 1. s 2. vltozatnl rendszerint nincs minden knyv kiklcsnzve, s nincs minden olvasnl knyv. A 3. vltozatnl viszont megkvetelhetjk, hogy egy olvast csak akkor vesznk nyilvntartsba, ha valamikor legalbb egy knyvet klcsnztt, ekkor az Olvas egyed teljesen rszt vesz a kapcsolatban. 2. Plda. Elfordul, hogy egy egyedtpus nmagval ll kapcsolatban. A 5. bra pldul egy hierarchikus felpts intzmny szervezeti egysgeit modellezi (pldul egyetemi karok, tanszkcsoportok, tanszkek). Itt 1:N kapcsolatrl van sz, ahol egy kapcsolatpldny azt jelenti, hogy X egysgnek Y egysg a fegysge. Megjegyzend, hogy ez a modell nem zrja ki a krkrs hivatkozsokat.

5. bra. Hierarchikus felpts intzmny szervezeti egysgeinek modellezse

6. bra. Plda sokg kapcsolatra

12

3. Plda. A 6. bra sokg kapcsolatra ad pldt. A kiadra mutat nyl azt jelenti, hogy adott (knyv, szerz) pr legfeljebb egy kiadval llhat kapcsolatban. Hasonl llts nem igaz a (kiad, szerz) s (knyv, kiad) prokra, mivel egy knyvnek tbb szerzje lehet.

2.2. sszetett s tbbrtk attribtumok


sszetett attribtum (struktra): maga is attribtumokkal rendelkezik. Pldul a lakcm attribtumhoz a helysg, utca, hzszm rszattribtumok tartoznak. Jellse: attribtumhoz kapcsold attribtumok.

7. bra. Plda sszetett attribtumra

Tbbrtk attribtum: aktulis rtke halmaz vagy lista lehet. Ha pldul egy knyvnek tbb szerzje van, s azok sorrendjt nem tartjuk fontosnak, akkor halmazknt, ha fontosnak tartjuk, akkor listaknt adhatjuk meg a neveket. A tbbrtk attribtum jele ketts ellipszis.

8. bra. Plda tbbrtk attribtumra

2.3. Gyenge entitsok


Gyenge entits: az attribtumai nem hatrozzk meg egyrtelmen, csak a kapcsolatai rvn lesz meghatrozott. Jele: ketts tglalap. Meghatroz kapcsolat: gyenge entitst hatroz meg. Jele: ketts rombusz. 4. Plda. Egy szmtgp szerviz nem bajldik azzal, hogy egyedi azonostt rendeljen a javtott gpekhez, hanem azokat a tulajdonosaik szerint tartja nyilvn (9. bra). Itt a szmtgp gyenge entits, mivel a mszaki paramterek nem hatrozzk meg egyrtelmen a

13

gpet. Ha elfordulhat, hogy egy tulajdonosnak tbb, azonos paramterekkel rendelkez gpe van, akkor a szmtgp egyedhez egy sorszm attribtum felvtele is szksges a megklnbztetsre. Ez azonban knnyebben kezelhet, hisz itt csak adott tulajdonos gpeit kell egymstl megklnbztetni, nem az sszes gpet.

9. bra. Plda gyenge entitsra: szmtgp szervz nyilvntartsa

N:M tpus s sokg kapcsolat mindig helyettesthet gyenge entitssal s tbb binris kapcsolattal (10. bra).

10. bra. Sokg kapcsolat (6. bra) helyettestse gyenge egyeddel s binris kapcsolatokkal

2.4. Specializl kapcsolatok


Ha valamely ltalnos egyednek bizonyos altpusait kln szeretnnk modellezni, akkor a ftpus s az altpusok viszonyt specializl kapcsolattal rhatjuk le.

14

Jells: hromszg, amelynek cscsa a ftpus fel mutat. A hromszgbe angolul "is a", magyarul "az egy" szveget szoktak rni, ezzel is hangslyozva a kapcsolat jellegt. 5. Plda. A 11. brn egy oktatsi intzmny helyisgeit nyilvntart diagram lthat. Az egyes helyisgeket a tartalmaz plet azonostjval s az azon belli ajtszmmal azonostjuk, tovbbi attribtumok a helyisg neve s alapterlete. A helyisg egyed altpusai a tanterem (attribtumok: az lhelyek szma, a tbla s vett tpusa), a szmtgpterem (attribtum: a gpek szma) s az iroda (attribtumai az irodban mkd telefon s fax szma, s kapcsolatban ll az irodban dolgoz szemlyekkel). Ltjuk, hogy az altpusoknak lehetnek sajt attribtumai s kapcsolatai, ugyanakkor rklik a ftpus attribtumait s esetleges kapcsolatait is. Pldul a tanterem teljes attribtumhalmaza: plet, ajtszm, nv, alapterlet, frhely, vett, tbla. A specializl kapcsolat az egyedek tbbszrs elfordulst eredmnyezi. Ha ugyanis egyedhalmazokat kpzelnk a ftpus s altpusok helyre, akkor egy egyedpldny tbb egyedhalmazban is szerepel: pldul egy konkrt eladterem egyarnt rsze a Helyisg s Tanterem egyedhalmazoknak. A specializl kapcsolat lnyegben 1:1 kapcsolatot jelent egy ftpus s egy altpus kztt, de sajtos mdon nem klnbz egyedeket, hanem ugyanazon egyed kt elfordulst kapcsolja ssze. Az altpus mindig teljesen rszt vesz ebben a kapcsolatban, mg a ftpus ltalban nem. Egy egyed egyszerre kettnl tbb egyedhalmazban is elfordulhat, egy szmtgpes oktatterem pldul tanterem s gpterem egyszerre. Vgl az is lehet, hogy egy egyed csak a ftpushoz tartozik (pldul folyos, mosd, raktr, stb.)

11. bra. Oktatsi intzmny helyisg nyilvntartsa

15

3. A relcis adatmodell
3.1. A relcis adatmodell fogalma
A relcis adatmodellt 1970-ben definilta E. F. Codd amerikai kutat, de gyakorlati alkalmazsa csak az 1980-as vekben vlt ltalnoss. Lnyege, hogy az egyedeket, tulajdonsgokat s kapcsolatokat egyarnt tblzatok, gynevezett adattblk segtsgvel adja meg. Az adattbla (vagy egyszeren csak tbla) sorokbl s oszlopokbl ll. Egy sort rekordnak nevezzk, amely annyi mezbl ll, ahny oszlopa van a tblnak. 6. Definci. Attribtumnak neveznk egy tulajdonsgot, amelyet a megnevezsvel azonostunk, s rtktartomnyt rendelnk hozz. Jells: a Z attribtum rtktartomnya dom(Z). Korltozs: a relcis adatmodellnl az rtktartomny csak atomi rtkekbl llhat, vagyis elemei nem lehetnek struktrk, halmazok, stb. Az rtktartomny megadsa rendszerint tpus s hossz megadst jelenti, pldul a knyvszm attribtum rtktartomnya a legfeljebb 4-jegy decimlis szmok halmaza lehet. A gyakorlatban az attribtumnvhez ltalban informlis lerst (kdolsi utastst) kell mellkelni, amely az attribtum megadst pontostja (pldul a szerz attribtumot tbb szerz esetn hogyan kell megadni, a knyvszm egyes szmjegyei utalhatnak a knyv jellegre, stb.). 7. Definci. Relcismnak neveznk egy attribtumhalmazt, amelyhez azonost nevet rendelnk. (Ahol nem rtelemzavar, relcisma helyett egyszeren csak smt mondunk.) Jellsek: - A relcismt R(A1,...,An) mdon szoks jellni, ahol A1,...,An attribtumok, R pedig a sma neve. - Hasznljuk mg az R(A) jellst is, ahol A az {A1,...,An} attribtumhalmaz. - Az R sma Ai attribtumt R.Ai-vel jelljk, ha klnbz smk azonos nev attribtumait kell megklnbztetni. Megllapods. A tovbbiakban mindvgig, ha valamely Z attribtum(rsz)halmazrl beszlnk, akkor felttelezzk, hogy Z nem res. Ha res halmaz is megengedett, erre kln felhvjuk a figyelmet. 8. Plda. A knyvek nyilvntartsra szolgl relcisma Knyv (knyvszm, szerz, cm), ahol az egyes attribtumok rtktartomnya: dom(knyvszm) = 4-jegy decimlis szmok halmaza, dom(szerz) = legfeljebb 30 hossz karaktersorozatok halmaza, dom(cm) = legfeljebb 50 hossz karaktersorozatok halmaza. 9. Definci. Relci az R(A1,...,An) sma felett: T dom(A1) X ... X dom(An). Vagyis, T elemei (a1,...,an) alakak, ahol ai dom(Ai) (i=1,...,n).

16

A relci megjelensi formja az adattbla, amelynek oszlopai az A1,...,An attribtumoknak, sorai pedig T egyes elemeinek felelnek meg. A tbla fejlcben a relcismt szoktk megadni (lsd a Knyv tblt a 12. brn).
Ahogy az E-K modellnl megklnbztettnk egyedtpust s egyedpldnyt, a relcis modellnl is beszlhetnk relcitpusrl, amely a relcismnak felel meg, s relcipldnyrl, amely az adattblnak felel meg. ltalnos esetben a smra s tblra kln jellst hasznlunk (pldul R sma feletti T tbla), de konkrt pldk esetn a kettt azonosan jelljk (pldul Knyv sma s Knyv tbla).

Mivel a definci szerint a T relci egy halmaz, gy a relcis modellben a tbla minden sora klnbz, s a sorokra semmilyen rendezettsget nem ttelez fel. Valjban az adatok gpi trolsa mindig valamilyen sorrendben trtnik, s a konkrt adatbzis-kezel rendszerek ltalban megengednek azonos sorokat is. Az elmleti modell s a gyakorlati alkalmazs ezen eltrseire mindig gyelni kell.
A relcis modell valjban a tbla oszlopaira sem hatroz meg sorrendet. Mivel a relci fenti defincija akaratlanul is kikti az oszlopok sorrendjt, gy egy msik definci is hasznlatos: Tekintsk a D = dom(A1) U ... U dom(An) egyestett rtktartomnyt s az A = {A1,...,An} attribtumhalmazt. Relcinak neveznk egy T = {t1,...,tk} halmazt, ahol ti: A D lekpezs, amelynl minden j-re ti(Aj) dom(Aj) teljesl.

Tbb adattbla egyttesen alkotja a relcis adatbzist, amely egy teljes jelensgkr lersra alkalmas. A knyvtri nyilvntarts egy lehetsges megvalstst a 12. bra mutatja: itt a Knyv tblban adjuk meg az adott knyvet kiklcsnz olvas szmt s a kivtel dtumt. Ha egy knyvet ppen nem klcsnztek ki, akkor a megfelel mezk NULL rtkek (a 12. brn egyszeren resen hagytuk ezeket). A Knyv tbla:
Knyvszm 1121 3655 2276 1782 Szerz Slyi Rad Karinthy Jkai Cm Adatbzisok Vilgatlasz gy rtok ti Aranyember Olvasszm 122 355 Kivtel 2005.07.12 2005.09.23

Az Olvas tbla:
Olvasszm 122 612 355 Nv Kiss Istvn Nagy gnes Tth Andrs Lakcm Szeged, Virg u. 10. Szentes, Petfi t 38. Budapest, Jg u. 3.

12. bra: A knyvtri nyilvntarts 1. ill. 2. vltozatt megvalst adatbzis A 12. brn jl lthat, hogy az olvasszm attribtum mindkt tblban szerepel, ezzel kapcsolatot ltest a tblk kztt. Ez rvilgt a kvetkezre:

17

A relcis adatmodell lnyege, hogy a klnbz relcismk azonos attribtumokat tartalmazhatnak, ezltal kerlnek kapcsolatba egymssal, s gy a klnll adattblk egyttese egy szervesen sszefgg adatbzist alkot.

3.2. Kulcsok
10. Definci. Egy R(A1,...,An) relcisma esetn az A = {A1,...,An} attribtumhalmaz egy K rszhalmazt szuperkulcsnak nevezzk, ha brmely R feletti T tbla brmely kt sora K-n klnbzik. (Formlisan: brmely ti T s tj T esetn ti tj => ti(K) tj(K). Szemlletesen: ha a tbln a K-n kvli oszlopokat letakarjuk, akkor is minden sor klnbz marad.) Megjegyzs: K = A mindig szuperkulcs. 11. definci. Az A attribtumhalmaz K rszhalmazt kulcsnak nevezzk, ha minimlis szuperkulcs, vagyis egyetlen valdi rszhalmaza sem szuperkulcs. Ha K egyetlen attribtumbl ll, akkor egyszer, egybknt sszetett kulcsrl beszlnk. Ha egy relcismnak tbb kulcsa is van, egyet kivlasztunk kzlk, ez lesz az elsdleges kulcs. Egy relcismban teht mindig csak egy elsdleges kulcs lehet. Jells: az elsdleges kulcsot alkot attribtumokat alhzssal szoks jellni. Megjegyzs: A kulcs nem a tbla tulajdonsga, hanem egy felttel elrsa a relcismra. A kulcs meghatrozsa az attribtumok jelentsnek vizsglatval lehetsges, s nem egy adott tbla vizsglatval. Pldul a 12. brn lthat Knyv tbla esetn cm vagy szerz is kulcs lehetne. 12. Plda. Az albbi tbla gpkocsik mozgsnak menetlevl-szer nyilvntartst tartalmazza: FUVAR (gkvez, rendszm, indul, rkezik) Itt ngy sszetett kulcs van: {gkvez, indul}, {gkvez, rkezik}, {rendszm, indul}, {rendszm, rkezik}. Ezek kzl nknyesen kivlasztunk egyet, ez lesz az elsdleges kulcs: FUVAR (gkvez, rendszm, indul, rkezik) 13. definci. Egy relcisma attribtumainak valamely L rszhalmaza kls kulcs (msnven idegen kulcs, angolul foreign key), ha egy msik sma elsdleges kulcsra hivatkozik. Pontosabban: legyenek R1(A1,...,An), R2(B1,...,Bm) relcismk. Az L {A1,...,An} kls kulcs az R1-ben R2-re vonatkozan, ha - R2 elsdleges kulcsa K, s dom(K) = dom(L), - brmely R1, R2 feletti T1, T2 tblk esetn L rtke T1 brmely sorban T2-ben elfordul K-rtk vagy NULL. Jells: a kls kulcsot dlt betvel, vagy a hivatkozott kulcsra mutat nyllal jelljk. A kulcshoz hasonlan a kls kulcs is felttel elrsa a smkra, s nem az aktulis tblk tulajdonsga. 14. Definci. Ha egy adatbzis valamennyi tbljnak smjt felrjuk a kulcsok s kls kulcsok jellsvel egytt, akkor relcis adatbzissmt kapunk.

18

15. Plda. A knyvtri nyilvntarts relcis adatbzissmja: Knyv (knyvszm, szerz, cm, olvasszm, kivtel) Olvas (olvasszm, nv, lakcm) vagy ms jellsmddal:

3.3. Indexek
Az index nem rsze a relcis modellnek, hanem kiegszt adatstruktra, amelyet egy tblhoz lehet generlni. F cljai: - Keressek gyorstsa. Ha pldul adott olvasszmnak megfelel rekordot keressk, ehhez ne kelljen valamennyi rekordot vgignzni. - Rendezs. Listzskor illetve feldolgozskor gyakran szeretnnk valamilyen szempont szerint rendezve kezelni a rekordokat (pldul olvas neve szerint bc rendben), fggetlenl a fizikai adattrols sorrendjtl. Az indexet a tbla attribtumainak valamely L rszhalmazhoz generljuk, ezt indexkulcsnak nevezzk. Az index segtsgvel a tbla sorai L szerinti rendezsben kezelhetk. Az indexet is tblaknt lehet elkpzelni, amelynek els oszlopa az indexkulcsot, a msodik a megfelel rekord fizikai sorszmt tartalmazza (13. bra).
Knyvszm 1121 2276 3655 1782 Szerz Slyi Karinthy Rad Jkai Cm Adatbzisok gy rtok ti Vilgatlasz Aranyember Olvasszm 122 355 Kivtel 2005.07.12 2005.09.23

Szerz Jkai Karinthy Rad Slyi

Index 4 2 3 1

Cm Index Adatbzisok 1 Aranyember 4 gy irtok ti 2 Vilgatlasz 3

13. bra. A Knyv tblhoz ltrehozott szerz szerinti ill. cm szerinti indextbla Az index konkrt megvalstsa DBMS-enknt vltozik. Az indextbla ltalban gynevezett B-fa (B = balanced = kiegyenslyozott) struktrban kerl trolsra, amely a binris keresfa ltalnostsa. Tulajdonsgai: - egy csompontnak kettnl tbb gyermeke lehet,

19

- minden mdosts utn kiegyenslyozott marad (gy a mdosts a legrosszabb esetben is n helyett csak log(n) mveletet ignyel). A B-ft ltalban mgneslemezen troljk (kivve a gykr csompontot, amely tartsan a memriban lehet). Egy csompont egy lemezblokkot foglal el, ezrt akr szz gyermekre mutat pointert is tartalmazhat. A keress ritkn mlyebb 3 szintnl. Mivel a keress idejben a lemezolvass a meghatroz, gy a gyakorlatban konstans keressi idvel szmolhatunk. Index ltrehozsa viszonylag lass, hiszen ekkor vgig kell menni a teljes tbln. A folyamatot gy kpzelhetjk el, hogy az i-edik rekordhoz egy (zi,i) prt generlnak, ahol zi az L indexkulcs rtke az adott rekordban, i pedig a rekord fizikai sorszma, s ezt a (zi,i) prt fzik fel a fra. Index hasznlata. - Az elkszlt indexben L adott rtkhez (pldul a 2276 knyvszmhoz) gyorsan elkereshet a megfelel fizikai rekord sorszma. - A tbla rendezett listzshoz a B-ft kell bejrni. - Ha a tblba j rekordot vesznk fel, ez mindig a tbla vgre kerl, egyidejleg a (zi,i) pr beszrsra kerl az indexbe. - Ha rekordot trlnk a tblbl, az egyes rendszereknl csak logikailag trldik, fizikailag tovbbra is a tblban marad, gy a rekordok sorszmai nem vltoznak meg. Ha a sok trlt rekord miatt a tbla fizikai tmrtse is szksgess vlik, akkor az index is jragenerldik. Egy tblhoz egyszerre tbb index is ltrehozhat, pldul a knyveket indexelhetjk knyvszm, szerz s cm szerint is. A rekordokat a kpernyn mindig aszerint ltjuk rendezve, hogy melyik indexet vlasztjuk ki, mikzben a fizikai rekordok sorrendje mindvgig vltozatlan marad.

20

3.4. E-K diagrambl relcis adatbzissma ksztse


Egyedek lekpezse
Szably: az E-K modell minden egyedhez felrunk egy relcismt, amelynek neve az egyed neve, attribtumai az egyed attribtumai, kulcsa az egyed kulcs-attribtumai. A sma feletti adattbla minden egyes sora egy egyedpldnynak felel meg. 16. Plda. A 2. bra szerinti knyvtri nyilvntarts esetn a knyveket egy Knyv tblban tarthatjuk nyilvn, amely az albbi sma szerint pl fel: Knyv (knyvszm, szerz, cm) Az olvask nyilvntartsra egy Olvas nev tbla szolglhat, amelynek smja: Olvas (olvasszm, nv, lakcm)

Gyenge entitsok lekpezse


Szably: a gyenge entits relcismjt bvteni kell a meghatroz kapcsolat(ok)ban szerepl egyed(ek) kulcsval. 17. Plda. A 9. bra szerinti szmtgp nyilvntarts adatbzissmja a kvetkez: Tulajdonos (szemlyiszm, nv, lakcm) Szmtgp (processzor, memria, merevlemez, szemlyiszm) Ha egy tulajdonosnak tbb, azonos gpe lehet, akkor ezeket egy sorszm attribtummal klnbztetjk meg: Tulajdonos (szemlyiszm, nv, lakcm) Szmtgp (processzor, memria, merevlemez, szemlyiszm, sorszm) 18. Plda. A 10. brn lthat Szerzds egyed lekpezse: Szerzds (fizets, ISBN, szerznv)

sszetett attribtumok lekpezse


Tegyk fel, hogy az Olvas tblban a lakcm attribtumot (helysg, utca, hzszm) struktraknt szeretnnk kezelni. Relcis adatmodellben erre egyetlen lehetsg van: az Olvas (olvasszm, nv, lakcm) sma helyett a Olvas (olvasszm, nv, helysg, utca, hzszm) smra trnk t, a megfelel tbla a kvetkez:

21

Olvasszm 122 612 355

Nv Kiss Istvn Nagy gnes Tth Andrs

Helysg Szeged Szentes Budapest

Utca Virg u. Petfi t Jg u.

Hzszm 10 38 3

Tbbrtk attribtumok lekpezse


Krds, hogy tbbszerzs knyveket hogyan tartsunk nyilvn az adatbzisban. Pldaknt a Knyv tblt vizsgljuk, amelynl a 1121 szm knyvnek valjban kt szerzje van: Slyi Jnos s Szelezsn Jnos. Albb sorra vesszk a lehetsgeket. 1. Megads egyrtk attribtumknt. A szerz megadsra szolgl szvegmezben felsoroljuk a szerzket. Htrnyok: - a szerzket kln-kln nem tudjuk kezelni. - sok szerz esetleg nem fr el a megadott mezben
2. Sorok tbbszrzse. A Knyv tblban egy knyvhz annyi sort vesznk fel, ahny szerzje van: Knyvszm 1121 1121 3655 2276 1782 Szerz Slyi Szelezsn Rad Karinthy Jkai Cm Adatbzisok Adatbzisok Vilgatlasz gy rtok ti Aranyember

A megfelel relcisma: Knyv (knyvszm, szerz, cm) A fenti megolds htrnya, hogy a tbbszerzs knyvek cmt tbb pldnyban kell megadni. Ez redundancit jelent, teht ez nem j megolds.

3. j tbla felvtele. A Knyv (knyvszm, szerz, cm) smt az albbi kt smval helyettestjk: Knyv (knyvszm, cm) Szerz (knyvszm, szerz) A megfelel adattblk a kvetkezk:
Knyvszm 1121 3655 2276 1782 Knyvszm 1121 1121 3655 2276 1782 Cm Adatbzisok Vilgatlasz gy rtok ti Aranyember Szerz Slyi Szelezsn Rad Karinthy Jkai

22

Br ez a megvalsts bonyolultabbnak tnik, ksbb ltni fogjuk, hogy ez a korrekt megolds. Ha a szerzk sorrendje nem kzmbs, akkor a Szerz tblt egy sorszm mezvel kell bvteni (emlkeztetnk r, hogy a relcis adatmodell nem definilja a rekordok sorrendjt): Knyv (knyvszm, cm) Szerz (knyvszm, sorszm, szerz)

Kapcsolatok lekpezse
ltalnos szably: 1. Vegynk fel a kapcsolathoz egy j smt, amelynek neve a kapcsolat neve, attribtumai pedig a kapcsold entitsok kulcs attribtumai s a kapcsolat sajt attribtumai. 2. Ha ezen sma kulcsa megegyezik valamely kapcsold egyed kulcsval, akkor a kapcsolat smja az egyed smjba beolvaszthat. Formlisan, ha az sszekapcsolt egyedeknek az R1(K1 U B1), ..., Rn(Kn U Bn) smk felelnek meg (Ki a kulcs, Bi a tovbbi attribtumok halmaza), akkor a kapcsolatnak egy R(K1 U ... U Kn U B) smt feleltetnk meg, ahol B a kapcsolat sajt attribtumai. R-ben Ki kls kulcs hivatkozs az Ri smra. Az R feletti adattbla minden egyes sora egy kapcsolatpldnynak felel meg. 19. Plda. A 2. brn szerepl "klcsnzs" kapcsolat esetn az albbi smt kapjuk: Klcsn (knyvszm, olvasszm, kivtel, visszahozs) Krds, hogy mi lesz a kulcs ebben a tblban. Ehhez a kapcsolat tpust kell megvizsglni. Nzzk meg sorra az elzekben trgyalt hrom vltozatot! 1. vltozat: Ha egy olvasnak egyszerre csak egy knyvet adnak ki, akkor a klcsnzs 1:1 kapcsolatot jelent. Ilyenkor a Klcsn smban a knyvszm s az olvasszm egyarnt kulcs. Tovbb, a visszahozs attribtumra nincs szksgnk, mivel a knyv visszahozsval a knyv-olvas kapcsolat megsznik. Teht, a Klcsn (knyvszm, olvasszm, kivtel) vagy a Klcsn (knyvszm, olvasszm, kivtel) smt vehetjk fel a kapcsolathoz. Az els vltozat kulcsa a Knyv smval, a msodik az Olvas smval egyezik meg. A Klcsn smt az azonos kulcs smba olvasztva a Knyv (knyvszm, szerz, cm, olvasszm, kivtel) Olvas (olvasszm, nv, lakcm) vagy a Knyv (knyvszm, szerz, cm) Olvas (olvasszm, nv, lakcm, knyvszm, kivtel) adatbzissmkat kapjuk. A megfelel tblk a 12. s 14. brn lthatk. Ha egy knyvet ppen senki sem klcsnztt ki, illetve ha egy olvasnl ppen nincs knyv, akkor a megfelel mezk resen maradnak (azaz NULL rtkek).

23

A Knyv tbla:
Knyvszm 1121 3655 2276 1782 Szerz Slyi Rad Karinthy Jkai Cm Adatbzisok Vilgatlasz gy rtok ti Aranyember

Az Olvas tbla:
Olvasszm 122 612 355 Nv Kiss Istvn Nagy gnes Tth Andrs Lakcm Szeged, Virg u. 10. Szentes, Petfi t 38. Budapest, Jg u. 3. Knyvszm 3655 1782 Kivtel 2005.07.12 2005.09.23

14. bra. Knyvtri nyilvntarts abban az esetben, ha egy olvas egyszerre csak egy knyvet klcsnzhet ki 2. vltozat: Ha egy olvas tbb knyvet is kiklcsnzhet, akkor a knyv-olvas kapcsolat N:1 tpus. Ekkor a Klcsn smban csak a knyvszm lehet kulcs, ezrt a Klcsn smt csak a Knyv smba olvaszthatjuk: Knyv (knyvszm, szerz, cm, olvasszm, kivtel) Olvas (olvasszm, nv, lakcm) A megfelel tblk a 12. brn lthatk, azzal a klnbsggel, hogy most tbb knyvnl is szerepelhet ugyanazon olvas szma. A 14. bra szerinti lehetsg, vagyis hogy az Olvas tblt bvtjk knyvszm s kivtel oszloppal, mr nem jrhat. Ugyanis egy olvashoz tbb knyvszmot kellene bernunk, ami ellentmond a relcis adatmodell alapelvnek: az adattbla egy mezjbe csak atomi rtket lehet berni. 3. vltozat: Ha az egyes knyvek korbbi klcsnzseit is nyilvntartjuk, akkor nem csak egy olvashoz tartozhat tbb knyv, hanem egy knyvhz is tbb olvas (N:M kapcsolat), st adott olvas adott knyvet egyms utn tbbszr is kiklcsnzhet. Ezrt a Klcsn smban {knyvszm, kivtel} vagy {knyvszm, visszahozs} a kulcs, a Klcsn tblt most sem a Knyv, sem az Olvas tblba nem tudjuk beolvasztani. Az adatbzissma ezrt a kvetkez: Knyv (knyvszm, szerz, cm) Olvas (olvasszm, nv, lakcm) Klcsn (knyvszm, olvasszm, kivtel, visszahozs)

24

A Knyv tbla:
Knyvszm 1121 3655 2276 1782 Szerz Slyi Rad Karinthy Jkai Cm Adatbzisok Vilgatlasz gy rtok ti Aranyember

Az Olvas tbla:
Olvasszm 122 612 355 Nv Kiss Istvn Nagy gnes Tth Andrs Lakcm Szeged, Virg u. 10. Szentes, Petfi t 38. Budapest, Jg u. 3.

A Klcsn tbla:
Knyvszm 1121 1121 1121 3655 2276 1782 Olvasszm 355 612 122 122 612 355 Kivtel 2005.11.02 2003.11.14 2005.02.22 2005.07.12 2004.03.16 2005.09.23 Visszahozs 2004.01.03 2005.04.17 2004.04.02

15. bra: A knyvtri adatbzis 3. vltozata A fentiek alapjn az albbi szablyok fogalmazhatk meg kt egyed kztti kapcsolatok lekpezsre relcis modellbe: a) 1:1 kapcsolat esetn kivlasztjuk a kapcsolatban rsztvev kt entits egyikt (brmelyiket), s annak smjba j attribtumknt felvesszk a msik entits meghatroz (kulcs) attribtumait, valamint a kapcsolat attribtumait. b) 1:N kapcsolat esetn az N oldali entits smjba j attribtumknt felvesszk a msik entits kulcs attribtumait, valamint a kapcsolat attribtumait. c) N:M kapcsolat esetn j smt vesznk fel, amelynek attribtumai - a kapcsold entitsok kulcs attribtumai, - a kapcsolat sajt attribtumai. Megjegyzs. Elfordul, hogy 1:1 illetve 1:N kapcsolat esetn sem rdemes a kapcsolat smjt beolvasztani a megfelel egyed smjba. Ha pldul a Knyv tblt bvtjk olvasszm s kivtel oszloppal, de a knyveknek csak elenyszen kis szzalka van adott pillanatban kiklcsnzve, akkor olvasszm s kivtel attribtumok rtke majdnem minden sorban NULL lesz. Ez a redundancia megsznik, ha a klcsnzseket egy kln Klcsn (knyvszm, olvasszm, kivtel) tblban tartjuk nyilvn. 20. Plda. A 5. bra szerinti szervezeti egysg nyilvntarts nmagval kapcsolatban ll egyedet tartalmaz. Lnyegben itt is a fenti b) szablyt alkalmazhatjuk, vagyis az Egysg (egysgkd, megnevezs) smt kell bvteni egysgkd attribtummal. Mivel egy smban nem szerepelhet kt azonos attribtumnv, ezrt az j attribtumot fegysgkdnak nevezzk:

25

Egysg (egysgkd, megnevezs, fegysgkd) ahol fegysg a flrendelt szervezeti egysg kdja. 21. Plda. Az ltalnos szably alapjn felrhatjuk a 6. bra szerinti E-K modell relcis adatbzissmjt: Knyv (cm, v, ISBN) Szerz (nv, lakcm) Kiad (nv, cm) Szerzds (ISBN, szerznv, kiadnv, fizets) Az azonos nevek tkzsnek elkerlsre a Szerzds smban mdostott attribtumneveket alkalmaztunk. Mivel a Szerzds kapcsolatban a knyv s a szerz mr meghatrozza a kiadt (lsd a nyilat a 6. brn), ezrt a kiadnv mr nem rsze a kulcsnak. Ha a 10. bra szerinti sztbontott vltozat smjt rjuk fel, akkor is a fenti adatbzissmhoz jutunk.

Specializl kapcsolatok lekpezse


A relcis megvalstsi lehetsgeket a 11. bra szerinti E-K modellen mutatjuk be. 1. Minden altpushoz kln tbla felvtele, egy egyed csak egy tblban szerepel. Az altpusok rklik a ftpus attribtumait. Helyisg (plet, ajtszm, nv, alapterlet) Tanterem (plet, ajtszm, nv, alapterlet, frhely, tbla, vett) Gpterem (plet, ajtszm, nv, alapterlet, gpszm) Iroda (plet, ajtszm, nv, alapterlet, telefon, fax) Dolgoz (adszm, nv, lakcm, plet, ajtszm) Htrnyok: - Keresskor gyakran tbb tblt kell vizsglni (ha pldul a Kzponti plet 211. sz. terem alapterlett keressk). - Kombinlt altpus (pldul szmtgpes tanterem) csak j altpus felvtelvel kezelhet. 2. Minden altpushoz kln tbla felvtele, egy egyed tbb tblban is szerepelhet. A ftpus tbljban minden egyed szerepel, s annyi altpusban ahnynak megfelel. Az altpusok a ftpustl csak a kulcs-attribtumokat rklik. Helyisg (plet, ajtszm, nv, alapterlet) Tanterem (plet, ajtszm, frhely, tbla, vett) Gpterem (plet, ajtszm, gpszm) Iroda (plet, ajtszm, telefon, fax) Dolgoz (adszm, nv, lakcm, plet, ajtszm) Htrny: Itt is elfordulhat, hogy tbb tblban kell keresni (pldul ha a tantermek nevre s frhelyre vagyunk kvncsiak). 3. Egy kzs tbla felvtele, az attribtumok unijval. Az aktulisan rtkkel nem rendelkez attribtumok NULL rtkek.

26

Helyisg (plet, ajtszm, nv, alapterlet, frhely, tbla, vett, gpszm, telefon, fax) Dolgoz (adszm, nv, lakcm, plet, ajtszm) Htrnyok: - Az ilyen egyestett tblban ltalban sok NULL attribtumrtk szerepel. - Elveszthetjk a tpusinformcit (pldul ha a gpteremnl a gpszm nem ismert s ezrt NULL, akkor a gpterem lnyegben az egyb helyisgek kategrijba kerl).

27

4. Relcis algebra
Adattblkon vgzett mveletek, az adatbzis lekrdezs matematikai alapjt kpezik.

4.1. Halmazmveletek
Itt az adattblt (relcit) sorok halmazaknt kezeljk. 22. Definci. Az R1(A1,...,An) s R2(B1,...,Bm) relcismk kompatibilisek, ha n = m s dom(Ai) = dom(Bi) minden i-re. Kt tblt kompatibilisnek neveznk, ha smik kompatibilisek.

Uni
Tekintsk a T1 s T2 kompatibilis tblkat. Ezek halmazelmleti egyestse a T = T1 U T2 tbla lesz, amelynek smja szintn kompatibilis T1 ill. T2 smjval. A mvelet vgrehajtsa: - a kt tbla egyms utn rsa, - ismtld sorok kiszrse. Plda: T1: A1 A2 A3 a b f b d c c e b T2: B1 B2 B3 b a d d e b T1UT2: C1 C2 C3 a b f a b d c d c e b b

23. Plda. Az Eladi(szerz, cm, kiadsiv) tbla azon knyvek adatait tartalmazza, amelyekbl egy knyvkeresked legalbb egyet eladott az i-edik hnapban. Elad = Elad1 U ... U Elad12 a teljes v folyamn eladott knyvek adatait tartalmazza.

Metszet (Intersection)
Kt kompatibilis tbla halmazelmleti metszete: T = T1 T2. Plda: T1: A1 A2 A3 a b f b d c c e b T2: B1 B2 B3 b a d d e b T1T2: C1 C2 C3 b d e

24. Plda. Elad1 ... Elad12 azon knyvek adatait tartalmazza, amelyekbl minden hnapban trtnt elads.

28

Klnbsg (Difference)
Kt kompatibilis tbla halmazelmleti klnbsge: T = T1 T2 . Plda: T1: A1 A2 A3 a b f b d c c e b T2: B1 B2 B3 b a d d e b T1-T2: C1 C2 C3 a f b c c b

25. Plda. Elad1 Elad2 azon knyvek adatait tartalmazza, amelyekbl janurban adtak el, de februrban nem. Tulajdonsgok: az uni s metszet kommutatv, a klnbsg nem.

4.2. Redukcis mveletek


Projekci (vetts)
Adott oszlopok kivlasztsa a tblbl. Az j tbla smja a megfelel attribtumok kivlasztsval addik. Jellse: attribtumlista(tbla) 26. Plda: A Knyv1 = szerz,cm(Knyv) tbla: Szerz Slyi Rad Karinthy Jkai Cm Adatbzisok Vilgatlasz gy rtok ti Aranyember

Ha az attribtumlista nem tartalmazza a kulcsot, akkor a rekordok szma cskkenhet. Pldul ha kt knyv szerzje s cme megegyezik (ugyanazon knyv klnbz pldnyai), akkor a Knyv1 tblban sszevonsra kerlnek.

Szelekci (kivlaszts)
Adott felttelnek eleget tev sorok kivlasztsa a tblbl. A felttel ltalban attribtumokbl s konstansokbl felpl logikai kifejezs. Az eredmnytbla smja megegyezik (vagy kompatibilis) az eredetivel. Jells: felttel(tbla) 27. Plda: a kivtel<2008.01.01(Knyv) tbla: K.szm 1121 1782 Szerz Slyi Jkai Cm Adatbzisok Aranyember O.szm 355 355 Kivtel 2007.03.15 2007.09.23

A szelekci kommutatv: f1(f2(tbla) ) = f2(f1(tbla) ) = (f1 AND f2)(tbla)

29

4.3. Kombincis mveletek


Descartes-szorzat
Legyen R1(A1,...,An), R2(B1,...,Bm) kt tetszleges relcisma, s T1 dom(A1) x...x dom(An), T2 dom(B1) x...x dom(Bm) tblk R1, R2 felett. Descartes-szorzat: az R(A1,...,An,B1,...,Bm) sma feletti T dom(A1) x...x dom(An) x dom(B1) x...x dom(Bm) tbla, amelyet gy kapunk, hogy T1 minden sort prostjuk T2 minden sorval. Jele: T = T1 x T2 Plda: T1: A1 a b f A2 A3 b c d e c b T2: B1 B2 B3 b d e a d b T1xT2: A1 a a b b f f A2 A3 b c b c d e d e c b c b B1 B2 b d a d b d a d b d a d B3 e b e b e b

Ha R1 s R2 attribtumai kztt azonos nevek vannak, akkor R-ben az eredeti sma nevvel klnbztetjk meg ket (pldul R1.Ai, R2.Ai). Ha T1 s T2 sorainak szma r1 ill. r2, oszlopainak szma c1 s c2, akkor a T tblban r1*r2 sor s c1+c2 oszlop van. Ha kt tbla Descartes-szorzatt kpezzk, akkor projekcival visszakaphatk az eredeti tblk: A1,...An(T) = T1 s B1,...,Bm(T) = T2. A Descartes-szorzat mveletet nem szoktk alkalmazni a gyakorlatban, hiszen az adathalmaz redundancijt nveli, az sszekapcsolsi mveletek definilsnl azonban szksgnk lesz r.

Termszetes sszekapcsols (Natural join)


A relcis modell lnyeghez tartozik, hogy kt tbla kztt a megegyez attribtumok ltestenek kapcsolatot. ltalban, tekintsk az A s B attribtumhalmazok feletti R1(A) s R2(B) smkat, ahol X = A B nem res. Az R1 s R2 feletti T1 s T2 tblk termszetes sszekapcsolsa egy R(A U B) feletti T tbla, amelyet a kvetkezkpp definilunk: T = A U B(R1.X=R2.X(T1 x T2) ) Vagyis, a kt tbla Descartes-szorzatbl kivlasztjuk azokat a sorokat, amelyek az R1.X s R2.X attribtumokon megegyeznek, majd a projekcival a dupln szerepl X-beli attribtumokat csak egy pldnyban tartjuk meg (az A U B halmazelmleti uni, vagyis benne az X elemei csak egyszeresen szerepelnek). Jells: T = T1 * T2

30

28. Plda. A gyakorlatban ltalban kls kulcs alapjn vgeznek termszetes sszekapcsolst. Tekintsk a knyvtri nyilvntarts adatbzissmjt: Knyv (knyvszm, szerz, cm, olvasszm, kivtel) Olvas (olvasszm, nv, lakcm) Ha most a kiklcsnztt knyvek listjt szeretnnk megkapni, de az olvasszm mellett az olvas nevnek s lakcmnek a feltntetsvel, akkor ez a Kolv = Knyv * Olvas termszetes join mvelettel vgezhet el, ahol az eredmnyl kapott tbla a 12. bra szerinti adatbzis esetn
K.szm 3655 1782 Szerz Rad Jkai Cm Vilgatlasz Aranyember O.szm 122 355 Kivtel 2005.07.12 2005.09.23 Nv Kiss Istvn Tth Andrs Lakcm Szeged, Virg u.10 Budapest, Jg u.3.

Megjegyzs: ha T=T1*T2, akkor T-bl projekcival ltalban nem llthat el T1 ill. T2. Pldul, a fenti Kolv tbla csak a kiklcsnztt knyveket tartalmazza, mivel a ki nem klcsnztteknl a Knyv tblban az olvasszm rtke NULL.

Kls sszekapcsols (Outer join)


A termszetes sszekapcsols veszlye, hogy ltalban a kapcsolt tblk nem minden sora szerepel az eredmnytblban. Ha egy sor nem prosthat a msik tbla egyetlen sorval sem, akkor lg sornak nevezzk. Ha pldul Knyv tblban tves olvasszm szerepel, akkor a fenti KOLV tblban az adott knyv nem fog szerepelni. Tovbbi termszetes igny lehet, hogy a KOLV tblban ne csak a kiklcsnztt knyveket, hanem az sszes knyvet lssuk. A fentiek miatt hasznlatos a kls sszekapcsols (outer join) mvelet, amely az sszekapcsolt kt tbla egyiknl vagy mindkettnl valamennyi rekord megrzst garantlja. Jellsre az Oracle rendszer (+) konvencijt hasznljuk: Bal oldali kls sszekapcsols: T1 (+)* T2. Azt jelenti, hogy az eredmnytblban T1 azon sorai is szerepelnek, amelyek T2 egyetlen sorval sem prosthatk. Ezen sorokban a T2beli attribtumok rtke NULL. Jobb oldali kls sszekapcsols: T1 *(+) T2. Hasonlan a T2 tblra. Teljes kls sszekapcsols: T1 (+)*(+) T2. Itt mindkt tbla nem prostott rekordjai megrzdnek. 29. Plda. A KOLV1 = Knyv (+)* Olvas tbla mr az sszes knyvet tartalmazza. Kls sszekapcsols esetn mr projekcival visszakaphatk az eredeti tblk: bal oldali kls sszekapcsolsnl A(T) = T1, hasonlan a tbbi esetre.

31

Thta-sszekapcsols (Theta-join)
Itt a tblk Descartes-szorzatbl tetszleges felttel szerint vlasztunk ki sorokat: T = felttel(T1 x T2) Jellse: T = T1 *felttel T2 30. Plda. Tegyk fel, hogy adott ruflesget tbb raktr trol, a raktrozott mennyisget egy RAKTR (raktrkd, mennyisg) tblban, a vevk ignyeit pedig egy VEV (vevkd, igny) tblban tartjuk nyilvn. Az eladsi ajnlatok egy AJNLAT (raktrkd, mennyisg, vevkd, igny) tblba generlhatk az albbi theta-join mvelettel: AJNLAT = RAKTR *ignymennyisg VEV

4.4. Multihalmazok
Multihalmazon olyan halmazt rtnk, amely ismtld elemeket is tartalmazhat (pldul {1, 3, 4} halmaz, de {1, 3, 1, 4} mr multihalmaz). Ha a relcit multihalmaznak tekintjk, akkor ezzel az adattblban azonos sorokat is megengednk. A relcis algebra mveletei multihalmazokra is rtelmezhetk, ennek rszleteire itt nem trnk ki. Az adatbzis-kezel rendszerek ltalban multihalmazokkal dolgoznak, s csak kln krsre vgzik el az azonos sorok kiszrst. Ennek okai a kvetkezk: - Az adattbla fizikai trolsa termszetes mdon megengedi az azonos sorokat. - Egyes relcis mveletek (pldul uni, projekci) lnyegesen gyorsabbak, ha nem kell kiszrni az azonos sorokat. - Egyes esetekben a multihalmaz szolgltat korrekt eredmnyt. Pldul, ha a Dolgoz (nv, adszm, lakcm, fizets) tblra a Dolg1 = nv,fizets(Dolgoz) projekcit vgezzk, akkor felteheten nem kvnjuk, hogy kt azonos nev s fizets szemly sszeolvadsra kerljn. A gyakorlatban teht minden adatbzis-mveletnl el kell dnteni, hogy a relcis modell szerint halmazokkal, vagy (az RDBMS szmra termszetesebb) multihalmazokkal kvnunk dolgozni, s ennek megfelelen kell a mveleteket vgrehajtani.

32

5. A relcis adatbzis normalizlsa


Ha az egyed-kapcsolat modellt helyesen rjuk fel, akkor ltalban optimlis (redundanciamentes) relcis adatbzis smt kapunk. Semmi garancia nincs azonban arra, hogy az E-K modell optimlis, ezrt szksg van a relcismk formlis vizsglatra, amely a redundancikat detektlja s az optimalizlst lehetv teszi (normalizls). Ezen krdskr elmleti megalapozsval s gyakorlati mdszereivel foglalkozik ez a fejezet.

5.1. Redundns adattblk


Tekintsk egy vllalat dolgozit nyilvntart Dolgoz (nv, adszm, cm, osztlykd, osztlynv, vezAdszm) smt, ahol vezAdszm a vllalati osztly vezetjnek adszmt jelenti. A megfelel tbla a 16. brn lthat. Elny: egyetlen tblban a dolgozk s osztlyok adatai is nyilvntartva. Htrny: redundancia, mivel osztlynv, vezAdszm tbb helyen szerepel. Nv Kovcs Tth Kovcs Trk Kiss Takcs Fekete Nagy Adszm 1111 2222 3333 8888 4444 5555 6666 7777 Cm Osztlykd Pcs, Vr u.5. 2 Tata, T u.2. 1 Vc, Rka u.1. 1 Pcs, Sas u.8. 2 Ppa, K tr 2. 3 Gyr, Pap u. 7. 1 Pcs, Hegy u.5. 3 Pcs, Cs u.25. 3 Osztlynv Tervezsi Munkagyi Munkagyi Tervezsi Kutatsi Munkagyi Kutatsi Kutatsi VezAdszm 8888 3333 3333 8888 4444 3333 4444 4444

16. bra. Dolgozk nyilvntartst tartalmaz redundns tbla A redundancia aktualizlsi anomlikat okozhat: (i) Mdosts esetn: - Ha egy osztly neve vagy vezetje megvltozik, tbb helyen kell a mdostst elvgezni, ami hibkhoz vezethet. (ii) j felvtel esetn: - j dolgoz felvtelnl elfordulhat, hogy az osztlynevet mshogy adjk meg (pldul Tervezsi helyett tervezsi vagy Tervez). - Ha j osztly ltesl, amelynek mg nincsenek alkalmazottai, akkor ennek adatait csak gy tudnnk felvenni, ha a nv, adszm, cm mezkhz NULL rtket rendelnnk (ami nem megengedett, mert adszm kulcs). (iii) Trls esetn: - Ha egy osztly valamennyi dolgozjt trljk, akkor az osztlyra vonatkoz informcik is elvesznek.

33

Megolds: a relcisma felbontsa kt smra (dekompozci): Dolg (nv, adszm, cm, osztlykd) Oszt (osztlykd, osztlynv, vezAdszm) A sztvlasztott tblk a 17. brn lthatk. Nv Kovcs Tth Kovcs Trk Kiss Takcs Fekete Nagy Osztlykd 1 2 3 Adszm 1111 2222 3333 8888 4444 5555 6666 7777 Cm Pcs, Vr u.5. Tata, T u.2. Vc, Rka u.1. Pcs, Sas u.8. Ppa, K tr 2. Gyr, Pap u. 7. Pcs, Hegy u.5. Pcs, Cs u.25. VezAdszm 3333 8888 4444 Osztlykd 2 1 1 2 3 1 3 3

Osztlynv Munkagyi Tervezsi Kutatsi

17. bra. Redundancia megszntetse a tbla felbontsval Megjegyzs: Ha helyesen felrt E-K modellbl indulunk ki, amely a Dolgoz s Osztly entitsok kztt kt kapcsolatot (dolgozik s vezeti) tartalmaz, akkor eleve a fenti kt tblhoz jutunk. A tovbbiakban a relcisma formlis vizsglatval vlaszt adunk a kvetkez krdsekre: - mikor van redundancia egy tblban, - hogyan kell ezt a tbla felbontsval megszntetni.

5.2. Funkcionlis fggsg


31. definci. Legyen R(A1,...,An) egy relcisma, s P, Q az {A1,...,An} attribtumhalmaz rszhalmazai. P-tl funkcionlisan fgg Q (jellsben P Q), ha brmely R feletti T tbla esetn valahnyszor kt sor megegyezik P-n, akkor megegyezik Q-n is, vagyis brmely ti T s tj T esetn ti(P) = tj(P) => ti(Q) = tj(Q) Elnevezsek: - A P Q fggst trivilisnak nevezzk, ha Q P, ellenkez esetben nem trivilis. - A P Q fggst teljesen nemtrivilisnak nevezzk, ha Q P = 0. A gyakorlatban ltalban teljesen nemtrivilis fggsgeket adunk meg. 32. Plda. A korbban vizsglt Dolgoz (Adszm, Nv, Cm, Osztlykd, Osztlynv, VezAdszm)

34

tbla jellemz fggsgei: f1: {Adszm} {Nv, Cm, Osztlykd} f2: {Osztlykd} {Osztlynv, VezAdszm} Plda tovbbi fggsgekre: f3: {Adszm} {Osztlynv} f4: {Cm, Osztlykd} {VezAdszm} 33. Plda. Egy szmla tteleit tartalmaz SZMLA (cikkszm, megnevezs, egysgr, mennyisg, sszeg) tbla esetn az albbi fggsgeket llapthatjuk meg: {cikkszm} {megnevezs, egysgr} {egysgr, mennyisg} {sszeg} Megjegyzsek: - A fggsg nem az aktulis tbla, hanem a sma tulajdonsga. Ha az attribtumhalmazra megllaptunk egy funkcionlis fggsget, akkor ez tulajdonkppen egy felttelt jelent az adattblra nzve. Ha pl. Adszm Cm funkcionlis fggsg fennll, akkor egy szemlyhez tbb lakcmet nem tudunk trolni. - A "funkcionlis" kifejezs arra utal, hogy ha P Q fennll, akkor ltezik egy dom(P) dom(Q) fggvny, amely P minden konkrt rtkhez egyrtelmen meghatrozza Q rtkt. Ez a fggvny ltalban csak elmletileg ltezik, pl. Adszm Cm fggs esetn nem tudunk olyan algoritmust adni, amely az adszmbl a lakcmet ellltan. A SZMLA tbla esetn azonban az {egysgr, mennyisg} {sszeg} fggsg mr szmthat, mivel egysgr*mennyisg = sszeg teljesl. 34. llts. Egy K ( A) attribtumhalmaz akkor s csak akkor szuperkulcs, ha KA. Bizonyts: a kulcs s a funkcionlis fggs defincija alapjn nyilvnval. 35. Definci. Relcisma s adattbla fogalma fggsg alapjn: Relcismnak neveznk egy R = (A, F) prt, ahol A = {A1,...,An} attribtumhalmaz, s F = {f1,...,fm} az A-n definilt funkcionlis fggsgek egy halmaza (fi: PiQi, i=1,...,m). A fggsgi halmaz olyan kvetelmnyrendszert definil, amit eddig csak az attribtumok informlis lersval adhattunk meg. Adattbla (relci) R felett: T dom(A1) X ... X dom(An), amely eleget tesz az F-beli fggsgeknek. Jells: R = (A, F) helyett tovbbra is hasznljuk az egyszerbb R(A) jellst, ha a fggsgeket nem kvnjuk hangslyozni. 36. Plda. A Dolgoz smhoz tartoz fggsgi halmaz FD = {f1, f2}. Az f3 s f4 fggsgeket nem szksges hozzvenni, mert rezheten kvetkezmnyei f1 s f2-nek.
Krds, hogy adott fggsgekbl levezethetk-e jabb fggsgek. Erre vonatkoz, knnyen bizonythat alapszablyok az Armstrong-aximk: A1. Reflexivits: Ha Y X, akkor XY. Bizonyts: ti(X) = tj(X) => ti(Y) = tj(Y) triv. A2. Bvts: Ha XY, akkor X U Z Y U Z. Bizonyts: ti(X U Z) = tj(X U Z) => ti(X) = tj(X) s ti(Z) = tj(Z) => ti(Y) = tj(Y) s ti(Z) = tj(Z) => ti(Y U Z) = tj(Y U Z).

35

A3. Tranzitivits: Ha XY s YZ, akkor XZ. Bizonyts: ti(X) = tj(X) => ti(Y) = tj(Y) => ti(Z)=tj(Z). 37. Definci. Az R(A, F) feletti f1,..., fn fggsgekbl kvetkezik az f fggsg, ha nem lehet olyan T tblt megadni R felett, amelyre f1,..., fn teljesl, de f nem. 38. llts. Az Armstrong-aximk segtsgvel egy adott fggsgi halmazbl kvetkez brmely fggsg formlisan levezethet. (Levezetsen az aximk vges sokszori alkalmazst rtjk a formlis logika szablyai szerint.) Bizonyts: itt nem trgyaljuk.

A funkcionlis fggs defincija alapjn knnyen belthatk az albbi szablyok: Sztvgsi szably: ha X{B1,...,Bk} akkor XB1, ..., XBk (BiA attribtum, i=1,...,k). Egyestsi szably: ha XB1, ..., XBk, akkor X{B1,...,Bk} De vigyzat! A fentiek fordtottja mr nem igaz, vagyis ha {B1,...,Bk} X, ebbl nem kvetkezik, hogy B1 X, ..., Bk X.
A sztvgsi szably bizonytsa Armstrong-aximkkal: reflexivits miatt {B1,...,Bk}Bi, tranzitivitsbl XBi. Az egyestsi szably bizonytshoz beltjuk, hogy XY s XZ akkor X (Y U Z). Ugyanis a bvts miatt (X U X) (Y U X) s (X U Y) (Z U Y), innen tranzitivitssal X (Y U Z).

39. Definci. Egy X attribtumhalmaz lezrtja az F fggsgi halmaz szerint X+ = {Ai | XAi}, vagyis az sszes X-tl fgg attribtumokbl ll. Pontosabban: X+ azon Ai attribtumokbl ll, amelyekre az XAi fggsg F-bl levezethet. Algoritmus X+ szmtsra. Az X = X(0) X(1) ... X(n) = X+ halmazsorozatot kpezzk. X(i)-bl X(i+1) ellltsa: keressnk olyan F-beli PQ fggsget, amelyre P X(i), de Q mr nem rsze X(i)-nek! Ha tallunk ilyet, akkor X(i+1) := X(i) U Q, ha nem, akkor X(i) = X+, vagyis elrtk a lezrtat. Mivel A vges halmaz, gy az eljrs vges sok lpsben vget r. Knnyen belthat, hogy a fenti mdon generlt X+ halmaz brmely eleme fgg X-tl. Annak bizonytstl, hogy X+ az sszes X-tl fgg elemet tartalmazza, itt eltekintnk. 40. Plda. Tekintsk az R=(Z,F) smt, ahol Z = {A, B, C, D, E}, s F tartalmazza az albbi fggsgeket:
{C} {A} {B} {C,D} {D,E} {C}

Hatrozzuk meg a {B}+ halmazt!


X(0) = {B} X(1) = {B} U {C,D} = {B,C,D} X(2) = {B,C,D} U {A,C,D} = {A,B,C,D} X(3) = X(2), teht {B}+ = {A,B,C,D} fggsgek: {B} fggsgek: {B} {C} fggsgek: {B} {C} {C,D} {C,D} {A} {C,D} {A}

36

41. llts. Egy K attribtumhalmaz akkor s csak akkor szuperkulcs, ha K+=A. Bizonyts: belthat, hogy KA akkor s csak akkor teljesl, ha K+=A. Kulcs meghatrozsa. Elszr legyen K=A, ez mindig szuperkulcs. K-bl sorra elhagyunk attribtumokat, s mindig ellenrizzk K+=A teljesl-e.
A fenti R=(Z, F) sma esetn jl lthat, hogy {B, E} szuperkulcs. Most vizsgljuk meg, hogy Z-bl B-t illetve E-t elhagyva szuperkulcsot kapunk-e: {A, C, D, E}+ = {A, C, D, E} {A, B, C, D}+ = {A, B, C, D} Egyik esetben sem kaptunk szuperkulcsot, amibl az kvetkezik, hogy minden kulcsnak tartalmaznia kell B-t s E-t, vagyis az egyetlen kulcs {B,E}. 42. Definci. Az F fggshalmaz lezrtja az sszes F-bl levezethet fggst tartalmazza. Jellse F+. 43. Definci. Az F+ egy rszhalmazt bzisnak nevezzk, ha belle F valamennyi fggse levezethet. 44. llts. F+ = {XY | Y X+}, vagyis F+ pontosan azokbl az XY fggsgekbl ll, amelyekre Y rszhalmaza X+-nak. Bizonyts. Belthat, hogy Y X+ akkor s csak akkor teljesl, ha XY. Algoritmus F+ meghatrozsra: 1. Vegyk az A attribtumhalmaz sszes rszhalmazt. 2. Minden X rszhalmazhoz lltsuk el X+ -t. 3. Valamennyi Y X+ -ra az XY fggsget felvesszk F+-ba.

5.3. Felbonts (dekompozci)


45. Definci. Relcisma felbontsa (dekompozcija). Legyen R(A) egy relcisma, s X,Y A gy, hogy X U Y = A. Ekkor az R(A) sma felbontsa X, Y szerint R1(X) s R2(Y). Az R sma feletti T tblt az R1 s R2 feletti T1, T2 tblkkal helyettestjk, ahol T1=X(T) s T2=Y(T), vagyis T1 az X-en kvli oszlopok trlsvel s az azonos rekordok kiszrsvel addik, T2 hasonlan. 46. Definci. Egy felbontst hsgesnek neveznk, ha brmely R feletti T tbla esetn T=T1*T2. Vagyis, a felbonts utn add tblkat termszetes join mvelettel sszekapcsolva az eredeti tblt kapjuk vissza. Knnyen belthat, hogy tetszleges felbonts esetn T T1*T2 teljesl. A hsgessg teht azt jelenti, hogy az sszekapcsols nem llt el fls sorokat. Hsges felbontsra a 17. brn lthattunk pldt.
A hsges helyett a vesztesgmentes (lossless) kifejezs is hasznlatos, amely valjban nem sorok elvesztsre, hanem informcivesztsre utal. 47. Plda. Nem hsges felbontst kapunk, ha a Dolgoz tblt a VezAdszm mentn bontjuk fel: Dolg (Nv, Adszm, Cm, VezAdszm) Oszt (Osztlykd, Osztlynv, VezAdszm) Ugyanis a Dolgoz definilsakor nem ktttnk ki VezAdszm Osztlykd fggst, ezzel megengedtk, hogy egy szemly tbb osztlynak is vezetje legyen. Ha pldul Takcs

37

dolgoz az 1-es osztlyon dolgozik, de ennek vezetje azonos az 5-s osztly vezetjvel, akkor a Dolg*Oszt tblban Takcs ktszer fog szerepelni: egyszer az 1-es, egyszer az 5-s osztly dolgozjaknt (18. bra). A Dolgoz tbla: Nv Adszm Cm Takcs 5555 Gyr, Pap u. 7. Rcz 9999 Vc, Domb u. 1. A Dolg s Oszt tblk: Nv Takcs Rcz Osztlykd 1 5 Adszm 5555 9999 Cm VezAdszm Gyr, Pap u. 7. 3333 Vc, Domb u. 1. 3333 VezAdszm 3333 3333 Osztlykd 1 5 1 5 Osztlynv Munkagyi Pnzgyi Munkagyi Pnzgyi VezAdszm 3333 3333 3333 3333 Osztlykd 1 5 Osztlynv Munkagyi Pnzgyi VezAdszm 3333 3333

Osztlynv Munkagyi Pnzgyi

Az egyestett Dolg*Oszt tbla: Nv Adszm Cm Takcs 5555 Gyr, Pap u. 7. Takcs 5555 Gyr, Pap u. 7. Rcz 9999 Vc, Domb u. 1. Rcz 9999 Vc, Domb u. 1.

18. bra. Nem hsges felbonts kvetkezmnye

A gyakorlatban rendszerint az albbi ttel alapjn vgznk dekompozcit: 48. Ttel (Heath ttele). Ha az R(A) smnl A = B U C U D, ahol B, C s D diszjunkt attribtum-rszhalmazok s C D, akkor az R1(B U C), R2(C U D) felbonts hsges. Bizonyts: Legyen T egy tetszleges R feletti tbla, T1 s T2 a megfelel sztbontott tblk. T T1*T2 nyilvnval, ezrt csak azt kell megmutatni, hogy T1*T2 T. Legyen t T1*T2., Ekkor kell hogy legyen olyan t1 T1 s t2 T2, amelyek egyestseknt t elllt, vagyis t1(C) = t2(C). Kell, hogy legyenek tovbb olyan u1, u2 sorok T-ben, amelyekbl projekcival t1, t2 szrmaztathat, vagyis u1(B U C) = t1 s u2(C U D) = t2. Mivel u1(C) = u2(C), gy a C D fggsg miatt u1(D) = u2(D). Teht a u1 = t, vagyis t szerepel T-ben. 49. Plda. A Dolgoz (nv, adszm, cm, osztlykd, osztlynv, vezAdszm) tbla esetn az {osztlykd} {osztlynv, vezAdszm} fggsg teljesl. Ezrt ha B = {nv, adszm, cm}, C = {osztlykd}, D = {osztlynv, vezAdszm}, akkor a Dolg (nv, adszm, cm, osztlykd) Oszt (osztlykd, osztlynv, vezAdszm) felbonts Heath ttele alapjn hsges lesz. 50. Plda. Tekintsk az R(e, f, g, h) relcismt, ahol {e, f} g. Ekkor a B, C, D attribtum rszhalmazokat vlasszuk gy, hogy B = h, C = {e, f}, D = g. Mivel C D, gy Heath ttele alapjn az R1(e, f, h), R2(e, f, g) felbonts hsges.

38

A fggsgeket is figyelembe vve, egy R=(A,F) relcisma felbontsa X, Y szerint R1=(X,F1) s R2=(Y,F2), ahol F1 gy vlasztand meg, hogy F1+ az F+ azon rszhalmazval legyen egyenl, amely csak X-beli attribtumokat tartalmaz, F2 hasonlan. Egy R=(A, F) sma R1=(X, F1), R2=(Y, F2) felbontst fggsgrznek nevezzk, ha F1 U F2 az eredeti F bzist adjk. Egy hsges dekompozci nem felttlenl fggsgrz. Ha pldul a vllalat azzal a szokatlan felttellel lne, hogy minden dolgoz a hozz legkzelebb lak osztlyvezethz kell hogy tartozzon, akkor a Dolgoz tblban Cm VezAdszm fggs lp fel. A dekompozci sorn ez a fggsg elvsz, de ez nem vltoztat azon a tnyen, hogy - a hsgessg miatt - a Dolg s Oszt tblkbl termszetes join mvelettel mindig visszallthat az eredeti Dolgoz tbla.

5.4. Normlformk
1. normlforma (1NF)
51. definci. Egy relcisma 1NF-ben van, ha az attribtumok rtktartomnya csak egyszer (atomi) adatokbl ll (nem tartalmaz pldul listt vagy struktrt). Mivel az 1NF felttel teljeslst mr a relcis modell defincijnl kiktttk, ezrt minden smt eleve 1NF-nek tteleznk fel.

2. normlforma (2NF)
52. Definci. Legyen X,Y A, s XY. Azt mondjuk, hogy X-tl teljesen fgg Y, ha X-bl brmely attribtumot elhagyva a fggsg mr nem teljesl, vagyis brmely X1 X esetn X1Y mr nem igaz. Megjegyzs: Ha K kulcs, akkor A teljesen fgg K-tl. 53. Definci. Egy attribtumot elsdleges attribtumnak neveznk, ha szerepel a relcisma valamely kulcsban, ellenkez esetben msodlagos attribtum. Vagyis, ha a sma kulcsai K1,...,Kr, akkor K = K1 U...U Kr az elsdleges attribtumok halmaza, AK a msodlagos attribtumok halmaza. 54. Definic: Egy R=(A,F) relcisma 2NF-ben van, ha minden msodlagos attribtum teljesen fgg brmely kulcstl. Kvetkezmnyek: - Ha minden kulcs egy attribtumbl ll, akkor a sma 2NF-ben van. Plda: Dolgoz tbla. - Ha a smban nincs msodlagos attribtum, akkor 2NF-ben van. Plda: FUVAR (gkvez, rendszm, indul, rkezik) Ha a sma nincs 2NF-ben, akkor a tblban redundancia lphet fel. Tegyk fel ugyanis, hogy valamely K kulcs L rszhalmaztl fgg a msodlagos attribtumok egy B halmaza (LB). Ekkor a tblban tbb olyan sor lehet, amelyek L-en megegyeznek, gy ezek szksgkppen B-n is megegyeznek, ami a B-rtkek redundns trolst eredmnyezi (lsd az albbi pldt). 2NF-re hozs. Ha valamely K kulcsra L K s LB (itt B az sszes L-tl fgg msodlagos attribtum halmaza), akkor a smt felbontjuk az LB fggsg szerint. Legyen

39

C = A (L U B), ekkor az R(A) smt az R1(C U L) s R2(L U B) smkkal helyettestjk. Heath ttele alapjn a felbonts hsges. 55. Plda. Tegyk fel, hogy egy vllalat dolgozi klnfle projekteken dolgoznak meghatrozott heti raszmban. Ezt a DOLGPROJ (Adszm, Nv, Projektkd, ra, Projektnv, Projekthely) smval tartjuk nyilvn, a megfelel tbla a 19. brn lthat. Adszm 1111 2222 4444 1111 1111 8888 5555 6666 8888 7777 Nv Projektkd Kovcs P2 Tth P1 Kiss P1 Kovcs P1 Kovcs P5 Trk P2 Takcs P5 Fekete P5 Trk P3 Nagy P3 ra 4 6 5 2 8 12 3 4 4 14 Projektnv Adatmodell Hardware Hardware Hardware Teszt Adatmodell Teszt Teszt Software Software Projekthely Veszprm Budapest Budapest Budapest Szeged Veszprm Szeged Szeged Veszprm Veszprm

19. bra. A DOLGPROJ sma feletti tbla Fggsgek: Adszm Nv Projektkd {Projektnv, Projekthely} {Adszm, Projektkd} ra A smban {Adszm, Projektkd} kulcs, mivel ettl minden attribtum fgg, ugyanakkor akr Adszm-ot, akr Projektkd-ot elhagyva ez mr nem teljesl. A sma nincs 2NF-ben, mert pl. Nv csak Adszm-tl fgg, vagyis nem fgg teljesen a kulcstl. 2NF-re hozs: 1. lps: dekompozcival a Adszm Nv fggsg levlasztsa: Dolg (Adszm, Nv) DPROJ (Adszm, Projektkd, ra, Projektnv, Projekthely) A DPROJ sma a Projektkd {Projektnv, Projekthely} fggsg miatt mg mindig nincs 2NF-ben.

40

2. lps: Dolg ( Adszm, Nv ) PROJ ( Projektkd, Projektnv, Projekthely ) DP ( Adszm, Projektkd, ra ) Itt mr mindhrom sma 2NF-ben van (20. bra). Adszm 1111 2222 4444 8888 5555 6666 7777 Projektkd P1 P2 P3 P5 Adszm 1111 2222 4444 1111 1111 8888 5555 6666 8888 7777 Nv Kovcs Tth Kiss Trk Takcs Fekete Nagy Projektnv Hardware Adatmodell Software Teszt Projektkd P2 P1 P1 P1 P5 P2 P5 P5 P3 P3 Projekthely Budapest Veszprm Veszprm Szeged ra 4 6 5 2 8 12 3 4 4 14

20. bra. A DOLGPROJ sma normalizlsa utn keletkez tblk

41

3. normlforma (3NF)
56. Definci. Legyen X,Z A, s XZ. Azt mondjuk, hogy X-tl tranzitvan fgg Z, ha van olyan Y A, amelyre XY s YZ, de X nem fgg Y-tl, s az YZ fggs teljesen nemtrivilis. Ellenkez esetben Z kzvetlenl fgg X-tl. Megjegyzs: Az "X nem fgg Y-tl" s az "YZ fggs teljesen nemtrivilis" kiegszt felttelek nem csak a trivilis esetek kiszrshez kellenek, hanem a ksbbi lltsok szempontjbl is lnyegesek. 57. Definci. Egy R=(A,F) relcisma 3NF-ben van, ha minden msodlagos attribtuma kzvetlenl fgg brmely kulcstl. Kvetkezmny: Ha a smban nincs msodlagos attribtum, akkor 3NF-ben van. Ha a sma nincs 3NF-ben, akkor a tblban redundancia lphet fel. Tegyk fel ugyanis, hogy valamely K kulcstl tranzitvan fgg a msodlagos attribtumok egy B halmaza, vagyis valamely Y attribtumhalmazra KY s YB, de K nem fgg Y-tl s Y B res. Mivel Y-tl nem fgg K, gy Y nem szuperkulcs, vagyis a tblban tbb olyan sor lehet, amelyek Yon megegyeznek. Ezek a sorok az YB fggsg miatt szksgkppen B-n is megegyeznek, ami a B-rtkek redundns trolst eredmnyezi (lsd az albbi pldt). 3NF-re hozs. Ha valamely K kulcsra KYB tranzitv fggs fennll, akkor a smt felbontjuk az YB fggsg szerint (itt B legyen az sszes Y-tl fgg msodlagos attribtum halmaza). Legyen C = A (Y U B), ekkor az R(A) smt az R1(C U Y) s R2(Y U B) smkkal helyettestjk. Heath ttele alapjn a felbonts hsges. 58. Plda. Vllalat dolgozit s az osztlyokat tartjuk nyilvn az albbi smban: Dolgoz ( Nv, Adszm, Cm, Osztlykd, Osztlynv, VezAdszm ) Fggsgek: Adszm {Nv, Cm, Osztlykd} Osztlykd {Osztlynv, VezAdszm} A sma 2NF-ben van, mert egyetlen kulcs az Adszm, amely egyelem. Ugyanakkor nincs 3NF-ben, mert pldul Osztlynv tranzitvan fgg Adszmtl: Adszm Osztlykd Osztlynv. 3NF-re hozs: dekompozci a fggsgek szerint: Dolg (Adszm, Nv, Cm, Osztlykd) Oszt (Osztlykd, Osztlynv, VezAdszm) 59. llts. Ha egy R=(A,F) relcisma 3NF-ben van, akkor 2NF-ben is van. Bizonyts (indirekt). Tegyk fel, hogy R 3NF-ben van, s mg sincs 2NF-ben. Ez utbbi azt jelenti, hogy valamely Ai msodlagos attribtum nem teljesen fgg valamely K kulcstl, vagyis van olyan L K, amelyre LAi. Ekkor viszont K-tl tranzitven fgg Ai, ugyanis KLAi, de L-tl nem fgg K (mivel K kulcs, teht minimlis), valamint Ai nem eleme L-nek (mivel msodlagos attribtum).
A 3NF egy ekvivalens megfogalmazst jelenti az albbi llts: 60. llts. Egy R=(A,F) relcisma akkor s csak akkor van 3NF-ben, ha brmely nemtrivilis LAi fggs esetn L szuperkulcs, vagy Ai elsdleges attribtum.

42

Bizonyts (indirekt): a). Tegyk fel, hogy R 3NF-ben van, de van olyan nemtrivilis LAi fggs, hogy L nem szuperkulcs, s Ai msodlagos attribtum. Ekkor viszont KLAi tranzitv fggs van, vagyis ellentmondsra jutottunk. b). Tegyk fel, hogy R-re teljesl a fenti felttel, de nincs 3NF-ben, vagyis valamely K kulcsra s Ai msodlagos attribtumra KLAi tranzitv fggs teljesl. Mivel K nem fgg L-tl, gy L nem szuperkulcs, ezrt az LAi fggs ellentmond a felttelnek.

Boyce-Codd normlforma (BCNF)


61. Definci. Egy R=(A,F) relcisma BCNF-ben van, ha brmely nemtrivilis LB fggs esetn L szuperkulcs. 62. llts. Ha egy R=(A,F) relcisma BCNF-ben van, akkor 3NF-ben is van. Bizonyts (indirekt): Tegyk fel, hogy a sma BCNF-ben van, de nincs 3NF-ben, vagyis van olyan KLB tranzitv fggs, ahol K kulcs. A tranzitv fggs defincijbl addan ekkor L-tl nem fgg K (ezrt L nem szuperkulcs), tovbb LB nemtrivilis, ami ellentmond a BCNF felttelezsnek. Ha a sma nincs BCNF-ben, akkor a tblban redundancia lphet fel. Tegyk fel ugyanis, hogy LB s L nem szuperkulcs. Ezrt a tblban tbb olyan sor lehet, amelyek Len megegyeznek, s a fggsg miatt szksgkppen B-n is megegyeznek, ami a B-rtkek redundns trolst eredmnyezi . BCNF-re hozs. Ha LB teljesen nemtrivilis fggs s L nem szuperkulcs, akkor a smt felbontjuk az LB fggsg szerint. Legyen C = A (L U B), ekkor az R(A) smt az R1(C U L) s R2(L U B) smkkal helyettestjk. Heath ttele alapjn a felbonts hsges. A gyakorlatban ha egy sma 3NF-ben van, akkor ltalban BCNF-ben is van. Addnak azonban kivtelek, ilyen az albbi plda. 63. Plda. Tegyk fel, hogy vrosi lakcmeket tartunk nyilvn, irnytszmmal egytt. Ez azt jelenti, hogy egy vroshoz tbb irnytszm tartozhat, de egy adott irnytszmhoz csak egy vros. (Falvak esetn ez utbbi mr nem teljeslne.) A relcisma: CM (Vros, Utca, Hzszm, Irnytszm) Fggsgek: {Vros, Utca, Hzszm} Irnytszm Irnytszm Vros Belthat, hogy a sma kt kulccsal rendelkezik: {Vros, Utca, Hzszm} {Irnytszm, Utca, Hzszm} A sma 3NF-ben van, ugyanis nincs msodlagos attribtuma. Nincs azonban BCNF-ben az Irnytszm Vros fggs miatt.

43

BCNF-re hozs: dekompozci a fggsg szerint: CM1 (Irnytszm, Utca, Hzszm) CM2 (Irnytszm, Vros) A fenti felbonts taln erszakoltnak tnik, pedig trolhely megtakartst jelenthet, ha tbb szzezer cmet kell nyilvntartani viszonylag kevs vrosban. Az Irnytszm ugyanis csak 4 karakter, mg a Vros rszre legalbb 20 karaktert kell fenntartani. Ennek ellenre vitathat, hogy rdemes-e a felbontst elvgezni, mivel nehzkess teszi a cmek kezelst.

4. normlforma (4NF)
64. Plda. Tekintsk a RENDELHET (Nagyker, Kisker, ru) smt, ahol a tbla egy sora adott kiskereskednek adott nagykereskedtl beszerezhet rufajtjt jelenti. Ha egy kiskeresked adott nagykereskedvel kapcsolatban ll, akkor a nagykeresked sszes rujt nyilvntartsba veszi (21. bra). Ez azt jelenti, hogy ha valamely (Ni, Kj) s (Ni, Ak) prok szerepelnek a tblban, akkor az (Ni, Kj, Ak) hrmas is kell hogy szerepeljen. Kulcs: az sszes attribtum. Mivel nincs funkcionlis fggs, ezrt a sma BCNF-ben van, ugyanakkor a tbla erteljesen redundns. A RENDELHET tbla: Nagyker Kisker ru N1 K1 A1 N1 K1 A2 N1 K1 A3 N1 K2 A1 N1 K2 A2 N1 K2 A3 N2 K2 A1 N2 K2 A4 N2 K3 A1 N2 K3 A4 A SZLLT tbla: Nagyker Kisker N1 K1 N1 K2 N2 K2 N2 K3 A KNL tbla: Nagyker N1 N1 N1 N2 N2 ru A1 A2 A3 A1 A4

21. bra. A RENDELHET tbla s felbontsa 65. definci. Legyen K, L A, s legyen M = A - (K U L). Azt mondjuk, hogy K-tl tbbrtken fgg L, jellsben KL, ha brmely R feletti T tblban ha kt sor megegyezik K-n, akkor a kt sor kombincija is szerepel T-ben. Ez pontosabban azt jelenti, hogy ha a ti, tj sorokra ti(K) = tj(K), akkor van olyan t sor, amelyre az albbiak teljeslnek: - t(K) = ti(K) = tj(K) - t(L) = ti(L) - t(M) = tj(M) Szemlletesen:
K L M ti kkkkk lllll tj kkkkk mmmmm t kkkkk lllll mmmmm

44

Jl lthat, hogy a fenti pldban NagykerKisker tbbrtk fggs van. 66. Definci. A KL fggs nemtrivilis, ha K L = 0 s K U L A. (Ugyanis K U L = A esetn M res, s t = ti vlasztsval a felttel mindig teljesl.) llts. Ha KL, akkor KL. Bizonyts: t = tj vlasztssal nyilvnval. 67. llts. Ha KL, akkor KM. Bizonyts: a szimmetribl nyilvnval. Megjegyzs: KL tulajdonkppen azt fejezi ki, hogy L s M fggetlenek olyan rtelemben, hogy K adott rtke esetn L s M rtkei az sszes kombinciban elfordulnak. 68. Ttel. Az R(A) relcismnl legyen A = B U C U D, ahol B, C s D diszjunktak. R felbontsa az R1(B U C), R2(C U D) smkra akkor s csak akkor hsges, ha C D fennll. (Fagin ttele.) Bizonyts (direkt): a) Ha a felbonts hsges, azaz T=T1*T2, akkor a tbbrtk fggs a termszetes join mvelet defincijbl addik: t1(B U C) T1, hasonlan t2(C U D) T2, ezrt szksgkppen t T. b) Ha C D, akkor a hsgessget kell bizonytanunk. Legyen t1T1 s t2T2, amelyekre t1(C) = t2(C). Ekkor a t1 s t2 egyestsvel elll rekord a fggsg miatt szerepel T-ben, vagyis T1*T2 T. Ugyanakkor T T1*T2 nyilvnval, gy T = T1*T2. 69. Definci. Egy relcisma 4NF-ben van, ha minden nemtrivilis KL fggs esetn K szuperkulcs. 70. llts. Ha egy R=(A,F) sma 4NF-ben van, akkor BCNF-ben is van. Bizonyts (direkt). Legyen KL nemtrivilis fggs, beltjuk, hogy K szuperkulcs. Kt eset lehetsges: - Ha K U L = A, akkor KL miatt K szuperkucs. - Ha K U L A, akkor legyen L1 = LK, ekkor KL1, ezrt KL1 nemtrivilis, amibl a 4NF tulajdonsg miatt kvetkezik, hogy K szuperkulcs. Ha egy sma nincs 4NF-ben, akkor a tbla redundancit tartalmazhat. Ha ugyanis KL, s K nem szuperkulcs, akkor a tblban tbb olyan sor lehet, amely K-n megegyezik, s ezekben a sorokban az L s M-rtkek redundnsan szerepelnek. 4NF-re hozs: dekompozci a fggsg szerint: ha KL nemtrivilis fggs, s K nem szuperkulcs, akkor az R(A) smt felbontjuk az R1(K U L) s R2(K U M) smkra. Ez hsges dekompozci a 68. ttel szerint. A fenti RENDELHET sma az albbi felbontssal hozhat 4NF-re (21. bra): SZLLT (Nagyker, Kisker) KNL (Nagyker, ru)

45

Normlformk sszefoglalsa
Az 1NF-re hozs a relcis modellnl ktelez. A tovbbi normlformk egyre szigorbb feltteleket rnak el (2NF <= 3NF <= BCNF <= 4NF), amelyek kikszblik a redundancit s az aktualizlsi anomlikat. Az ezek szerinti normalizls clszer, de nem ktelez. A gyakorlatban azt kell mrlegelni, hogy a redundancia s az anomlik mennyire jelentenek slyos veszlyt, indokolt-e azok megszntetsvel a tblk szmt nvelni (dekompozci). Erre mutat r az albbi plda. 71. Plda. Tegyk fel, hogy egy biztost trsasg az gyfelei lakcme mellett azt is nyilvntartja, hogy hny laksos hzban laknak: GYFL (adszm, nv, szldtum, lakcm, laksszm) A sma nincs 3NF-ben a lakcm laksszm fggs miatt. Ez azonban csak akkor okoz redundancit, ha a biztostnak tbb gyfele lakik ugyanabban a hzban. Kt eset lehetsges: a) Ha ritkn fordul el, hogy egy hzban tbb gyfl legyen, s a laksszm nyilvntartsnak csak statisztikai jelentsge van, akkor nem rdemes felbontani a tblt. b) Ha viszont a biztost trsasg ellenrizni kvnja, hogy az egy hzban lakk azonos laksszmot adnak-e meg (mert pldul ettl is fgghet a biztosts sszege), akkor a felbonts indokolt.

Adatbzis tervezs sszefoglalsa


Az adatbzis tervezs folyamata hrom f lpsbl ll: 1. Egyed-kapcsolat modell felrsa. 2. Relcis adatbzis sma felrsa. Az 1NF-re hozs mr itt elvgzend. 3. Relcismk normalizlsa. 4. Szksg esetn az egyed-kapcsolat modell mdostsa a normalizls szerint.

46

6. Az SQL nyelv
SQL = Structured Query Language (= struktrlt lekrdez nyelv). A relcis adatbziskezels szabvnyos nyelve. Nem algoritmikus nyelv, de algoritmikus nyelvekbe bepthet (begyazott SQL). 1976: SEQUEL (= Structured English QUEry Language) az SQL eredeti vltozata, IBM-nl fejlesztettk ki. 1981: Oracle 2 (SQL alap RDBMS, nagygpre). 1983: IBM: DB2 (SQL alap RDBMS, nagygpre). A vilg legnagyobb adatbzisait ma is jrszt DB2-ben kezelik. SQL szabvny (1986), az ANSI (= American National Standards Institute) definilta. Vltozatai: SQL-86, SQL-89. SQL2 szabvny (1992), ms nven SQL-92. SQL3 szabvny (1999), ms nven SQL:1999: rekurzi, triggerek, objektum-relcis modell. SQL:2003 szabvny: tbbek kztt XML tmogatssal bvlt. A jelenlegi SQL-implementcik ltalban az SQL2-nl jval tbbet tudnak, ugyanakkor elfordul, hogy az SQL2 bizonyos rszleteit nem tartalmazzk, illetve a szabvnytl eltr formban tartalmazzk (Oracle, MySQL, PostgreSQL). Jelen anyagban az SQL2 szabvnyt vesszk alapul, de az utastsoknak csak a fontosabb lehetsgeit trgyaljuk. A konkrt rendszerek utastsai gyakran eltrnek az SQL2 szabvnytl, ezrt programozsnl mindig az adott rendszer kziknyvei a mrvadk.

6.1. ltalnos jellemzs


Az SQL utastsait kt f csoportba szoktk sorolni: - DDL (= Data Definition Language): adatstruktra definil utastsok. - DML (= Data Manipulation Language): adatokon mveletet vgz utastsok. Jelen anyagban - az RDBMS f feladatai alapjn - az albbi csoportokban trgyaljuk az SQL utastsokat: - adatbzissma definilsa (DDL), - adatok aktualizlsa (DML), - lekrdezsi lehetsgek (DML).

Szintaxis
Kisbet s nagybet a nyelv alapszavaiban egyenrtk. Utastsok sorfolytonosan rhatk, lezrs pontosvesszvel. Vltoz nincs, csak tbla- s oszlopnevekre lehet hivatkozni. Kifejezsben hivatkozs egy tbla adott oszlopra: tbla.oszlop (ha a tbla egyrtelm, akkor elhagyhat). Alias nv: nv AS msodnv (egyes implementcikban AS elhagyhat). Szvegkonstans: 'szveg' Dtum: DATE '1968-05-12'. Egyes rendszerek az SQL szabvnytl eltr konvencit alkalmaznak, pldul 13-NOV-94 (Oracle), 02/15/1994 (dBase).

47

Id: TIME '15:31:02.5' (ra, perc, msodperc). Stringek konkatencija: + vagy || . Relcijelek: =, <=, >=, !=, <> Logikai mveletek: AND, OR, NOT. Az SQL rendszerek "hromrtk logikt" hasznlnak, vagyis a TRUE s FALSE mellett a NULL (definilatlan) rtk is fellphet. Ha egy kifejezs valamelyik eleme NULL, akkor a kifejezs rtke is NULL lesz.
Az SQL-szabvny szerint egy logikai kifejezs rtke ISMERETLEN (UNKNOWN), ha benne NULL rtk szerepel.

Az utastsok szintaxisnak lersnl az elhagyhat rszleteket szgletes zrjellel jelljk.

Specilis logikai kifejezsek


x IS NULL: igaz, ha az x mez rtke NULL. Ez nem egyenrtk az "x = NULL" kifejezssel, ugyanis ennek rtke definilatlan, mivel definilatlan komponenst tartalmaz. A gyakorlatban teht az x IS NULL forma hasznland. x BETWEEN a AND b: igaz, ha a x b. x IN halmaz: igaz, ha x megegyezik a megadott halmaz egy elemvel. A halmazt explicit mdon vagy lekrdezssel lehet megadni. Plda: vros IN ('Szeged','Szolnok','Pcs') x relcijel ALL halmaz: igaz, ha x a halmaz minden elemvel a megadott relciban van. Plda: fizets != ALL (81000, 136000, 118000) x relcijel ANY halmaz: igaz, ha a halmaznak van olyan eleme, amellyel x a megadott relciban van. Plda: fizets < ANY (81000, 136000, 118000) EXISTS halmaz: igaz, ha a halmaz nem res. Pldul egy "EXISTS lekrdezs" kifejezs rtke igaz, ha a lekrdezs legalbb egy elemet ad vissza. x LIKE minta: igaz, ha az x karaktersorozat megfelel a megadott mintnak. Ha a mintban "%" illetve "_" jel szerepel, az tetszleges karaktersorozatot illetve tetszleges karaktert jelent. Plda: lakcm LIKE '%Vr u.%' igaz minden olyan lakcmre, amelyben szerepel a "Vr u." rszlet. A fentiekben ltalban a NOT is hasznlhat, pldul x IS NOT NULL, x NOT IN halmaz, stb.

48

6.2. Relcismk definilsa (DDL)


Relcisma ltrehozsra a CREATE TABLE utasts szolgl, amely egyben egy res tblt is ltrehoz a smhoz. Az attribtumok definilsa mellett a kulcsok s kls kulcsok megadsra is lehetsget nyjt: CREATE TABLE tblanv ( oszlopnv adattpus [felttel], ... ..., oszlopnv adattpus [felttel] [, tblaFelttelek] ); Az adattpusok (rendszerenknt eltrk lehetnek): CHAR(n) n hosszsg karaktersorozat VARCHAR(n) legfeljebb n hosszsg karaktersorozat INTEGER egsz szm (rviden INT) REAL vals (lebegpontos) szm, msnven FLOAT DECIMAL(n[,d]) n jegy decimlis szm, ebbl d tizedesjegy DATE dtum (v, h, nap) TIME id (ra, perc, msodperc) Az adattpushoz "DEFAULT rtk" megadsval alaprtelmezett rtk definilhat. Ha ilyet nem adunk meg, az alaprtelmezett rtk NULL. Felttelek (egy adott oszlopra vonatkoznak): PRIMARY KEY: elsdleges kulcs UNIQUE: kulcs REFERENCES tbla(oszlop) [ON-felttelek]: kls kulcs Tblafelttelek (az egsz tblra vonatkoznak): PRIMARY KEY (oszloplista): elsdleges kulcs UNIQUE (oszloplista): kulcs FOREIGN KEY (oszloplista) REFERENCES tbla(oszloplista) [ON-felttelek]: kls kulcs Ha a (kls) kulcs tbb oszlopbl ll, akkor csak tblafelttel formjban adhat meg.
A PRIMARY KEY (elsdleges kulcs) s UNIQUE (kulcs) kztti klnbsgek: - Egy smban csak egy elsdleges kulcs, de tetszleges szm tovbbi kulcs lehet. - Kls kulcs ltalban a msik tbla elsdleges kulcsra hivatkozik. - Egyes DBMS-ek az elsdleges kulcshoz automatikusan indexet hoznak ltre. A CREATE TABLE utastssal tulajdonkppen egy R = (A, F) relcismt adunk meg, ahol F megadsra szolglnak a kulcsfelttelek. Ha a relcisma BCNF-ben van, akkor ezzel az sszes fggs megadhat, hiszen ekkor csak szuperkulcstl lehet nemtrivilis fggs.

72. Plda. Hozzuk ltre az Osztly (osztlykd, osztlynv, vezAdszm) Dolgoz (adszm, nv, lakcm, osztlykd) relcismkat SQL-ben:

49 CREATE TABLE Osztly ( osztlykd CHAR(3) PRIMARY KEY, osztlynv CHAR(20), vezAdszm DECIMAL(10) ); CREATE TABLE Dolgoz ( adszm DECIMAL(10) PRIMARY KEY, nv CHAR(30), lakcm CHAR(40) DEFAULT 'ismeretlen', osztlykd CHAR(3) REFERENCES Osztly(osztlykd) );

A Dolgoz smt gy is lehetne definilni:


CREATE TABLE Dolgoz ( adszm DECIMAL(10), nv CHAR(30), lakcm CHAR(40), osztlykd CHAR(3), PRIMARY KEY (adszm), FOREIGN KEY (osztlykd) REFERENCES Osztly(osztlykd) );

73. Plda. A DolgProj (adszm, projektkd, raszm) smban sszetett kulcs van, amelynek definilsa csak tbla-felttelknt lehetsges:
CREATE TABLE DolgProj ( adszm DECIMAL(10) REFERENCES Dolgoz(adszm), projektkd CHAR(5), raszm DECIMAL(2), PRIMARY KEY (adszm, projektkd) );

A tbla mdostsakor a definilt kulcsfelttelek automatikusan ellenrzsre kerlnek. PRIMARY KEY s UNIQUE esetn ez azt jelenti, hogy a rendszer nem enged olyan mdostst illetve j sor felvtelt, amely egy mr meglv kulccsal tkzne. REFERENCES (kls kulcs hivatkozs) esetn ON-felttelek megadsval szablyozhatjuk a rendszer viselkedst (jellje T1 a hivatkoz s T2 a hivatkozott tblt): - Alaprtelmezs (ha nincs ON-felttel): T1-ben nem megengedett olyan beszrs s mdosts, amely T2-ben nem ltez kulcs rtkre hivatkozna, tovbb T2-ben nem megengedett olyan kulcs mdostsa vagy sor trlse, amelyre T1 hivatkozik. - ON UPDATE CASCADE: ha T2 egy sorban vltozik a kulcs rtke, akkor a r val T1-beli hivatkozsok is megfelelen mdosulnak (mdosts tovbbgyrzse). - ON DELETE CASCADE: Ha T2-ben trlnk egy sort, akkor T1-ben is trldnek a r hivatkoz sorok (trls tovbbgyrzse). - ON UPDATE SET NULL: ha T2 egy sorban vltozik a kulcs rtke, akkor T1-ben a r val kls kulcs hivatkozsok rtke NULL lesz. - ON DELETE SET NULL: ha T2-ben trlnk egy sort, akkor T1-ben a r val kls kulcs hivatkozsok rtke NULL lesz. A kulcsfelttelek ellenrzse csak indexekkel oldhat meg hatkonyan.

50

74. Plda.
CREATE TABLE Dolgoz ( adszm DECIMAL(10) PRIMARY KEY, nv CHAR(30), lakcm CHAR(40) DEFAULT 'ismeretlen', osztlykd CHAR(3) REFERENCES Osztly(osztlykd) ON UPDATE CASCADE ON DELETE SET NULL );

Relcisma trlse: DROP TABLE tblanv; Hatsra a sma s a hozz tartoz adattbla trldik. Relcisma mdostsa: ALTER TABLE tblanv [ADD (jelem, ..., jelem)] [MODIFY (mdosts, ..., mdosts)] [DROP (oszlop, ..., oszlop)]; jelem: egy "oszlopnv adattpus [felttel]", vagy egy "tblafelttel", mint a CREATE TABLE utastsban. mdosts: "oszlopnv adattpus [felttel]". Oszlopok trlst nem minden rendszer engedi meg. Pldk:
ALTER TABLE Dolgoz ADD (szldtum DATE); ALTER TABLE Dolgoz MODIFY (lakcm VARCHAR(60)); ALTER TABLE Osztly MODIFY (vezAdszm REFERENCES Dolgoz(adszm));

6.3. Indexek ltrehozsa


Az indexek kezelse nem rsze az SQL2 szabvnynak, de valamilyen formban minden RDBMS tmogatja. Index ltrehozsa ltalban a CREATE [UNIQUE] INDEX indexnv ON tbla(oszloplista); utastssal lehetsges, amely a megadott tbla felsorolt oszlopaira, mint indexkulcsra generl indexet. Ha UNIQUE szerepel, akkor a tbla nem tartalmazhat kt azonos indexkulcs rekordot. Index trlse a DROP INDEX indexnv; utastssal trtnik. Pldk:
CREATE INDEX DolgInd1 ON Dolgoz(nv); CREATE INDEX DolgInd2 ON Dolgoz(osztlykd,nv);

Az els plda egyszer indexkulcsot tartalmaz, amely a dolgozk nv szerinti keresst, illetve rendezst tmogatja. A msodik pldban szerepl sszetett indexkulcs az osztlykd

51

szerinti, osztlyon bell pedig nv szerinti keresst/rendezst segti, mivel a rendszerek ltalban az osztlykd s nv attribtumok konkatencijval kpezik az indexkulcsot. Ez a megolds viszont a pusztn nv szerinti keresst nem tmogatja.

6.4. Adattbla aktualizlsa (DML)


A tblba j sor felvtele az INSERT INTO tblanv [(oszloplista)] VALUES (rtklista); utastssal trtnik. Ha oszloplista nem szerepel, akkor valamennyi oszlop rtket kap a CREATE TABLE-ben megadott sorrendben. Egybknt, az oszlopnv-listban nem szerepl mezk NULL rtket kapnak. Pldk:
INSERT INTO Dolgoz (nv, adszm) VALUES ('Tth Aladr', 1111); INSERT INTO Dolgoz VALUES (1111, 'Tth Aladr', , '12');

A tblba adatokat tlthetnk t msik tblbl is, ha a VALUES(rtklista) helyre egy alkrdst runk (lsd az Alkrdsek fejezetben). Sor(ok) mdostsa az UPDATE tblanv SET oszlop = kifejezs, ..., oszlop = kifejezs [ WHERE felttel ]; utastssal trtnik. Az rtkads minden olyan soron vgrehajtdik, amely eleget tesz a WHERE felttelnek. Ha WHERE felttel nem szerepel, akkor az rtkads az sszes sorra megtrtnik. Pldk:
UPDATE Dolgoz SET lakcm = 'Szeged, Rzsa u. 5.' WHERE nv = 'Kovcs Jzsef'; UPDATE Dolgoz SET osztlykd = '003' WHERE osztlykd = '012';

Sor(ok) trlse a DELETE FROM tblanv [ WHERE felttel ]; utastssal lehetsges. Hatsra azok a sorok trldnek, amelyek eleget tesznek a WHERE felttelnek. Ha a WHERE felttelt elhagyjuk, akkor az sszes sor trldik (de a sma megmarad). Pldk:
DELETE FROM Dolgoz WHERE nv = 'Kovcs Jzsef'; DELETE FROM Osztly;

52

75. Plda. Tekintsk az albbi utastsprt:


INSERT INTO Dolgoz (nv, adszm) VALUES ('Tth Aladr',4321); DELETE FROM Dolgoz WHERE adszm = 4321;

Ha a tblban korbban mr volt egy 4321 adszm sor, akkor a fenti utastspr azt is kitrli. ltalban, ha egy tbla kt azonos sort tartalmaz, DELETE utastssal nem tudjuk csak az egyiket kitrlni. Ha ugyanis a WHERE felttel az egyikre igaz, akkor szksgkppen a msikra is igaz. A PRIMARY KEY felttellel az ilyen anomlik megelzhetk.

6.5. Lekrdezs (DML)


Lekrdezsre a SELECT utasts szolgl, amely egy vagy tbb adattblbl egy eredmnytblt llt el. Az eredmnytbla a kpernyn listzsra kerl, vagy ms mdon hasznlhat fel. (Egyetlen SELECT akr egy komplex felhasznli programot helyettesthet!) A SELECT utasts alapvltozata: SELECT [DISTINCT] oszloplista FROM tblanvlista [WHERE felttel]; A "SELECT DISTINCT A1,...,An FROM T1,...,Tm WHERE felttel" utasts egyenrtk a kvetkez relcis algebrai kifejezssel: E = A1,...,An(felttel(T1 x...x Tm)) Vagyis, a felsorolt tblk Descartes-szorzatbl szelektljuk a felttelnek eleget tv sorokat, majd ezekbl projekcival vlasztjuk ki az E eredmnytbla oszlopait. A DISTINCT opcit akkor kell kirni, ha az eredmnytblban az azonos sorokbl csak egyet kvnunk megtartani. Ha oszloplista helyre * karaktert runk, ez valamennyi oszlop felsorolsval egyenrtk. A SELECT legegyszerbb vltozatval adattbla listzst rhetjk el:
SELECT * FROM T;

A relcis algebra mveleteinek megvalstsa


Projekci:
SELECT [DISTINCT] A1,...,An FROM T;

Plda:

SELECT DISTINCT szerz, cm FROM Knyv;

Szelekci:
SELECT * FROM T WHERE felttel;

Plda:
SELECT * FROM Knyv WHERE kivtel<2000.01.01; SELECT * FROM T1,T2;

Descartes-szorzat: T1 x T2

53

Termszetes sszekapcsols. lltsuk el pldul az ru (cikkszm, megnevezs) s Vsrls (cikkszm, mennyisg) tblk termszetes sszekapcsolst:
SELECT ru.cikkszm, megnevezs, mennyisg FROM ru, Vsrls WHERE ru.cikkszm = Vsrls.cikkszm;

A fentivel egyenrtk, szintn gyakran hasznlt szintaxis:


SELECT ru.cikkszm, megnevezs, mennyisg FROM ru INNER JOIN Vsrls ON ru.cikkszm = Vsrls.cikkszm;

Megjegyzs. A fenti pldkban a SELECT utn nem elegend csak cikkszm-ot rni, annak ellenre, hogy esetnkben ru.cikkszm = Vsrls.cikkszm, teht mindegy, melyik cikkszmot vlasztja a rendszer. ltalban, ha egy lekrdezsben tbb azonos oszlopnv szerepel, az SQL rendszerek megkvetelik a tblanv megadst. Kls sszekapcsols. A fenti pldt alapul vve, ha az eredmnytblban valamennyi ru adatait szerepeltetni szeretnnk, akkor ez az Oracle rendszer korbbi verziiban hasznlt jellssel az albbi mdon adhat meg:
SELECT ru.cikkszm, megnevezs, mennyisg FROM ru, Vsrls WHERE ru.cikkszm (+)= Vsrls.cikkszm;

Az SQL szabvny szerint a LEFT, RIGHT vagy FULL OUTER JOIN kulcsszavakkal adhat meg kls sszekapcsols, pldul:
SELECT ru.cikkszm, megnevezs, mennyisg FROM ru LEFT OUTER JOIN Vsrls ON ru.cikkszm = Vsrls.cikkszm;

Thta join:
SELECT * FROM T1,T2 WHERE felttel;

Uni:
(SELECT * FROM T1) UNION (SELECT * FROM T2);

A kt SELECT eredmnytblja kompatibilis kell, hogy legyen (lsd Relcis algebra). Metszet:
(SELECT * FROM T1) INTERSECT (SELECT * FROM T2);

A kt SELECT eredmnytblja kompatibilis kell, hogy legyen. Klnbsg:


(SELECT * FROM T1) EXCEPT (SELECT * FROM T2);

A kt SELECT eredmnytblja kompatibilis kell, hogy legyen. Egyes rendszereknl EXCEPT helyett MINUS hasznlatos. 76. Plda. Tekintsk az albbi helyisg-adatbzist: Helyisg (plet, ajtszm, nv, alapterlet) Tanterem (plet, ajtszm, frhely, tbla, vett) Gpterem (plet, ajtszm, gpszm)

54

Krjk le az oktatsi cl gptermek listjt: (SELECT plet, ajtszm FROM Tanterem) INTERSECT (SELECT plet, ajtszm FROM Gpterem);

Alias nevek
A SELECT utn megadott oszloplista valjban nem csak oszlopneveket, hanem tetszleges kifejezseket is tartalmazhat, s az eredmnytbla oszlopainak elnevezsre alias neveket adhatunk meg: 77. Plda. a Raktr(cikkszm, nv, egysgr, mennyisg) tblbl egy E(ru, rtk) tbla ltrehozsa:
SELECT nv AS ru, egysgr*mennyisg AS rtk FROM Raktr;

78. Plda. a Szemly(adszm, nv, szletsiv) tblbl egy E(nv, letkor) tbla ltrehozsa:
SELECT nv, 2007-szletsiv AS letkor FROM Szemly;

A FROM utn megadott tblk esetn is hasznlhatk alias nevek, pldul akkor, ha egy tblnak nmagval val sszekapcsolst kpezzk: 79. Plda. Azonos nev dolgozk lekrse a Dolgoz (adszm, nv, lakcm) tblbl:
SELECT d1.nv, d1.adszm, d2.adszm FROM Dolgoz AS d1, Dolgoz AS d2 WHERE d1.nv=d2.nv AND d1.adszm < d2.adszm;

Az adszmokra elrt felttel azrt kell, hogy nmagval ne prostson rekordot, illetve, hogy egy azonos nev pr csak egyszer jelenjen meg.

Fggvnyek
ABS(n): abszolt rtk Plda:
ABS(-15) = 15

LOWER(char): konverzi kisbetsre. Plda:


LOWER(Kovcs) = kovcs

UPPER(char): konverzi nagybetsre. Plda:


UPPER(Kovcs) = KOVCS

LTRIM(char): balrl szkzk eltvoltsa. Plda:


LTRIM( RTRIM( alma alma ) = alma ) =

RTRIM(char): jobbrl szkzk eltvoltsa. Plda:


alma

SUBSTR(char, m[, n]): a char string m-edik karaktertl n hossz rszstringet ad vissza. (Ha n nem szerepel, akkor a vgig.) Az els karakter 1-es sorszm. Plda:
SUBSTR(ABCDEFG,2,3) = BCD

TO_CHAR(n): konverzi numerikusrl vagy dtumrl karakteresre. Plda:


TO_CHAR(123) = 123

TO_DATE(char): konverzi karakteresrl dtumra. Plda:


TO_DATE(15-JAN-06)

TO_NUMBER(char): konverzi karakteresrl numerikusra. Plda:


TO_NUMBER(123) = 123

55

sszest fggvnyek
Egy oszlop rtkeibl egyetlen rtket hoznak ltre (pldul tlag). ltalnos alakjuk: fggvnynv ( [DISTINCT] oszlopnv ) Ha DISTINCT szerepel, akkor az oszlopban szerepl azonos rtkeket csak egyszer kell figyelembe venni. A szmtsnl a NULL rtkek figyelmen kvl maradnak. Az egyes fggvnyek: AVG: tlagrtk. SUM: sszeg. MAX: maximlis rtk. MIN: minimlis rtk. COUNT: elemek szma. Ennl a fggvnynl oszlopnv helyre * is rhat, amely valamennyi oszlopot egytt jelenti. Pldk: - SELECT AVG(fizets) FROM Dolgoz: az eredmnytbla egyetlen elembl ll, amely az tlagfizetst adja. - SELECT SUM(fizets) FROM Dolgoz: a fizetsek sszege. - SELECT COUNT(*) FROM Dolgoz: a Dolgoz tbla sorainak szma, vagyis a dolgozk szma. - SELECT COUNT(DISTINCT osztkd) FROM Dolgoz: az osztlyok szma.

Csoportosts (GROUP BY, HAVING)


Ha a tbla sorait csoportonknt szeretnnk sszesteni, akkor a SELECT utasts a GROUP BY oszloplista alparanccsal bvtend. Egy csoportba azok a sorok tartoznak, melyeknl oszloplista rtke azonos. Az eredmnytblban egy csoportbl egy rekord lesz. Az sszest fggvnyek csoportonknt hajtdnak vgre. 80. Plda. A Dolgoz tblbl osztlyonknt az tlagfizetst szmoljuk. Az eredmnytblnak annyi sora lesz, ahny osztly van:
SELECT osztkd, AVG(fizets) FROM Dolgoz GROUP BY osztkd;

81. Plda. A PROJORA (dolgoz, projekt, ra) tblbl dolgoznknti s projektenknti raszm sszegzs:
SELECT dolgoz, SUM(ra) FROM Projra GROUP BY dolgoz; SELECT projekt, SUM(ra) FROM Projra GROUP BY projekt;

Csoportostsi szably: A SELECT utn sszest fggvnyen kvl csak olyan oszlopnv tntethet fel, amely a GROUP BY-ban is szerepel.

56

A GROUP BY ltal kpezett csoportok kzl vlogathatunk a HAVING felttel alparancs segtsgvel: csak a felttelnek eleget tev csoportok kerlnek sszestsre az eredmnytblba. 82. Plda. Azon osztlyok listja, ahol az tlagfizets > 180 000 Ft:
SELECT osztkd, AVG(fizets) FROM Dolgoz GROUP BY osztkd HAVING AVG(fizets) > 180000;

Az eredmnytbla rendezse
Br a relcis modell nem definilja a rekordok sorrendjt, a gyakorlatban rendszerint valamilyen rendezettsgben kvnjuk ltni az eredmnyt. Erre szolgl az ORDER BY oszlopnv [DESC], ..., oszlopnv [DESC] alparancs, amely a SELECT utasts vgre helyezhet, s az eredmnytblnak a megadott oszlopok szerinti rendezst rja el. Alaprtelmezs szerint a rendezs nvekv sorrendben trtnik, ha fordtva kvnjuk, a DESC (descending) kulcssz rand a megfelel oszlopnv utn. 83. Plda. Dolgozk s fizetseik listja az osztlykd szerint nvekv, osztlyon bell pedig fizets szerint cskken sorrendben:
SELECT osztkd, nv, fizets FROM Dolgoz ORDER BY osztkd, fizets DESC;

A SELECT utasts ltalnos alakja


A SELECT utasts az albbi alparancsokbl llhat az albbi sorrendben (a szgletes zrjelben szerepl rszek elhagyhatk): SELECT [DISTINCT] oszloplista FROM tblanvlista [WHERE felttel] [GROUP BY oszloplista [HAVING felttel] ] [ORDER BY oszloplista]; projekci Descartes-szorzat szelekci csoportonknt sszevons csoport-szelekci rendezs

Ahol "oszloplista" szerepel, ott ltalban oszlopkifejezsek listjt lehet megadni (pldk az Alias nevek alpontban). Az egyes alparancsok megadsi sorrendje az angol nyelv szablyait kveti (lsd fent a mintautastst), vgrehajtsi sorrendjk viszont az albbi: 1. FROM 2. WHERE 3. GROUP BY 4. HAVING 5. SELECT 6. ORDER BY Descartes-szorzat szelekci csoportonknt sszevons csoport-szelekci projekci rendezs

57

A vgrehajtsi sorrend hatrozza meg, hogy melyik alparancsban mire lehet hivatkozni. Pldul ORDER BY utn csak olyan oszlop adhat meg, amely a SELECT-ben szerepel, sszest fggvny csak a GROUP BY utn vgrehajtott alparancsokban adhat meg, stb. 84. Plda. bc sorrendben azon osztlyok listja, ahol a legkisebb fizets is nagyobb, mint 200 000:
SELECT osztlynv, MIN(fizets) FROM Dolgoz, Osztly WHERE Dolgoz.osztkd=Osztly.osztkd GROUP BY Dolgoz.osztkd, osztlynv HAVING MIN(fizets)>200000 ORDER BY osztlynv;

6.6. Alkrdsek
Az SQL nyelv ismertetsnek elejn lttunk halmazokat tartalmaz logikai kifejezseket. Egy ilyen halmaz SELECT utastssal is elllthat, pldul a
'Tth Pl' IN (SELECT nv FROM Dolgoz WHERE osztlykd='015')

logikai kifejezs akkor igaz, ha Tth Pl a 015 kd osztly dolgozja, vagy


EXISTS (SELECT * FROM Dolgoz WHERE fizets < 80000)

akkor igaz, ha van 80000 Ft-nl kisebb fizets dolgoz. Ha egy SELECT utasts WHERE vagy HAVING felttelben olyan logikai kifejezs szerepel, amely SELECT utastst tartalmaz, ezt alkrdsnek vagy bels SELECT-nek is nevezik. ltalban, valamely SQL utasts belsejben szerepl SELECT utastst alkrdsnek nevezzk. 85. Plda. Az albbi utasts azon dolgozk listjt adja, amelyek fizetse kisebb, mint az tlagfizets:
SELECT nv, fizets FROM Dolgoz WHERE fizets < ( SELECT AVG(fizets) FROM dolgoz );

Ebben a pldban az alkrdst elg csak egyszer kirtkelni, hiszen a Dolgoz tbla minden egyes sorra ugyanazt az eredmnyt kapjuk. Ha viszont a bels SELECT-ben a kls SELECT-beli tblk oszlopnevei szerepelnek, akkor a kls SELECT minden egyes rekordjra kirtkeldik a bels SELECT. Egy kirtkels sorn a kls vltoznevek konstansnak tekintendk. 86. Plda. A Dolgoz(nv, cm, osztlykd, fizets) tblbl azon dolgozk listjt krjk, akiknek az osztlyon bell a legnagyobb a fizetse (ha tbb ilyen van, mindegyiket ki kell listzni). A Dolgoz tbla kt pldnyt a D1 s D2 alias nevek klnbztetik meg:
SELECT osztlykd, nv, fizets FROM Dolgoz AS D1 WHERE fizets = ( SELECT MAX(fizets) FROM Dolgoz AS D2 WHERE D1.osztlykd = D2.osztlykd );

87. Plda. gyeljnk a tpuskompatibilitsra! Hibs pldul az albbi lekrdezs WHERE felttele, mert az alkrds rekordhalmazt ad vissza, amely nem hasonlthat ssze a fizets rtkkel:
SELECT adszm, nv FROM Dolgoz WHERE fizets = (SELECT * FROM Dolgoz WHERE nv=Kovcs);

58

88. Plda. Bizonyos esetekben az alkrds join-mveletet helyettest, pldul a Knyv (knyvszm, szerz, cm, olvasszm, kivtel) Olvas (olvasszm, nv, lakcm) smk esetn az albbi kt lekrdezs egyarnt a pcsi olvask ltal kiklcsnztt knyvek listjt adja:
SELECT szerz, cm FROM Knyv WHERE olvasszm IN (SELECT olvasszm FROM Olvas WHERE lakcm LIKE '%Pcs%'); SELECT szerz, cm FROM Knyv, Olvas WHERE Knyv.olvasszm = Olvas.olvasszm AND lakcm LIKE '%Pcs%';

Nem csak SELECT utastsban alkalmazhat alkrds: 89. Plda. Tekintsk a kvetkez tblkat: Dolgoz (adszm, nv, fizets) Projekt (adszm, pkd, raszm) Az albbi utasts fizetsemelst hajt vgre az A12 projekt dolgozinl:
UPDATE Dolgoz SET fizets=fizets+10000 WHERE adszm IN ( SELECT adszm FROM Projekt WHERE pkd='A12' );

Nem csak a logikai kifejezs tartalmazhat alkrdst, hanem az INSERT utasts is: INSERT INTO tblanv [(oszloplista)] SELECT ... ; A SELECT annyi oszlopot kell hogy kivlasszon, amennyit oszloplista tartalmaz. A tbbi oszlop NULL rtket vesz fel. 90. Plda. Tegyk fel, hogy a Raktr (cikkszm, nv, egysgr, mennyisg) tblbl egy Kszlet (ru, rtk) tblt szeretnnk ltrehozni, amely az ruflesg megnevezst s az aktulisan trolt mennyisg rtkt tartalmazza. Ez a kvetkezkpp lehetsges:
CREATE TABLE Kszlet ( ru CHAR(20), rtk INTEGER ); INSERT INTO Kszlet SELECT nv, egysgr*mennyisg FROM Raktr;

6.7. Virtulis tblk (nzettblk)


Egy adatbzisban ltalban ktfle adatra van szksgnk: - alapadatok: tartalmukat aktualizl mveletekkel mdostjuk. - szrmaztatott adatok: az alapadatokbl generlhatk. Szrmaztatott adattblt pldul INSERT ... SELECT segtsgvel is ltrehozhatunk (lsd az elz pontot), ekkor viszont az nem kveti automatikusan az alapadatok mdosulst, ha pedig minden aktualizl mveletnl jragenerlnnk, az rendkvl lass lenne. A problmt a virtulis tbla oldja meg. A virtulis tbla (nzettbla, view) nem trol adatokat. Tulajdonkppen egy transzformcis formula, amelyet gy kpzelhetnk el, mint ha ennek segtsgvel a trolt tblk adatait ltnnk egy specilis szrn, optikn keresztl.

59

Nzettblk alkalmazsi lehetsgei: - Szrmaztatott adattblk ltrehozsa, amelyek a trzsadatok mdostsakor automatikusan mdosulnak (pl. sszegztblk). - Bizonyos adatok elrejtse egyes felhasznlk ell (adatbiztonsg vagy egyszersts cljbl). Nzettbla ltrehozsa: CREATE VIEW tblanv [(oszloplista)] AS alkrds; A SELECT utasts eredmnytblja alkotja a nzettblt. "Oszloplista" megadsval a nzettbla oszlopainak j nevet adhatunk. A CREATE VIEW vgrehajtsakor a rendszer csak letrolja a nzettbla defincijt, s majd csak a r val hivatkozskor generlja a szksges adatokat. A nzettblk ltalban ugyangy hasznlhatk, mint a trolt adattblk, vagyis ahol egy SQL parancsban tblanv adhat meg, ott rendszerint nzettbla neve is szerepelhet. 91. Plda. Szrmaztatott adatok kezelse. A RAKTR (cikkszm, nv, egysgr, mennyisg) tblbl ltrehozott nzettbla:
CREATE VIEW Kszlet (ru, rtk) AS SELECT nv, egysgr*mennyisg FROM Raktr;

92. Plda. Adatok elrejtse. A Dolgoz (adszm, nv, lakcm, osztlykd, fizets) tblhoz ltrehozzuk a kvetkez nzettblt:
CREATE VIEW Dolg2 AS SELECT adszm, nv, lakcm FROM Dolgoz WHERE osztlykd='A01';

Ha a nzettbla tartalmt mdostjuk, akkor a mdosts a megfelel trolt tblkon hajtdik vgre s termszetesen megjelenik a nzettblban is. Alapelv, hogy egy SQL rendszer csak akkor engedi meg a nzettbla mdostst, ha a mdostst egyrtelmen vgre tudja hajtani a trolt tblkon. Nem lehet mdostani pldul a fenti Kszlet tbla rtk mezjt, de a Dolg2 tbla lakcm mezje mr gond nlkl mdosthat. Nem lehet mdostani tovbb a nzettblt, ha defincija - DISTINCT opcit, - FROM utn egynl tbb tblanevet (join mvelet), - GROUP BY alparancsot tartalmaz.
Pldk a fenti korltozsok indokolsra, a Dolg (adszm, nv, lakcm) s Projra (adszm, projektkd, ra) tblk alapjn: - DISTINCT esetn:
CREATE VIEW HardProj(projkd) AS SELECT DISTINCT projektkd FROM Projra WHERE ra>10;

azon projektek listjt adja, amelyeken valaki 10-nl tbb rban dolgozik. Projkd mdostsa esetn a rendszer nem tudja eldnteni, hogy a Projra tblban projektkd valamennyi elfordulst mdostsa-e, vagy csak azokat, ahol ora>10. - Join mvelet esetn:
CREATE VIEW DolgProj AS SELECT nv, projektkd, ra FROM Dolg, Projra WHERE Dolg.adszm=Projra.adszm;

Ha egy dolgoz tbb projekten dolgozik, s csak az egyik rekordban a nevt mdostom, a rendszer nem tudja eldnteni, hogy a dolg tblban mdostsa-e a nevet. - GROUP BY esetn:

60 CREATE VIEW SumProj AS SELECT projektkd, SUM(ra) FROM Projra WHERE ra<10 GROUP BY projektkd;

az egyes projektekre a 10-nl kisebb raszmokat sszegzi. Itt a SUM(ra) mez nyilvn nem mdosthat, projektkd mdostsa esetn pedig a rendszer nem tudja eldnteni, hogy a Projra tblban a projektkd sszes elfordulst mdostsa, vagy csak azokat, ahol ra<10.

Ha egy mdosthat nzettblba j rekordot vesznk fel, akkor az alaptblnak a nzettblban nem szerepl oszlopaiba szksgkppen NULL kerl felvtelre. Tegyk fel, hogy a fenti Dolg2 tblba j rekordot szeretnnk felvenni:
INSERT INTO Dolg2 VALUES (3333, 'Tth Pl');

Mivel osztlykd nem szerepel Dolg2-ben, gy rtke az j rekordban szksgkppen NULL lesz, vagyis az j dolgoz nem az 'A01' osztlyra kerl felvtelre, s gy nem jelenik meg Dolg2-ben. A hiba kikszblhet, ha az osztlykdot felvesszk Dolg2-be:
CREATE VIEW Dolg2 AS SELECT adszm, nv, lakcm, osztlykd FROM Dolgoz WHERE osztlykd='A01'; INSERT INTO Dolg2 VALUES (3333, 'Tth Pl', , 'A01');

Ha a CREATE VIEW utasts vgre a WITH CHECK OPTION zradkot illesztjk, akkor a rendszer nem engedi meg a nzettbla olyan mdostst, amely nem tesz eleget a levlogatsi felttelnek. Pldul,
CREATE VIEW Dolg2 AS SELECT adszm, nv, lakcm, osztlykd FROM Dolgoz WHERE osztlykd='A01' WITH CHECK OPTION;

nem engedi meg az osztlykd mdostst, vagy 'A01'-tl klnbz osztlykd felvitelt. Lekrdezsek kirtkelse. A nzettblra vonatkoz lekrdezst relcis algebrai formulval rjuk fel, ebbe behelyettestjk a nzettbla defincijt, s a kapott formult rtkeljk ki az alaptblkra. Plda:
SELECT lakcm FROM Dolg2 WHERE nv='Tth Pl';

Ez relcis algebrval felrva: E = lakcim( nv='Tth Pl'(Dolg2) ), ahol Dolg2 = adszm,nv,lakcm,osztlykd( osztlykd='A01'(Dolgoz) ) A Dolg2 behelyettestsvel add formult kell kirtkelni.

61

7. Aktv elemek (megszortsok, triggerek)


Aktv elem: olyan programrsz, amely bizonyos szituciban automatikusan vgrehajtdik. Ennek specilis esete a megszorts, ami bizonyos felttelek ellenrzst jelenti bizonyos helyzetekben.

7.1. Attribtumok megszortsai


A CREATE TABLE-ben valamely attribtum deklarcija utn adhatk meg. Kulcs felttelek: a CREATE TABLE utastsban adhatk meg a PRIMARY KEY, UNIQUE, REFERENCES kulcsszavakkal. Aktualizlsi mveleteknl a megfelel felttel automatikus ellenrzst vltjk ki. Tovbbi megszortsok: NOT NULL Adott attribtum rtke nem lehet NULL. Hatsra a rendszer megakadlyoz minden olyan mveletet, amely az adott attribtum NULL rtkt eredmnyezn. Adatbevitelnl pldul ez azt jelenti, hogy az attribtum rtkt ktelez megadni. CHECK (felttel) Az adott attribtum mdostst a rendszer csak akkor engedi meg, ha a felttel teljesl. 93. Plda:
CREATE TABLE Dolgoz ( adszm DECIMAL(10) PRIMARY KEY, nv CHAR(30) NOT NULL, nem CHAR(1) CHECK (nem IN ('F', 'N')), lakcm CHAR(40), osztkd CHAR(3) REFERENCES Osztly(osztkd) );

94. Plda. Kls kulcs felttel csak korltozottan ellenrizhet CHECK-felttellel:


CREATE TABLE Dolgoz ( adszm DECIMAL(10) PRIMARY KEY, nv CHAR(30), lakcm CHAR(40), osztlykd CHAR(3) CHECK (osztlykd IN (SELECT osztlykd FROM Osztly)) );

A fenti CHECK biztostja, hogy a Dolgoz tbla csak ltez osztlykdra hivatkozhat, de az Osztly tbla vltozsainl mr nem ellenrzi a kls kulcs felttelt. Vagyis a CHECK felttel ellenre elllhat olyan Dolgoz tbla, amelyre a felttel nem teljesl.

rtktartomny definilsa: CREATE DOMAIN nv tpus [DEFAULT rtk] [CHECK (felttel)];

62

rtktartomny mdostsa ALTER DOMAIN, trlse DROP DOMAIN utastssal trtnik. 95. Plda. A nemekhez tartoz konstansrtkek definilsa:
CREATE DOMAIN Nemrtk CHAR(1) CHECK (VALUE IN ('F', 'N'));

Hasznlata:
CREATE TABLE Dolgoz ( adszm DECIMAL(10) nv CHAR(30), nem Nemrtk, lakcm CHAR(40) ); PRIMARY KEY,

7.2. Tblra vonatkoz megszortsok


Ha a CHECK felttel egyszerre tbb attribtumot rint, akkor a CREATE TABLE vgre, a tblaFelttelek utn helyezend el. Akkor lp mkdsbe, ha a tbla valamely sora megvltozik. 96. Plda. Biztonsgi ellenrzsknt megkveteljk, hogy a knyvek klcsnzsnl a kivtel dtuma elzze meg a visszahozsi hatridt::
CREATE TABLE Knyv ( knyvszm DECIMAL(6) PRIMARY KEY, szerz CHAR(30), cm CHAR(30), kivtel DATE, vissza DATE, CHECK (kivtel < vissza) );

7.3. ltalnos megszortsok


Tbb sorra vagy tbb tblra (ltalban, a teljes adatbzissmra) vonatkozhatnak. Alakja: CREATE ASSERTION nv CHECK (felttel); A felttelben szerepl tblk brmelyiknek mdostsakor a felttel ellenrzsre kerl. 97. Plda. A Dolgoz(adszm, nv, fizets, osztlykd) s Osztly(osztlykd, osztlynv, vezAdszm) tblk esetn megkveteljk, hogy a vezetk fizetse legalbb 100 000 Ft legyen:
CREATE ASSERTION VezetFizets CHECK (NOT EXISTS (SELECT * FROM Dolgoz, Osztly WHERE Dolgoz.adszm = Osztly.vezAdszm AND fizets < 100000));

A felttel kt esetben srlhet: ha egy dolgoz fizetst vltoztatjuk, vagy ha egy dolgozt vezetnek neveznk ki. Ezrt a fenti nll megszorts nem helyettesthet egyetlen tblra vonatkoz megszortssal.

63

Az nll megszorts trlse: DROP ASSERTION nv;

7.4. Megszortsok kezelse


A megszortsokat clszer elnevezni a "CONSTRAINT nv" eltag segtsgvel. Pldul a Dolgoz tbla nv attribtuma esetn:
nv CHAR(30) CONSTRAINT NvKulcs UNIQUE

Ezutn a kulcsfelttel elvethet a kvetkez utastssal:


ALTER TABLE Dolgoz DROP CONSTRAINT NvKulcs;

A kulcsfelttel jra rvnyesthet tblafelttelknt:


ALTER TABLE Dolgoz ADD CONSTRAINT NvKulcs UNIQUE (nv);

rtktartomnyra vonatkoz megszorts esetn:


CREATE DOMAIN Nemrtk AS CHAR(1) CONSTRAINT FrfiVagyN CHECK (VALUE IN ('F', 'N'));

rtktartomnyra vonatkoz megszorts hasonlan mdosthat:


ALTER DOMAIN Nemrtk DROP CONSTRAINT FrfiVagyN;

7.5. Triggerek
A trigger egy aktualizlsi mvelet esetn vgrehajtand programrszletet definil. Alakja: CREATE TRIGGER nv { BEFORE | AFTER | INSTEAD OF } { DELETE | INSERT | UPDATE [OF oszlopok] } ON tbla [ REFERENCING [OLD AS rgi] [NEW AS j] [ FOR EACH ROW ] [WHEN (felttel)] programblokk; Jells: a fenti szintaxis lersban { x | y } azt jelenti, hogy x s y egyike vlaszthat. nv: a trigger neve. BEFORE, AFTER, INSTEAD OF: az aktualizlsi mvelet eltt, utn, vagy helyette lp mkdsbe a trigger. DELETE, INSERT, UPDATE OF: az aktualizlsi mvelet neve. ON tbla: ezen tbla aktualizlsakor lp mkdsbe a trigger. REFERENCING: lehetv teszi, hogy a tbla aktulis sornak aktualizls eltti s utni llapotra nvvel hivatkozzunk. FOR EACH ROW: ha megadjuk, akkor a trigger a tbla minden egyes sorra lefut, amelyet az aktualizlsi mvelet rint (sor szint trigger). Ha nem adjuk meg, akkor egy aktualizlsi mvelet esetn csak egyszer fut le a trigger (utasts szint trigger). WHEN felttel: a megadott felttel teljeslse esetn hajtdik vgre a trigger. programblokk: egy vagy tbb SQL utastsbl ll, vagy valamely programozsi nyelven rt blokk.

64

98. Plda sor szint triggerre. Az albbi trigger egy FizetsNapl (dtum, adszm, rgifiz, jfiz) tblban gyjti a fizets-mdostsok adatait:
CREATE TRIGGER fiz_napl AFTER UPDATE OF fizets ON Dolgoz REFERENCING OLD AS rgi NEW AS j FOR EACH ROW INSERT INTO FizetsNapl VALUES (SYSDATE, rgi.adszm, rgi.fizets, j.fizets);

A trigger engedlyezett vagy letiltott llapotban lehet. Ltrehozskor engedlyezett, vltoztats ALTER TRIGGER utastssal lehetsges (nem rszletezzk).

65

8. Begyazott SQL
Az SQL lehetsgeivel nem oldhat meg minden adatbzis kezelsi feladat. SQL-ben pldul nem hasznlhatk vltozk s vezrlsi szerkezetek, gy az adatbzis algoritmikus kezelse sem lehetsges. Ezrt az SQL utastsokat ltalban egy hagyomnyos algoritmikus programnyelv (C, Java, stb.) utastsaival keverten hasznljuk, s az SQL utastsokban felhasznlhatk a befogad programnyelv vltozi is. Ezt a megoldst nevezzk begyazott SQL-nek (embedded SQL). a) Befogad nyelv utastsai + begyazott SQL utastsok Elfordt (precompiler) b) Befogad nyelv utastsai + fggvnyhvsok Befogad nyelv fordtprogram + SQL fggvnyknyvtr c) Futtathat program 22. bra. Begyazott SQL fordtsa Jellemz megoldsi mdok: - Precompiler alkalmazsa (22. bra), amely a forrskdban felismeri az SQL utastsokat, s lecserli azokat a befogad nyelv fggvnyhvsaira (pldul Oracle Pro*C). - Az SQL nyelvet algoritmikus lehetsgekkel bvtik. Itt valjban nincs befogad nyelv, az algoritmikus nyelv s az SQL szerves egysget kpez. (Ilyen pldul az Oracle rendszer PL/SQL nyelve.) Ezt gy kpzelhetjk el, mint ha a 22. brn a)-bl kzvetlen fordtssal addna c). - A befogad nyelvben begyazott SQL utastsok helyett csak a nekik megfelel fggvnyhvsok hasznlhatk (pldul ODBC, JDBC, PHP). Ekkor a 22. brn eleve a b) fokozatrl indulunk. A tovbbiakban rszletesebben megnznk nhny SQL begyazsi mdszert.

8.1. SQL begyazs ANSI C-be


Nem konkrt implementcit, hanem az SQL2 szabvny ltal definilt ltalnos megoldst trgyaljuk. Befogad nyelvknt ANSI C-t tteleznk fel. Minden begyazott SQL utasts el EXEC SQL rand, az elfordt ez alapjn ismeri fel a neki szl utastsokat.

66

Kommunikcis vltozk: a befogad nyelv azon vltozi, amelyeket SQL utastsokban is hasznlni kvnunk. Ezeket EXEC SQL BEGIN DECLARE SECTION; ... EXEC SQL END DECLARE SECTION; utastsok kztt kell deklarlni. Csak olyan tpusok hasznlhatk, amelyeket a befogad nyelv s az SQL implementci egyarnt tmogat. A begyazott SQL utastsokban lnyegben brhol hasznlhatunk kommunikcis vltozt, ilyenkor annak neve el kettspont rand. SQLSTATE vltoz: hibakdot tartalmaz, az SQL utastsok lltjk be. ltalban 5 karakterbl ll, hibtlan vgrehajts esetn rtke '00000'. 99. Plda. Rekord felvtele a knyv tblba. A program a 23. brn lthat.
void jknyv() { EXEC SQL BEGIN DECLARE SECTION; char kszm[6]; char kszerz[30]; char kcm[50]; char SQLSTATE[6]; // a stringlezr karakter miatt 5+1 elem EXEC SQL END DECLARE SECTION; /* Itt a kpernyrl bekri a knyvszm, szerz, cm adatokat s letrolja a megfelel vltozkba. */ EXEC SQL INSERT INTO Knyv VALUES (:kszm, :kszerz, :kcm); if (strcmp(SQLSTATE,"00000")) ...; // hibazenet kirsa }

23. bra. j rekord felvtele a Knyv tblba

Lekrdezsek, kurzorok
A SELECT utasts begyazsa problematikus, mivel eredmnytblt ad vissza. Kt eset lehetsges: a) Egysoros lekrdezs. Ha a SELECT csak egy sort ad vissza, akkor EXEC SQL SELECT oszlopok INTO vltozk FROM ...; alakban hasznlhat. Ha a SELECT nem egy sort ad vissza, akkor a vltozk nem kapnak rtket, s SQLSTATE megfelelen belltsra kerl. Pldk:
EXEC SQL SELECT szerz, cm INTO :kszerz, :kcim FROM Knyv WHERE knyvszm = :kszm; EXEC SQL SELECT AVG(fizets) INTO :tlagfiz FROM Dolgoz;

b) Tbbsoros lekrdezs. Ha a SELECT tbb sort ad vissza, akkor egy rekordmutatt, gynevezett kurzort kell definilni: EXEC SQL DECLARE kurzornv CURSOR FOR alkrds;

67

A kurzor a lekrdezs (SELECT utasts) ltal definilt eredmnytblhoz rendeldik. Hasznlat eltt a kurzort meg kell nyitni: EXEC SQL OPEN kurzor; Hatsra a kurzor a tbla els sora el mutat. A kurzort lptetni az EXEC SQL FETCH FROM kurzor INTO vltozlista; utastssal lehet. Hatsra a kurzor a soron kvetkez rekordra lp, s annak mezi a vltozlista megfelel elemeibe troldnak. Ha a FETCH elrte a tbla vgt (az utols utni rekordra lp), akkor a vltozk nem kapnak rtket, s SQLSTATE-be a "02000" konstans kerl. Hasznlat utn a kurzort le kell zrni: EXEC SQL CLOSE kurzor; A lejrt kurzor jabb OPEN-nel jra megnyithat, gy a tbla tbbszr vgigjrhat. 100. Plda. Ksztsnk kimutatst egy vllalat dolgozirl, amely megadja, hogy az 50 000, 80 000, 120 000, 200 000, 500 000 rtkek ltal hatrolt jvedelemsvokba hny dolgoz esik. A program a 24. brn lthat. Az eredmny a dolgozoSzam tmbben keletkezik.
void jvedelemSvok() { int hatr[5] = {50000, 80000, 120000, 200000, 500000}; int dolgozSzm[6] = {0, 0, 0, 0, 0, 0}; int i; EXEC SQL BEGIN DECLARE SECTION; int jvedelem; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE sor CURSOR FOR SELECT fizets FROM Dolgoz; EXEC SQL OPEN sor; while (1) { EXEC SQL FETCH FROM sor INTO :jvedelem; if ( strcmp(SQLSTATE,"02000")==0 ) break; for (i=0; i<5; i++) if (jvedelem < hatr[i]) break; dolgozSzm[i]++; } EXEC SQL CLOSE sor; }

24. bra. Jvedelem statisztikt kszt program

68

Ha a tbla rekordjait ms sorrendben kvnjuk bejrni, a kurzor deklarcijba a SCROLL szt kell illeszteni: EXEC SQL DECLARE kurzornv SCROLL CURSOR FOR lekrdezs; Ezutn a FETCH utastsban az albbi kulcsszavak hasznlhatk: - NEXT: kvetkez sor (ez az alaprtelmezs), - PRIOR: elz sor, - FIRST, LAST: els ill. utols sor, - RELATIVE n: n sorral elre (vagy vissza, ha n negatv), - ABSOLUTE n: az n-edik sor. Plda:
EXEC SQL FETCH LAST FROM sor INTO :jvedelem;

Ha a sorokat valamilyen rendezettsg szerint kvnjuk bejrni, akkor a kurzort deklarl SELECT-ben az ORDER BY alparancsot kell alkalmazni. Plda:
EXEC SQL DECLARE sor CURSOR FOR SELECT fizets FROM Dolgoz ORDER BY nv;

void rendels() { EXEC SQL BEGIN DECLARE SECTION; char vev[20]; char csz[12]; int er, menny, rtk; char SQLSTATE[6]; EXEC SQL END DECLARE SECTION; EXEC SQL DECLARE rendelsSor CURSOR FOR SELECT * FROM Rendels; EXEC SQL OPEN rendelsSor; while (1) { EXEC SQL FETCH FROM rendelsSor INTO :vev, :csz, :menny, :rtk; if ( strcmp(SQLSTATE,"02000")==0 ) break; EXEC SQL SELECT egysgr INTO :er FROM ru WHERE cikkszm = :csz; rtk = er * menny; if (rtk < 2000) EXEC SQL DELETE FROM Rendels WHERE CURRENT OF rendelsSor; else EXEC SQL UPDATE Rendels SET rtk = :rtk WHERE CURRENT OF rendelsSor; } EXEC SQL CLOSE rendelsSor; }

25. bra. Rendelsek feldolgozsa

69

Aktualizl mveletek kurzorral


Az UPDATE s DELETE utastsok a kurzor sorra is alkalmazhatk, ha a WHERE felttelben CURRENT OF kurzornv szerepel. 101. Plda. Egy keresked cg az rukat s a berkez rendelseket az albbi tblkban tartja nyilvn: RU(cikkszm, megnevezs, egysgr) RENDELS(vev, cikkszm, mennyisg, rtk) Feladat: a rendelsek feldolgozsa gy, hogy meghatrozzuk minden ttel rtkt (egysgr*mennyisg). Ha ez kisebb 2000-nl, akkor a rendelst trljk, egybknt berjuk az rtket a RENDELS tblba. A program a 25. brn lthat.

Dinamikus SQL
Ha egy adatbzis-alkalmazst igazn rugalmass kvnunk tenni, akkor a felhasznl szmra biztosthatjuk, hogy maga is megfogalmazhasson lekrdezseket. Ilyenkor a megfelel SQL utasts csak futs kzben llthat el, fordtsi idben mg nem. Ezt teszi lehetv az EXEC SQL PREPARE sqlutasts FROM string; utasts, amely a befogad nyelven ellltott string karaktersorozatot elemzi, s belle az sqlutasts SQL-vltozba ellltja a megfelel (vgrehajthat bels formtum) SQLutastst. Ezutn az EXEC SQL EXECUTE sqlutasts; segtsgvel vgrehajthat az utasts. Minden egy lpsben is elvgezhet az EXEC SQL EXECUTE IMMEDIATE string; utastssal. (A sztvlaszts akkor indokolt, ha az elemzett utastst sokszor kell vgrehajtani, s a tbbszri elemzs idejt meg akarjuk takartani.) Az eljrs alkalmazsra a 26. bra ad pldt.

void felhasznliKrds() { EXEC SQL BEGIN DECLARE SECTION; char *krds; EXEC SQL END DECLARE SECTION; /* A felhasznl ltal megadott krdsbl SQL utastst tartalmaz string szerkesztse 'krds'-be */ EXEC SQL EXECUTE IMMEDIATE :krds; }

26. bra. Felhasznli lekrdezst feldolgoz program

70

8.2. ODBC
ODBC = Open Database Connectivity ODBC 1.0 specifikci: Microsoft, 1992. Az ODBC magja szabvnyos, vagyis lnyegben megfelel az SQL:1999 szabvny CLI (= Call-Level Interface) specifikcijnak, amelyet rviden SQL/CLI-nek neveznek. A lnyeg: norml C nyelv programot rhatunk, amelynl egy fggvnyknyvtr segtsgvel rjk el az adatbzist, alapveten SQL utastsokat kldhetnk a DBMS-nek. Ezzel bizonyos rendszerfggetlensg rhet el: klnbz platformokon s klnbz DBMS-ek esetn ugyanaz a forrsprogram hasznlhat. (Problma viszont, hogy az egyes DBMS-ek SQL-szintaxisa eltrhet.) Windows krnyezetben a befogad program elejn ltalban az albbiakat kell includeolni:
#include #include #include #include <stdio.h> <windows.h> <sql.h> <sqlext.h>

Hatsra az ODBC fggvnyek, tpusok, konstansok hasznlhatk. Az ODBCfggvnyek ltal visszaadott rtk SQLRETURN tpus, rtke 0 hibtlan vgrehajts esetn. Az albbi adatstruktrk hasznlhatk: - Krnyezet (Environment): a kliens hozza ltre a DBMS-sel val kapcsolat elksztshez. - Kapcsolat (Connection): DBMS-sel val kapcsolat lersra szolgl. Egy krnyezethez tbb kapcsolat tartozhat. - ODBC-utasts (Statement). Egy SQL utasts lersra szolgl. Minden ODBCutasts valamely kapcsolathoz tartozik. Ugyanaz az ODBC-utasts klnbz idpontokban klnbz SQL-utastsokat tartalmazhat. A fentiek kezelse handle-k (az adatstruktrra mutat pointerek) segtsgvel trtnik. Ezek tpusai sorrendben SQLHENV, SQLHDBC, SQLHSTMT. Handle ltrehozsra szolgl fggvny:
SQLAllocHandle(hType, hIn, hOut)

hType: a handle tpusa, lehetsges rtkei: SQL_HANDLE_ENV, SQL_HANDLE_DBC, SQL_HANDLE_STMT. hIn: a magasabb szint elemet megad handle. Krnyezet esetn SQL_NULL_HANDLE adand meg. hOut: az SQLAllocHandle ltal ltrehozott handle cme. Plda adatbzis-szerverhez val kapcsoldsra (a kipontozott rszek a konkrt szoftverkrnyezettl fggenek):
SQLHENV env; SQLHDBC dbc; SQLHSTMT stmt; SQLRETURN ret; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); // belltjuk a krnyezeti paramtereket: SQLSetEnvAttr(env, ...);

71 SQLAllocHandle(SQL_HANDLE_DBC, env, &dbc); // megnyitjuk a kapcsolatot: ret = SQLDriverConnect(dbc, ...); // ellenrizzk, hogy a kapcsolatteremts sikeres volt-e if (SQL_SUCCEEDED(ret)) { printf("Kapcsolat ltrejtt\n"); } else { printf("Sikertelen kapcsolds\n"); exit(-1); } SQLAllocHandle(SQL_HANDLE_STMT, dbc, &stmt);

SQL utasts elksztse:


SQLPrepare(sh, st, sl)

sh: utasts handle st: SQL utastsra mutat pointer sl: az SQL utasts hossza (karaktereinek szma). SQL_NTS megadsa esetn a rendszer maga llaptja meg a hosszat a lezr null-karakter alapjn. A fggvny hatsra az sh handle a tovbbiakban az st utastst reprezentlja. SQL utasts vgrehajtsa:
SQLExecute(sh)

sh: utasts handle A vgrehajts evidens INSERT, UPDATE, DELETE esetn. SELECT esetn gy kell elkpzelni, hogy a lekrdezs eredmnye valahol ltrejn kszen arra, hogy elrjk egy implicit kurzorral. SQL utasts kzvetlen vgrehajtsa:
SQLExecDirect(sh, st, sl)

sh: utasts handle st: SQL utastsra mutat pointer sl: az SQL utasts hossza Az utasts hatsa egyenrtk az
SQLPrepare(sh, st, sl) SQLExecute(sh)

prral. Plda: Egy rukat nyilvntart Raktr(cikkszm, megnevezs, egysgr, mennyisg) tblban az rakat cskkenti 10%-kal:
SQLPrepare(stmt, "UPDATE raktr SET egysgr = egysgr*0.9", SQL_NTS); SQLExecute(stmt);

Implicit kurzor hasznlata:


SQLFetch(sh)

Felttelezzk, hogy az sh utasts mr vgrehajtsra kerlt, egybknt a fetch hibt jelez. Ha a fggvny visszaadott rtke az SQL_NO_DATA_FOUND konstanssal jellt rtk, ez azt jelenti, hogy a lekrdezs nem adott vissza tbb rtket (tbla vge). Plda:
ret = SQLFetch(stmt); if (ret == SQL_NO_DATA_FOUND) printf("\n Nincs adat.\n");

72

Tbla oszlopainak kapcsolsa befogad nyelvi vltozkhoz:


SQLBindCol(sh, colNo, colType, pVar, varSize, varInfo)

sh: utasts handle colNo: az oszlop sorszma a tblban colType: az oszlopnak megfelel befogad nyelvi tpus. Lehetsges rtkei pldul SQL_C_CHAR, SQL_C_SHORT. pVar: pointer a befogad nyelvi vltozra. varSize: a pVar-nak megfelel vltoz mrete byte-ban. varInfo: pointer egy integer vltozra, amelyben az SQLBindCol fggvny tovbbi informcit helyezhet el. Plda: A Raktr tblban adott rhoz legkzelebbi egysgr cikk adatainak lekrse:
int legkzelebbiCikk(int adottr) { int diff, klnbsg, jCikk; SQLHENV env; SQLHDBC con; SQLHSTMT stmt; SQLINTEGER c, a, cInfo, aInfo; diff = jCikk = -1; SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &env); SQLSetEnvAttr(...); SQLAllocHandle(SQL_HANDLE_DBC, env, &con); SQLAllocHandle(SQL_HANDLE_STMT, con, &stmt); SQLDriverConnect(...); SQLPrepare(stmt, "SELECT cikkszm, egysgr FROM Raktr", SQL_NTS); SQLExecute(stmt); SQLBindCol(stmt, 1, SQL_C_SHORT, &c, size(c), &cInfo); SQLBindCol(stmt, 2, SQL_C_SHORT, &a, size(a), &aInfo); while (SQLFetch(stmt) != SQL_NO_DATA_FOUND) { klnbsg = abs(a - adottr); if (diff == -1 || diff > klnbsg) { diff = klnbsg; jCikk = c; } } return (jCikk); }

Paramterek tadsa: Az SQLPrepare-ben a paramterek helyre krdjel rand. Az i-edik krdjel felel meg az i-edik paramternek. A paramterekhez rtk rendelhet
SQLBindParameter(...)

segtsgvel. A fggvnynek 10 argumentuma van, albb csak a fontosabbakat hasznljuk. Plda: INSERT utasts paramterezse a Dolgoz(adszm, nv, cm, fizets) tblra:
SQLPrepare(utasitas, "INSERT INTO dolgozo(nev, cim) VALUES (?, ?)", SQL_NTS); SQLBindParameter(utasitas, 1,..., dolgozonev,...); SQLBindParameter(utasitas, 2,..., dolgozocim,...); SQLExecute(utasitas);

Lekrdez ciklusok optimalizlsa: Mivel az eredmnyhalmaz soronknti lekrse lass, megadhatunk sorhalmazt:
SQLSetStmtAttr(stmt, SQL_ATTR_ROW_ARRAY_SIZE, 20,...)

73

A fenti pldban egyszerre 20 sort krnk le, amely pldul knyelmesen elfrhet egy hlzati csomagban. Ezzel viszont a ciklusszervezs jval bonyolultabb vlik, a rszletektl eltekintnk.

8.3. JDBC
JDBC = (Java Database Connectivity). Az ODBC-hez hasonl, de a Java objektumorientlt jellegnek felel meg. Elszr egy JDBC driver betltse szksges a megfelel DBMS-hez (ennek mdja platformfgg). Eredmnyeknt egy DriverManager objektum jn ltre, amely az ODBC-beli krnyezet-nek felel meg. Kapcsolds az adatbzishoz (az ODBC kapcsolat ltrehozshoz hasonlan):
Connection kapcsolat = DriverManager.getConnection(url,user,password)

Vagyis, a DriverManager getConnection metdust alkalmazva egy Connection tpus vltoz jn ltre. url: az adatbzist azonostja, pldul "jdbc:mysql://home.cab.u-szeged.hu:3306/test". user: a DBMS-felhasznl azonostja. password: a DBMS-felhasznl jelszava. Utasts ltrehozsa a CreateStatement metdus paramteres s paramter nlkli vltozatval lehetsges:
CreateStatement()

Statement tpus objektumot ad vissza. SQL utasts nem tartozik hozz, hasonlan a ODBC-beli SQLAllocHandle-hez.
CreateStatement(sqlutasits)

SQL-utastsstringet kap, s PreparedStatement tpus objektumot ad vissza. ODBCben az SQLAllocHandle + SQLPrepare prnak felel meg. Utasts vgrehajtsa: kt-kt (paramteres s paramter nlkli) vltozat: "query" lekrdezsekre, "update" minden mdost utastsra (INSERT, CREATE TABLE stb.) vonatkozik.
executeQuery(sqllekrdezs)

Statement objektumra hajtdik vgre, ResultSet tpus objektumot ad vissza, amely az eredmnysorok multihalmaza.
executeQuery()

PreparedStatement objektumra hajtdik vgre. Szintn ResultSet objektumot ad vissza.


executeUpdate(sqlmdosts)

Statement objektumra hajtdik vgre, az adatbzist mdostja, nincs visszaadott eredmnyhalmaz.


executeUpdate()

PreparedStatement objektumra hajtdik vgre, egybknt mint az elz. Plda: Egy rukat nyilvntart Raktr(cikkszm, megnevezs, egysgr, mennyisg) tblban a cikkek rt cskkenti 10%-kal:

74 void rcskkents() { Connection kapcsolat = DriverManager.getConnection(...); Statement stmt = kapcsolat.createStatement(); stmt.executeUpdate("UPDATE Raktr SET egysgr = egysgr*0.9"); kapcsolat.close(); //kapcsolat lezrsa }

Implicit kurzor hasznlata: A ResultSet osztlyhoz az albbi metdusok tartoznak: next(): az implicit kurzort a kvetkez sorra lpteti (els meghvskor lp az els sorra). FALSE rtket ad vissza, ha nincs tbb sor. getString(i), getInt(i), getFloat(i), stb.: az aktulis sor i-edik mezjt adja vissza. Plda: A Raktr tblban adott rhoz legkzelebbi egysgr cikk adatainak lekrse:
int legkzelebbir(int adottr) { Connection kapcsolat = DriverManager.getConnection(...); PreparedStatement stmt = kapcsolat.createStatement( "SELECT cikkszm, egysgr FROM Raktr" ); ResultSet tbla = stmt.executeQuery(); int diff = -1; int jCikk = -1; while(tbla.next()) { int c = tbla.getInt(1); int a = tbla.getInt(2); int aktdiff = (a - adottr)*(a - adottr); if(diff == -1 || diff > aktdiff) { diff = aktdiff; jCikk = c; } } kapcsolat.close(); return(jCikk); }

Paramterek tadsa: Az ODBC-hez hasonlan krdjelekkel trtnik. A setString(i, v), setInt(i, v), stb. metdusokat hasznlhatjuk, amelyek az SQL-utasts i-edik paramterhez a v rtket rendelik. Plda: INSERT utasts paramterezse a Dolgoz(adszm, nv, cm, fizets) tblra:
PreparedStatement utasitas = kapcsolat.createStatement( "INSERT INTO dolgozo(nev, cim) VALUES (?, ?)"); utasitas.setString(1, nev); utasitas.setString(2, cim); utasitas.executeUpdate();

8.4. PHP
A PHP tulajdonkppen egy ltalnos cl algoritmikus nyelv, amelyet dinamikus weboldalak ellltsra terveztek (PHP = Personal Home Page). Rendszerint az albbi hrom szoftvert egytt alkalmazzk: - Apache: kzkedvelt web szerver program. Letlthet: www.apache.org - PHP interpreter. Letlthet: www.php.net.

75

- MySQL: adatbzis szerver. Letlthet: www.mysql.com. Clszerbb azonban ezeket nem kln-kln letlteni, hanem egytt, az XAMPP telept csomag formjban: www.apachefriends.org/en/xampp.html A fejlesztsi technolgia lnyege: - A statikus, HTML nyelv weblapok forrsszvegbe PHP programrszeket illesztnk. Az Apache-ba integrlt PHP-rtelmez ezeket vgrehajtja, melynek eredmnyeknt egy mdostott HTML-kd generldik, s az Apache ezt a weblapot kldi ki a kliens fel. - A PHP program fggvnyhvsokon keresztl ri el a MySQL szervert, s az adatbzisbl lekrt adatokkal ptheti fel a dinamikus weblapot. A fenti technolgia rszletes bemutatst a pub/Adatbzisok/PhpMysql.ppt tananyag tartalmazza.

76

9. Adatbiztonsgi mechanizmusok
9.1. Tranzakcis feldolgozs
Tranzakci: adatbzis-kezel mveletek sorozata, amelyeket egy egysgknt clszer kezelni, mert a rszmveletek kzben tmenetileg srlhet az adatbzis integritsa. 102. Plda. A SZMLA(szmlaszm, egyenleg) tbln banki tutals vgrehajtsa egyik szmlrl a msikra. A megfelel begyazott SQL program a 27. brn lthat.
void tutals() { EXEC SQL BEGIN DECLARE SECTION; int szsz1, szsz2; // szmlaszmok int egyenl; int sszeg; EXEC SQL END DECLARE SECTION; EXEC SQL SELECT egyenleg INTO :egyenl FROM Szmla WHERE szmlaszm = :szsz1; if (egyenl >= sszeg) { EXEC SQL UPDATE Szmla SET egyenleg = egyenleg - :sszeg WHERE szmlaszm = :szsz1; EXEC SQL UPDATE Szmla SET egyenleg = egyenleg + :sszeg WHERE szmlaszm = :szsz2; } else printf("Nincs fedezet!"); }

27. bra. Banki tutalst vgrehajt program Problma: Ha hardver vagy szoftver hiba miatt egy tranzakci vgrehajtsa kzben a DBMS lell (rendszersszeomls), s ez a fenti pldban a kt UPDATE utasts kztt kvetkezik be, akkor az tutalt sszeg elvsz. Megolds: Biztostani kell, hogy vagy vgrehajtdjon a tranzakci valamennyi utastsa, vagy egyik se hajtdjon vgre. Rendszersszeomls esetn ez utbbi azt jelenti, hogy jraindtsakor a tranzakci eltti llapotot kell reproduklni. Tranzakcis feldolgozst tmogat SQL utastsok: COMMIT; Tranzakci lezrsa, az eddig kiadott SQL parancsok hatsnak vglegestse. COMMIT eltt a vltozsok mg visszafordthatk. ltalban kt COMMIT kztt kiadott SQL parancsok sorozatt tekintjk tranzakcinak. A fenti tutals() fggvnyt gy alakthatjuk tranzakciv, hogy az elejre s vgre
EXEC SQL COMMIT;

77

utastst runk. SAVEPOINT azonost; Tranzakcin belli pontot azonost (cmke jelleg funkci). ROLLBACK [TO savepoint]; Vltozsok visszaprgetse a tranzakci elejig, vagy a tranzakcin bell megadott SAVEPOINT-ig.

9.2. Prhuzamos hozzfrsek


Kliens-szerver modellben ha a tranzakcik prhuzamosan idosztsban futnak, akkor egymst megzavarhatjk, ha egyik vagy mindkett mdostja az adatbzist. A 27. bra szerinti program esetn ha az els szmla egyenlege 100 000 Ft, s ebbl ketten egyszerre kvnnak tutalni 80 000 Ft-ot, akkor a fedezetellenrzs dacra az egyenleg negatv lesz (28. bra). 1. folyamat: sz1 fedezet ellenrzs OK. 2. folyamat: sz1 fedezet ellenrzs OK. 1. folyamat: sz1: egyenleg := egyenleg 80000 (j egyenleg: 20000) 2. folyamat: sz1: egyenleg := egyenleg 80000 (j egyenleg: 60000) 1. folyamat: sz2: egyenleg := egyenleg + 80000 2. folyamat: sz3: egyenleg := egyenleg + 80000 28. bra. Hibs fedezetellenrzs idosztssal sszefsld sz1 sz2 s sz1 sz3 szmlk kztti tutalsok esetn

Zrols
A fenti jelleg problmkra a megolds: az adatok zrolsa (locking), vagyis az adatok elrhetsgnek korltozsa ms tranzakcik rszre. A zrols ltalban tranzakci kzben jn ltre, s a tranzakci vgig (COMMIT vagy ROLLBACK vgrehajtsig) tart. Zrolsi szintek: 1. A teljes adatbzis zrolsa. Az elbb indul tranzakci zrolja az egsz adatbzist mindaddig, amg vget nem r. Ekkor a msodik tranzakci el sem tud indulni az els befejezse eltt. Ez tulajdonkppen azt jelenti, hogy nem engednk meg prhuzamos hozzfrseket, amely nagy adatbzis s sok egyidej kliens folyamat esetn elfogadhatatlan. 2. Tbla zrolsa: a tranzakci csak azt a tblt zrolja, amellyel dolgozik. Ez mr sok esetben megfelel lehet, de a banki tutals esetn a teljes Szmla tbla (sszes folyszmla) zrolsa mg mindig elfogadhatatlan. 3. Sor szint zrols. Nem a teljes tblt, hanem csak a mvelet ltal rintett sor(oka)t zroljuk. Zrolsi mdok. A DBMS-ek sokfle zrolsi mdot alkalmaznak, a kt legfontosabb: - Megosztott (shared) zr: lnyegben olvassi jogot ad a zrol tranzakcinak. Egy objektumra (tblra vagy sorra) egyszerre tbb megosztott zr lehet rvnyben.

78

- Kizrlagos (exclusive) zr: mdostst is lehetv tesz. Egy objektumra egyszerre csak egy kizrlagos zr lehet rvnyben, s mellette semmilyen ms zr nem megengedett. A zrols implicit vagy explicit formban trtnhet. Implicit zrols: A DBMS adatelrskor ltalban automatikus zrolst hajt vgre, pldul minden INSERT, UPDATE, DELETE utasts vgrehajtsakor az rintett objektumokon zrols trtnik. Explicit zrols: Egyes DBMS-ek (pl. Oracle) SQL utastsokat biztostanak felhasznli zrolshoz. Tbla zrolsa: LOCK TABLE tblanv IN zrolsimd MODE [NOWAIT]; Ha az utasts vgrehajtsakor a tblt ms tranzakci mr zrolta, akkor az utasts vrakozik a zrols feloldsig. Viszont, ha az utasts vgre a NOWAIT opcit illesztjk, akkor a DBMS egy zenet ksretben azonnal visszaadja a vezrlst. Plda:
LOCK TABLE dolgoz IN EXCLUSIVE MODE NOWAIT;

Sor szint zrolshoz a SELECT vgre FOR UPDATE [OF oszlopok] rand, ekkor az utasts zrolja a SELECT ltal kivlasztott sorokat. Plda:
SELECT * FROM Dolgoz WHERE osztlykd='A11' FOR UPDATE;

A zrolsok miatt holtpont (deadlock) lphet fel, vagyis prhuzamos folyamatok egymsra vrhatnak, pldul: 1. tranzakci: T tbla zrolsa, S tbla zrolsa, COMMIT 2. tranzakci: S tbla zrolsa, T tbla zrolsa, COMMIT -----------------------------------------------------------------------------> id Ebben a pldban az 1. tranzakci elszr zrolja a T tblt, egyidejleg a 2. tranzakci az S tblt. Ezutn az 1. tranzakci S-et, a 2. tranzakci T-t zroln, de klcsnsen egymsra vrnak, s sohasem jutnak el a tranzakci vgig, amely a zrols feloldst jelenten. A DBMS ltalban nem tudja megakadlyozni, de szleli a holtpontot, s ilyenkor visszaprgeti az azt elidz tranzakcikat.

Izolcis szintek
Prhuzamosan fut tranzakcik esetn az albbi anomlik lphetnek fel: a) Ktes adat olvassa (dirty read): ms tranzakci ltal mdostott, de mg nem vglegestett adat olvassa. b) Vltoz adat olvassa (nonrepeatable read): a tranzakci jraolvas egy adatot, amelyet kzben ms (vglegestett) tranzakci mdostott vagy trlt, gy a kt olvass eredmnye eltr egymstl. c) fantom adat olvassa (phantom read): a tranzakci jraolvas egy tblt, amelybe kzben ms (vglegestett) tranzakci j sorokat szrt be. A fenti anomlik kiszrse a tranzakci izolcis szintjnek megadsval lehetsges:

79

SET TRANSACTION [elrs] [ISOLATION LEVEL izolci]; Az utasts a tranzakci elejn adhat ki. Az elrs paramter lehetsges rtkei: - READ ONLY: a tranzakci csak olvassa az adatbzist. - READ WRITE: a tranzakci olvassa s rja is az adatbzist. Alaprtelmezs: izolci = READ UNCOMMITTED esetn READ ONLY, minden ms esetben READ WRITE. Az izolci paramter lehetsges rtkei: - READ UNCOMMITTED: ktes adat olvassa engedlyezett. Ekkor az a), b), c) anomlik egyarnt fellphetnek. - READ COMMITTED: ktes adat olvassa nem engedlyezett. Itt csak a b), c) anomlik lphetnek fel. - REPEATABLE READ: ktes adat olvassa nem engedlyezett, s az olvasott adatokat ms folyamat nem mdosthatja a tranzakci vgig. Itt csak a c) anomlia fordulhat el. - SERIALIZABLE: sorosthat tranzakci, vagyis prhuzamos vgrehajtsa egyenrtk kell hogy legyen a sorban egyms utni vgrehajtssal. Itt egyik anomlia sem lphet fel. Alaprtelmezs: SERIALIZABLE. Minl magasabb szint izolcit alkalmazunk, annl nagyobb az adatbiztonsg, de cskken a prhuzamosts lehetsge. Megjegyzsek: - A READ ONLY tranzakcik korltlanul prhuzamosthatk egymssal. - A READ WRITE + READ UNCOMMITTED tranzakcik a legveszlyesebbek (ezrt READ UNCOMMITTED esetn az alaprtelmezs READ ONLY). A 28. bra szerinti anomlia megszntethet, ha a tranzakci elejn zroljuk a Szmla tblt, vagy kiadjuk a SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; utastst, amely egybknt az SQL2-ben alaprtelmezs. 103. Plda. Replgpre helyfoglals: a program elszr lefoglalja az els szabad helyet, majd megkrdezi az gyfelet, hogy elfogadja-e azt. Ha igen, akkor vglegest (COMMIT), ha nem akkor visszavon (ROLLBACK). Ebben a pldban ktes adat olvassa trtnhet a kvetkezkppen: a T1 tranzakci ideiglenesen lefoglalja pldul az 52. szm helyet. A prhuzamosan fut tranzakci mr az 52-es helyet foglaltnak rzkeli, ezrt csak ms helyet tud foglalni (ha van). Ugyanakkor - az gyfl visszautastsa miatt - T1 ksbb felszabadtja az 52-es helyet, de azt T2 mgsem tudta lefoglalni. Ha gy dntnk, hogy a lert anomlia nem jelent komolyabb veszlyt s vrhatan igen ritkn fog fellpni, akkor SET TRANSACTION READ WRITE ISOLATION READ UNCOMMITTED; kiadsval gyorsthatjuk a prhuzamos tranzakcik feldolgozst.

80

9.3. Jogosultsgok
Minden adatbziselemnek van tulajdonosa, spedig az a felhasznl, aki ltrehozta. A tulajdonos minden joggal rendelkezik az adott elem felett. Jogosultsg adomnyozsa: GRANT jogosultsgok ON adatbziselemek TO felhasznlk [WITH GRANT OPTION]; Jogosultsg: - SELECT: lekrdezs engedlyezse. - ALTER: struktramdosts engedlyezse (ALTER TABLE). - INSERT[(oszlopok)], UPDATE[(oszlopok)], DELETE: tbla mdosts engedlyezse a megfelel utastssal. Oszlopok megadsa esetn az engedly csak az adott oszlopokra vonatkozik. - REFERENCES: kls kulcs hivatkozs engedlyezse az adatbziselemre, - ALL PRIVILEGES: az sszes adomnyozhat jogosultsg. Adatbziselem: amelyre a jogosultsgot adomnyozzuk. Felhasznl: akinek a jogosultsgot adomnyozzuk. WITH GRANT OPTION: tovbbadomnyozsi jog adsa. Engedlyezsi diagram: csompontjai jogosultsgot, lei adomnyozst jelentenek. - csompont: adott F felhasznlnak adott A adatbziselemre vonatkoz adott J jogosultsga (F,A,J). - l: (F1,A1,J1) (F2,A2,J2) azt fejezi ki, hogy F1 felhasznl az A1 elemre rvnyes J1 jogosultsga alapjn F2-nek az A2 elemre J2 jogot adomnyozott. Jogosultsg visszavonsa: REVOKE jogosultsgok ON adatbziselemek FROM felhasznl [CASCADE]; CASCADE: a visszavont jogosultsg alapjn tovbbadomnyozott jogosultsgok is visszavonsra kerlnek - feltve, hogy ugyanazt a jogot az illet ms forrsbl nem szerezte meg. Egy SQL utastst csak akkor hajt vgre a rendszer, ha a felhasznl a vgrehajtshoz szksges valamennyi jogosultsggal rendelkezik. Pldk:
GRANT SELECT ON Dolgoz TO Kovcs, Tth; GRANT UPDATE(lakcm) ON Dolg1 TO Horvth WITH GRANT OPTION; REVOKE SELECT ON Dolgoz FROM Tth;

81

10. Az Access adatbzis-kezel rendszer


10.1. ltalnos jellemzs
Az Access a Microsoft ltal fejlesztett relcis adatbzis-kezel program. Az Office programcsomag professzionlis vltozatnak rsze, de kln is megvsrolhat. Felhasznlbart rendszer: egyszer alkalmazsok interaktvan, programrs nlkl elkszthetk, komolyabb alkalmazsokhoz Visual Basic programmodulok kapcsolhatk. Az Access nll rendszer, de sokoldalan egyttmkdik a Microsoft SQL Server adatbziskezelvel. Albbiakban az Access 2000 verzit mutatjuk be, de a lertak jelents rsze ms vltozatokra is rvnyes. Egy Access adatbzis az albbi tpus objektumokat tartalmazhatja (zrjelben az angol elnevezs): Tbla (table): relcis adattbla. rlap (form): adatok aktualizlsra szolgl, egyedileg tervezhet kpernyablak. Lekrdezs (query): interaktvan szerkesztett, vagy SQL alap lehet. Jelents (report): formzott, nyomtathat lista, amely lnyegben egy lekrdezs eredmnyt tartalmazza. Adatelrsi lap (page): interneten keresztli adatkapcsolatot biztost (az Access 2000 verziban jelent meg). Makr (macro): programknt rgztett mveletsor, amely szksg esetn Visual Basic kdd konvertlhat. Modul (module): Visual Basic Program. Az egy adatbzishoz tartoz valamennyi tbla, rlap, lekrdezs s jelents egy kzs, .mdb kiterjeszts adatbzisfjlban troldik. A fjlban trolt informci kdolt, csak az Access segtsgvel dekdolhat. A fjl maximlis mrete 2 GB. Az Access indtsnak mdjai: 1. Start menbl, a szoksos mdon. (Az indul prbeszdpanel megjelentse az Eszkzk/Belltsok/Megjelentend lapon kikapcsolhat.) 2. Parancssorbl: ekkor tbbek kztt az albbi paramterek adhatk meg: adatbzisnv: a megadott adatbzisfjlt automatikusan megnyitja. /nostartup: az indt prbeszdpanel nem jelenik meg. /x makrnv: indtskor futtatja a megadott nev makrt. (Hasonl hatst rnk el, ha ltrehozunk egy AutoExec nev makrt.) 3. Programtrstssal, vagyis .mdb fjlra Entert tnk. j adatbzis ltrehozsa vagy meglv adatbzisfjl megnyitsa utn megjelenik az Adatbzis ablak (29. bra). Ennek bal oldaln vlaszthat ki az objektumtpus, utna a jobb oldalon megjelen elemek kzl lehet vlasztani. Az ablak tetejn szerepl Megnyits, Tervezs, j gombok rtelemszeren hasznlhatk a kivlasztott objektumtpusra.

82

29. bra: Az Adatbzis ablak

Az egyes adatbzis-objektumok ltrehozsra ltalban hrom lehetsgnk van: Automatikus: ekkor az Access automatikusan elkszti az objektum szoksos, legclszerbb vltozatt. Varzsl segtsgvel: a szoksos varzsl-technikval vgigvezet a tervezsi folyamaton. Tervez nzetben: teljesen manulis tervezs, itt a rendszer valamennyi lehetsge elrhet. A rendszer kezelse tbbnyire kzenfekv, ezrt a tovbbiakban csak a nemtrivilis krdsekre trnk ki.

83

10.2. Relcismk ltrehozsa, mdostsa


Az Adatbzis ablakban a Tbla objektumtpust vlasztjuk, s tervez nzetben elksztjk a relcismt. Kilpskor lehet a smnak nevet adni. Az egyes mezkhz az albbi adattpusok rendelhetk (a kivlasztott tpus paramterei a tervez ablak aljn llthatk be): Szveg (text): legfeljebb 255 karakter hossz string, alaprtelmezett hosszsga 50. Feljegyzs (memo): legfeljebb 64000 karakternyi szveg. Az ilyen tpus mez nem indexelhet. Szm (number): binris szm, altpusai: bjt, egsz (2 bjt), hossz egsz (4 bjt), egyszeres lebegpontos (4 bjt), duplapontos lebegpontos (8 bjt). Decimlis: legfeljebb 28 jegy decimlis szm, a tizedes jegyek szma tetszlegesen bellthat. Dtum/id: 100-tl 9999-ig terjed vekben dtum s idpont trolsra szolgl, hossza 8 bjt. Pnznem (currency): hossza 8 bjt. Szmll (autoNumber): automatikusan generlt egyedi sorszm, rtke egyesvel nvekszik j rekordok felvtelnl. Hossza 4 bjt (hossz egsz). Kulcsknt alkalmazhat, de ne hasznljuk, ha van ms azonost (pl. knyv ISBN szma) vagy termszetes kulcs (pldul {knyvszm, kivtel} ). Igen/nem (yes/no): logikai rtk. OLE objektum: ms alkalmazsban (pldul Word, Excel) ltrehozott objektum trolsra hasznlhat (szveges dokumentum, kp, hang, stb.). mrete legfeljebb 1 GB, nem indexelhet. Hiperhivatkozs: pldul URL cm. Hossza legfeljebb 64000 karakter, nem indexelhet. Mr meglv relcisma mdostshoz az Adatbzis ablakban elszr kivlasztjuk a tblt, majd a Tervezs gombra kattintunk.

Elsdleges kulcs ltrehozsa


Kivlasztjuk a kulcs sort (a tervez ablak bal szln), s az eszkztr Elsdleges kulcs gombjra kattintunk. sszetett (tbb mezbl ll) kulcs esetn Ctrl lenyomva tartsval tbb sort tudunk egyszerre kijellni. Ha nem adunk meg elsdleges kulcsot, akkor a sma megtervezse utn a rendszer megkrdezi, hogy hozzon-e ltre elsdleges kulcsot. Igen vlasz esetn automatikusan generl egy Azonost nev, szmll tpus mezt.

84

10.3. Kapcsolatok (kls kulcsok) kezelse


A kls kulcs felttelek megadst kapcsolatok megadsaknt rtelmezi a rendszer. Az Eszkzk/Kapcsolatok funkci kivlasztsval egy res tervezlapot kapunk, amelyen grafikusan megszerkeszthetjk a relcis adatbzissmt (30. bra). A jobb egrgomb segtsgvel egyesvel hozzadjuk az adatbzisunk tblit, mindegyiket a megfelel helyre mozgatjuk. Ezutn minden egyes ltrehozand kapcsolatnl egrrel az egyik kapcsoland mezt tmozgatjuk a msik kapcsoland mezhz. Tnyleges kls kulcs kapcsolathoz a megjelen ablakban a Hivatkozsi integrits megrzse jellngyzetet be kell billenteni, ekkor megjelenik az brn az "1 " jells, a rendszer ellenrzi az sszekapcsolt mezk tpusnak egyezst, s az adatok mdostsnl a tovbbiakban rvnybe lp a kls kulcs felttel ellenrzse. Kapcsolat trlse: egrrel kijelljk, majd jobb gomb.

30. bra. Relcis adatbzissma Access-ben

Elnevezsek. Az Access elsdleges tblnak nevezi az 1:N kapcsolatok 1-oldaln ll tblt, s illeszttblnak az N:M kapcsolatot megvalst tblt, s illesztsnek az sszekapcsols (join) mveletet.

10.4. Indexels
Adatbzis ablakban kivlasztjuk a tblt, megnyitjuk a Tervezs gombbal, majd Nzet/Indexek. A kinyl ablakban megadjuk az index nevt, majd meznv kivlasztsa. Alul az Indextulajdonsgoknl az Egyedi mez Igenre lltsval megkveteljk, hogy a tblban nem lehet kt azonos indexkulcs rtk. (Lnyegben gy lehet nem elsdleges kulcsot definilni.) sszetett (tbb mezbl ll) indexkulcs esetn az els meznl adjuk meg az index nevt, az indexkulcs tbbi mezjnl az indexnv oszlop maradjon resen.

85

10.5. Adatok aktualizlsa


Az Adatbzis ablakban kivlasztjuk a tblt, majd Megnyits gomb. A tblt Excel-hez hasonlan, tblzatknt szerkeszthetjk, ezt a megjelentst az Access Adatlap nzetnek nevezi. Mdosts kzben a rendszer llandan ellenrzi a kulcsfeltteleket. Az res string megadst a rendszer ltalban Null (definilatlan) rtknek tekinti.

10.6. rlap ltrehozsa


Automatikus rlap ltrehozs: vlasszuk ki az Adatbzis ablakban a megfelel tblt, majd Beszrs/Autorlap. rlap ltrehozsa varzslval: az Adatbzis ablak bal oldaln vlasszuk az rlap objektumtpust, majd a jobb oldalon az rlap ltrehozsa varzsl segtsgvel parancsot. Egyedi rlap tervezse: mint fent, de Tervez nzet vlasztsval. Indt rlap: Az Access mensorban Eszkzk/Indts, majd a megjelen ablakban rlap/Lap megjelentse.

31. bra. Egyszer rlap. Az rlaphoz a rendszer Visual Basic kdot generl, amely az rlap kivlasztsa utn Nzet/Kd paranccsal elrhet s javthat.

10.7. Adatelrsi lapok


Az adatelrsi lap lnyegben HTML nyelv rlap, amely az adatbzis webes felletrl val elrst tmogatja. Az adatelrsi lap kln HTML fjlon troldik, meglv weblapbl is ltrehozhat.

86

10.8. Lekrdezsek
Lekrdezs megadsnak f mdjai: varzslval, tervez nzetben, SQL-ben. Az interaktvan ellltott lekrdezsekbl a rendszer szintn SQL utastst generl, amely megtekinthet s tovbb szerkeszthet. Albb zrjelben utalunk az egyes interaktv belltsok SQL megfeleljre.

Lekrdezs ksztse tervez nzetben


Az Adatbzis-ablakban vlasszuk a lekrdezs objektumtpust, majd kattintsunk az j gombra, s vlasszuk a Tervez nzetet. A Tbla hozzadsa ablakbl vlasszuk ki a lekrdezshez szksges tblkat. Utna megjelenik a tervez ablak, amelynek belltsi lehetsgei: A Mez s Tbla sorokban a lekrdezshez szksges mezket adhatjuk meg. A Rendezs sorban az adott mez szerinti rendezettsget rhatjuk el (SQL: ORDER BY). A Megjelents sorban jellhet, hogy az adott mez megjelenjen-e az eredmnytblban, vagy pldul csak felttelek kirtkelshez szksges (SQL: SELECT). A Felttel sorban az adott mezre vonatkoz felttel adhat meg (SQL: WHERE). A mez nevt itt nem kell jra kirni, felttel lehet pldul "> 100". gyeljnk a Null rtk hasznlatra: "= Null" helyett "is Null" rand! A tervez ablak fels rszn a jobb egrgombra megjelen helyi menben tovbbi lehetsgek rhetk el, a fontosabbakat albb tekintjk t. SQL nzet: a megszerkesztett lekrdezsbl generlt SQL utasts megtekinthet s tetszlegesen trhat, de ha mdostva mentjk, akkor a tovbbiakban tervez nzetben mr nem kezelhet. Paramterek megadsa. Aktulis rtkket a kpernyn kri be a lekrdezs, amikor futtatjuk. Lekrdezs tpusnak megadsa: vlaszt (SQL: egyszer SELECT), kereszttbls (SQL: GROUP BY), tblakszt (az eredmnytblbl j tbla ltrehozsa), frisst (SQL: UPDATE), hozzfz (SQL: INSERT), trl (SQL: DELETE) Ha tbb tbla szerepel a lekrdezsben, s kzttk kapcsolat van, akkor azokat automatikusan join mvelettel kapcsolja ssze a rendszer. A lekrdezs vgrehajtsa az Adatbzis ablakban ketts kattintssal, vagy Megnyits gombbal trtnik.

87

SQL lekrdezs
Ha eleve SQL-ben kvnjuk megadni a lekrdezst, akkor az Adatbzis-ablakban vlasszuk ki a Lekrdezsek objektumtpust, majd az ablak tetejn az j nyomgombot, a megnyl j lekrdezs ablakban Tervez nzet vlasztand, a megnyl Tbla hozzadsa ablakot zrjuk be (nem adunk hozz tblt), a megjelen tervez ablak fels rszn jobb egrgombra feljv helyi menben vlasszuk az SQL nzetet. A megjelen szvegablakba berhat az SQL lekrdezs. Ha az SQL utasts a mez- s tblanevektl klnbz vltozt tartalmaz, akkor azt a rendszer paramternek tekinti, s lekrdezs vgrehajtsakor bekri annak aktulis rtkt. Megjegyzs: a dtum SQL-ben #h/nap/v# formban rand, de adatknt a tblba egyszeren v.h.nap mdon lehet rni.

88

11. A MySQL adatbzis-szerver


Nylt forrskd szoftver, letlthet a www.mysql.com honlaprl. Gyakran alkalmazzk a PHP nyelvvel s az Apache webszerverrel egytt internetes alkalmazsoknl.
Trtnet: 1979: UNIREG: bels hasznlatra sznt adatbzis-kezel (fejlesztje Michael Widenius, becenevn Monty) (Indexelt ISAM trolhelyeket kezel.) 1981. Monty a svd TcX DataKonsult AB vllalatnl dolgozik. 1994. A TcX az UNIREG-et alkalmazza dinamikus weblapok ksztshez, de az UNIREG-et tlsgosan kltsgesnek tallta. Ezrt a Hughes Technologies ltal fejlesztett mSQL (a miniSQL rvidtse, fejlesztje David Hughes) adatbzis-kezelvel prblkozott, amely azonban nem kezelte az indexeket, ezrt jval kisebb hatkonysg volt, mint az indexelt adatstruktrkat kezel UNIREG. 1995. A TcX elkszti MySQL 3.11-et Monty s Hughes egyttmkdsvel, az mSQL felletnek megtartsval s az UNIREG indexelsi technikjnak beptsvel. Ksbb a TcX talakul MySQL AB nven, a MySQL nylt forrskdv vlik. Becslsek szerint jelenleg tbb mint ngymilli szerveren fut. 2008. A Sun felvsrolja a MySQL AB-t. 2009. Az Oracle felvsrolja a Sun-t.

A MySQL jellemzi: - Nylt forrskd, tbbfle platformon futtathat (pl. Win, Mac, Solaris). - Tbbszlas rendszer: minden bejv kapcsolatot (kliens folyamatot) kln szl kezel. - Hatkonysg szempontjbl az egyik legjobb rendszer. - Kevesebb szolgltatst nyjt, mint egyes kereskedelmi rendszerek, pl. Oracle. - A tranzakcikezelst csak a MySQL jabb vltozatainl valstottk meg, tranzakcik izolcis szintjeit a rendszer tmogatja. A tranzakcikezels csak akkor van jelen, ha engedlyezzk. A hatkonysgot rontja. - SQL3-bl az objektum-relcis lehetsgeket a MySQL egyelre nem tartalmazza. - Alkalmazsprogramozsi fellet (API) a legtbb nyelvhez, pl. C, C++, Java, PHP. - Kls sszekapcsolsok tmogatsa. A MySQL fontosabb segdprogramjai: - mysql: SQL-alap konzol program, kliens folyamatok vezrlsre. A begpelt parancsok tbb sorosak lehetnek, pontosvesszvel kell ket lezrni. - mysqladmin: rendszeradminisztrcis feladatok elvgzsre. - mysqldump: adattblk defincijnak s tartalmnak fjlra rsa. - mysqlhotcopy: futsidben vgrehajtott biztonsgi ments. - mysqlimport: klnfle formtum adatok beolvassa MySQL tblkba. A MySQL tbbfle adattrolsi mechanizmust (storage engine) hasznl, ezek kt f tpusba sorolhatk: - Tranzakcis tblk: biztonsgosabbak, rendszersszeomls esetn helyrellthatk. COMMIT, ROLLBACK hasznlhat. Hibs mdosts esetn a korbbi llapot ll helyre. Hatkonyabb prhuzamos vgrehajts. - Nem tranzakcis tblk: a fenti elnyk nlkl, viszont gyorsabbak s kevesebb trolhelyet ignyelnek.

89

Fontosabb trolsi tpusok: - MyISAM: gyors, s fulltext search-et tmogat, nem tranzakcis. - MERGE: tbb MyISAM tblt egy tblaknt kezel, nem tranzakcis. - InnoDB: tranzakcis tblatpus sorzrolssal. - BDB (Berkeley-DB): tranzakcis tblatpus lapzrolssal. A trolsi tpust a CREATE TABLE utasts TYPE paramterben kell megadni, alaprtelmezs a MyISAM.

Kliens parancsok
Belps:
MYSQL U felhasznl P

A U kapcsol a felhasznlnvre, a P kapcsol a jelsz bekrsre utal. (Ha ez utbbit nem adjuk meg, akkor parancssorban kell megadni a jelszt, ami viszont ekkor lthat lenne a kpernyn.) A belps sikeres, ha utna megjelenik a mysql> prompt. Kilps:
QUIT

Adatbzisok listja:
SHOW DATABASES;

Telepts utn a rendszer verzitl fggen pldul az albbi adatbzisokat tartalmazhatja: - information_schema: rendszerkatalgus (a fontosabb tblk: tables, columns, views, triggers, user_privileges, ...) - mysql: a rendszer sajt adminisztrcis adatbzisa (tblk: user, ...). - test: res adatbzis tesztelsi clokra. Adatbzis ltrehozsa:
CREATE DATABASE adatbzis;

Adatbzis megnyitsa:
USE adatbzis;

Adatbzis trlse:
DROP DATABASE adatbzis;

Megnyitott adatbzis tblinak listja:


SHOW TABLES;

Adott tbla struktrjnak lekrse:


SHOW COLUMNS FROM tbla;

Tbb soros SQL parancsok is berhatk (lezrs pontosvesszvel), de ajnlatos ezeket kln TXT fjlon elkszteni, s tirnytssal vgrehajtani: <parancsfile.txt

90

12. Xbase tpus rendszerek


Xbase csald: az 1980-as vek elejtl klnbz cgek ltal fejlesztett, de kzs alapelvekre pl s tbb-kevsb kompatibilis PC alap relcis adatbziskezel rendszerek (RDBMS-ek): dBase, FoxBase, FoxPro, Clipper. Az els vltozatok igen egyszerek voltak (az els PC-k lehetsgeihez igazodva), ezeket fokozatosan tovbbfejlesztettk az alapelvek megtartsval. ltalnos jellemzk: Minden adattbla kln fjlon van. (.DBF kiterjeszts, szabvnyos, nyilvnos adatformtum. Szmos ms rendszer, pl. Excel is felismeri.) Algoritmikus programnyelv, amely az SQL begyazshoz hasonlan tartalmazza az adatbzis-kezel utastsokat is. Vgrehajtsa interpreterrel. Nem SQL-alap rendszerek, br az jabb vltozatok tbb-kevesebb SQL tmogatst is tartalmaznak. Az Xbase rendszerek ma mr elavultnak szmtanak, elssorban azrt, mert szemlletmdjuk idegen az SQL-tl (pl. munkaterlet, aktulis tbla fogalma). Ugyanakkor mg igen sok mkd alkalmazssal tallkozunk, ezrt az alapelvek megismerse ajnlott. A tovbbiakban a FoxPro parancsnyelvnek alapjaival ismerkednk meg, amelyek lnyegben vltozatlan formban rvnyesek az Xbase csald valamennyi rendszernl. Rszletesebb ismertets tallhat a jegyzet mellkletben (kln fjlon). Megjegyzs. Az Xbase rendszereknl egyetlen adattblt szoktak adatbzisnak nevezni, mi azonban tovbbra is adattblk egyttest tekintjk adatbzisnak.

12.1. A parancsnyelv alapjai


Minden parancsot j sorban kell kezdeni. Ha egy parancs nem fr ki egy sorban, a sor vgn pontosvesszvel jelzend, hogy a kvetkez sorban folytatdik. Adattpusok, konstansok: - karakteres: string. Szvegkonstans: 'szveg' vagy "szveg" - decimlis: eljeles decimlis szm, 9 byte-on troldik. - dtum: 'mm/dd/yy' string, a CTOD() fggvnnyel konvertlhat dtum tpusra. - logikai: .T., .F. - memo: vltoz hosszsg szvegmez. Tetszleges szveges informcit tartalmazhat. Mveletek: +, -, *, /, .AND., .OR., .XOR., .NOT. Vltoznevek: - meznv: az aktulis adattbla aktulis rekordjnak "meznv" mezjt jelenti. - tblanv>meznv: a "tblanv" adattbla aktulis rekordjnak "meznv" mezjt jelenti (pldul DOLG>LAKCIM) - munkavltoz: nem kell deklarlni, az els rtkadssal definildik a tpusa. jabb rtkadskor jradeklarldik (pldul VAL='szoveg', VAL=25).

91

- &vltoz: a "vltoz" nev karakteres vltoz aktulis rtkt helyettesti a parancsba (makrhelyettests, pldul USE &adat).

12.2. Relcismk s adattblk ltrehozsa, kezelse


SELECT munkaterlet Munkaterlet kivlasztsa. Az Xbase rendszerek legalbb 10 munkaterletet biztostanak az adattblk kezelsre, egy munkaterleten egyszerre csak egy tblt hasznlhatunk. Az egyes munkaterletek jellsre az 1, 2, ..., 10 szmokat, vagy az A, B, ..., J betket, vagy a munkaterleten megnyitott tbla nevt hasznlhatjuk. Pldul
SELECT 2

a 2. szm munkaterlet kivlasztst jelenti. Minden tovbbi parancs a kivlasztott munkaterletre, illetve az ott megnyitott tblra (aktulis tbla) vonatkozik. CREATE tblanv j relcisma (s adattbla) ltrehozsa. A parancs begpelse utn prbeszdes mdban megadhatjuk a tbla mezinek nevt, tpust s hosszt. Az eljrs vgn az jonnan ltrehozott adattbla megnyitsra kerl az aktulis munkaterleten. USE tblanv Adattbla megnyitsa. Ezzel egy mr ltez tblt (DBF file-t) nyitunk meg az aktulis munkaterleten. Mveletet vgezni csak megnyitott tbln lehet. A tblanv nlkli USE parancs az aktulis munkaterleten lv tblt lezrja. MODIFY STRUCTURE Relcisma mdostsa. Az aktulis tbla mezinek nevt, tpust s hosszt lehet mdostani. BROWSE Tbla megjelentse "tblzat" formban, mdostsi lehetsggel. INDEX ON kifejezs TO indexfile [UNIQUE] Tbla indexelse. A "kifejezs" tetszleges karakteres tpus kifejezs lehet, az indexkulcsot adja meg (ltalban meznv vagy meznevek konkatencija, amelyet + jellel jellnk). A parancs hatsra a megadott nev indexfile jn ltre. A tbla a tovbbiakban az index szerint rendezve jelenik meg a kpernyn, s a parancsok is eszerint kezelik. UNIQUE esetn az azonos kulcs rekordokbl csak egy pldnyt indexel. Plda a Knyv tbla indexelsre:
INDEX ON szerz+cm TO Szercm UNIQUE

Az indexfile kiterjesztse s formtuma rendszerenknt vltozik, pldul dBase tpus rendszereknl NDX, Fox tpus rendszereknl IDX a kiterjeszts.

12.3. Szrk alkalmazsa


Klnsen nagy adattblk esetn gyakori, hogy a trolt adatoknak csak egy rszvel szeretnnk dolgozni. Ezt egy gynevezett szr bekapcsolsval tehetjk meg. SET FILTER TO felttel

92

Szelekcis szr megadsa. A tovbbiakban csak a "felttel"-nek eleget tev rekordok rhetk el, minden kiadott parancs csak ezekre vonatkozik. (Ez a relcis algebra szelekci mveletnek felel meg.) Pldul a knyvtri adatbzis 2. vltozatban ha egy adott olvas ltal kiklcsnztt knyveket szeretnnk ttekinteni, akkor
SET FILTER TO olvasszm='355'

parancs kiadsa utn BROWSE segtsgvel knyelmesen megtekinthetjk s mdosthatjuk az adott olvashoz tartoz rekordokat. A felttel nlkl kiadott SET FILTER TO kikapcsolja a szrt. SET FIELDS TO meznvlista Projekcis szr megadsa. A tovbbiakban csak a felsorolt mezk jelennek meg a kpernyn. (Ez a relcis algebra projekci mveletnek felel meg.) A szr a SET FIELDS OFF/ON paranccsal ki/bekapcsolhat.

12.4. Kapcsolat kt tbla kztt


A relcis adatmodell lnyege, hogy tbb tbla kztt kls kulcsok segtsgvel kapcsolatot tud teremteni. Ennek gyakorlati hasznlatt tmogatja az albbi parancs: SET RELATION TO kapcsolmez INTO tblanv Kt tbla rekordmutatinak sszekapcsolsa. Az aktulis munkaterleten megnyitott tbla kerl sszekapcsolsra egy msik munkaterleten megnyitott "tblanv" tblval. Az aktulis tbla kell, hogy tartalmazzon egy "kapcsolmez" nev mezt (kls kulcs), s a "tblanv" tbla egy ennek megfelel (gyakran azonos nev, ltalban elsdleges kulcs szerept betlt) mez szerint kell hogy legyen indexelve. A parancs hatsra az aktulis tbla rekordmutatjnak mozgst automatikusan kveti a msik tbla rekordmutatja. Pontosabban, a msik tbla rekordmutatja mindig ppen arra a rekordra ll, amelynek index rtke megegyezik az aktulis tbla aktulis rekordjnak "kapcsolmez" rtkvel. Tekintsk pldul a knyvtri adatbzis 2. vltozatt, vagyis a kvetkez relcis smkat: Knyv (knyvszm, szerz, cm, olvasszm, kivtel) Olvas (olvasszm, nv, lakcm) Adjuk ki a kvetkez parancssorozatot:
SELECT 1 USE Olvas INDEX ON olvasszm TO Olvind SELECT 2 USE Knyv SET RELATION TO olvasszm INTO Olvas

Ha most a Knyv tbla rekordmutatja a "1782" szm "Jkai: Aranyember" cm knyvn ll (12. bra), akkor az Olvas tbla rekordmutatja automatikusan a knyvet kiklcsnz 355 szm olvasra ugrik. A FoxPro lehetv teszi, hogy kt kln ablakban (BROWSE paranccsal) egyidejleg lssuk az Olvas s Knyv tblk tartalmt, ekkor a SET RELATION parancs hatsa jl szemlltethet.

93

12.5. Algoritmikus eszkzk


Ciklusszervezs: DO WHILE felttel ciklusmag ENDDO Feltteles elgazs: IF felttel utastsok [ ELSE utastsok ] ENDIF Rekord mezje rtkad utastssal nem mdosthat, erre a clra az albbi szolgl: REPLACE meznv WITH kifejezs Program (.PRG fjl) futtatsa: DO programnv

94

Irodalom
Az Object Data Management Group honlapja. http://www.odmg.org Bognr Jlia: dBase III Plus. ComputerBooks, Budapest, 1993. Gazs Zoltn: Adatbziskezels FoxPro-ban (2.5, 2.6 DOS, Windows). ComputerBooks, Budapest, 1995. Gruber M.: SQL A-Z. Kiskapu kiad, 2003. Gulutzan P., Pelzer T.: SQL teljestmnyfokozs. Kiskapu kiad, 2003. Hernandez, M. J.: Adatbzis-tervezs. Kiskapu kiad, 2004. Kende Mria, Kotsis Domokos, Nagy Istvn: Adatbzis-kezels Oracle-rendszerben. Panem, Budapest, 2002. Lszl Jzsef: Dinamikus weboldalak, CGI programozs Windows s Linux rendszereken. ComputerBooks, Budapest, 2002. Ptery Kristf: Access 2000. LSI Oktatkzpont, 2000. Ramakrishnan R., Gehrke J.: Database Management Systems. McGraw-Hill, 2000. Reese G, Yarger R. J., King T.: A MySQL kezelse s hasznlata. Kossuth Kiad, 2003. Ullman J. D., Widom J.: Adatbzis rendszerek Alapvets. Msodik, tdolgozott kiads, Panem, 2008.