Előadást letölteni
Az előadás letöltése folymat van. Kérjük, várjon
1
ADATBÁZISKEZELÉS Kupcsikné Fitus Ilona
"... nem akkor alkottál tökéleteset, ha már nem tudsz mit hozzátenni, hanem ha már nem tudsz mit elvenni belőle.„ (Saint-Exupéry)
2
Adatbáziskezelés tematika
adat, információ adatmodellek, adatbázisok; adatmodellek alapelemei relációs adatmodell funkcionális függőség; normalizált adatbázis az SQL nyelv létrehozás, karbantartás, lekérdezés, megszorítások, jogok, adatbázis-specifikáció
3
Az információkezelés rövid története
·távközlési szakemberek munkái (Shannon: A hírközlés matematikai elmélete) ·a mat-i problémák megoldására használt szg-ek összetett információk feldolgozására alk. gépek ·a genetikai információ hordozójának felfedezése ·az információ mint "érték" ·igény született intelligens adatbázisokra és azokat kezelő programokra ·adatmodellekben való gondolkodás
4
Az információ ugyanúgy a világegyetem fizikai valóságához tartozik, mint az anyag és az energia.
Információ feldolgozó Jelentést hordozó inf. Tiszta inf. Pl. tiszta információ hordozói : tankönyv DNS-molekula számítógépes input adatok
5
ADATBÁZISOK-ra való igény
Adatbázis: adatoknak kapcsolataikkal együtt való ábrázolása, tárolása. Előnye: egyszerre sokan használhatják. Az adatok csak "egyszeresen" vannak tárolva. Adatbáziskezelő rendszer: szoftver, amellyel az adatbázist kezelni tudjuk. Két legfontosabb művelet: a létrehozás és visszakeresés Ennek megfelelően a nyelv részei: adatdefiníciós (létrehozás) adatkezelő (felvitel, módosítás, törlés, lekérdezés) adatbiztonság (hozzáférés)
6
Adatmodell - próbálkozások :
1. Formalista megközelítés gráfokkal való ábrázolás - a hierarchikus, hálós adatmodell elődje 2. Szemantikai megközelítés a modellt verbálisan, szavakkal írták le 3. Matematikai megközelítés matematikai struktúrák felhasználása - Codd relációs adatmodellje
7
Az adatmodellek alapelemei
EGYED TULAJDONSÁG KAPCSOLAT
8
DOLGOZÓ, AUTÓ, BETEG, ÜGYFÉL, CIKK, BIZONYLAT...
Az egyed : minden olyan dolog (objektum), ami minden más dologtól (objektumtól) megkülönböztethető. Például: DOLGOZÓ, AUTÓ, BETEG, ÜGYFÉL, CIKK, BIZONYLAT... · Az egyed egy konkrét értéke: előfordulás.
9
A tulajdonság : az egyed belső szerkezete.
Az egyedeket tulajdonságokkal (attribútumokkal) írjuk le. A dolgozó nevű egyed tulajdonságai például: név, dolgozószám, fizetés, adólevonás... · a tulajdonság értékeivel egy adott egyed konkrét értékét határozzuk meg.
10
Amennyiben. egy tulajdonság vagy
Amennyiben egy tulajdonság vagy tulajdonságok egy csoportja egyértelműen meghatározza, hogy az egyed melyik értékéről van szó, akkor ezeket együtt kulcsnak nevezzük. Pl. hallgatókód a HALLGATOban
11
A kapcsolat: az egyed külső szerkezete.
A kapcsolat az egyedek közötti viszony. Példa: VEVŐ-RENDELÉS, SZÁMLA-CIKK ... · A konkrét értékek a kapcsolat előfordulásai.
12
A kapcsolatok fajtái adatmodelltől függetlenül
1:N kapcsolat N:M kapcsolat
13
1. Egy-egy típusú kapcsolat :
Az egyik egyedhalmaz mindegyik eleméhez a másik egyedhalmaznak pontosan egy eleme kapcsolódik. Például DOLGOZÓK : KÜLSŐK „alegyed”
14
2. Egy-több típusú kapcsolat :
Az A egyedhalmaz mindegyik eleméhez a B egyedhalmaznak több eleme is tartozik. Például VEVŐ : RENDELÉS
15
3. Több-több típusú kapcsolat :
Az A egyedhalmaz minden eleméhez a B egyedhalmaz több eleme tartozhat és fordítva. Például TERMÉK : ALKATRÉSZ
16
Az adatmodell. véges sok egyednek,. azok véges számú tulajdonságainak
Az adatmodell véges sok egyednek, azok véges számú tulajdonságainak és kapcsolataiknak a rendszere. Az adatbázis véges sok egyedelőfordulás-nak, azok véges sok tulajdonságértékének és kapcsolatelőfordulásának az adatmodell szerint szervezett együttese.
17
Három adatmodell létezik az alapelemek fizikai tárolásától függően
egyed tulajd. kapcs. hálós, hierarchikus relációs objektumos + objektum-relációs (vegyes adatmodell)
18
Az egyedet egy táblázattal adjuk meg.
A relációs adatmodell Az egyedet egy táblázattal adjuk meg. A táblázat oszlopai a tulajdonságok. Reláció: a tulajdonsághalmazok Descartes-szorzatának részhalmaza.
19
A reláció matematikai értelemben:
NÉV = {K,L,B, M} KOR = {21,16,35} NÉV x KOR = { [K,21], [K,16], [K,35], [L,21], [L,16], [L,35], [B,21], [B,16], [B,35], [M,21], [M,16], [M,35] } RELA1 = { [K,35], [L,21], [M,21] } RELA1 Í NÉV x KOR
20
A relációs adatbázis rövid jelölése:
A tábla a reláció (R) oszlopai az attribútumok sorai a rekordok A relációs adatbázis rövid jelölése: R {A1, A2, ..., An} ahol R a reláció neve, Ai pedig egy attribútum. Legyen : A = {A1,A2,...,An} Pl: SZEMÉLY {név, szüldát, lakhely}
21
Minta Vevő neve Kelt Vevő címe Határidő RENDELÉS
cikkszám1 cikknév1 egysár1 x db cikkszám2 cikknév2 egysár2 y db Összérték aláírás, pecsét
22
Rendelési bizonylatok nyilvántartása
minden bizonylat kap egy rendelési számot (rendszám) egy vevő több rendelést is küldhet (vkód) RENDELÉS {rendszám, vkód, vevőnév, vevőcím, kelt, határidő, cikkszám, cikknév, egysár, rendmenny, összérték} a táblázat redundáns adatokat tartalmaz
23
pl. a RENDELÉS kulcsa: {rendszám, cikkszám}
A reláció kulcsa Az A attribútumhalmaz egy K részhalmaza kulcs, ha 1.) a K értékei az R reláció mindegyik sorát egyértelműen meghatározzák, 2.) de ha egyetlen attribútumot is elhagyunk K- ból, ez már nem teljesül. Aláhúzással jelöljük a reláció kulcsát. A kulcsot tehát ki kell tölteni! A NULL érték: nem létező, ismeretlen érték (az egész kifejezést ismeretlenné teszi!) pl. a RENDELÉS kulcsa: {rendszám, cikkszám}
24
Csoportosítás Például:
egyszerű kulcs: egyetlen attribútumból áll összetett kulcs: egyébként kulcsszerepű tulajdonság: legalább egy kulcsnak a része leíró tulajdonság: egyébként - a kulcs: egyedi - több egyedi kulcs lehet - az egyik egyedi: elsődleges Például: A {szem_szám} egyszerű kulcs a DOLGOZÓ {szem_szám, név, fizetés} relációban, a {szem_szám, hónap} összetett kulcs a TÖRLESZTÉS {szem_szám, hónap, összeg} táblában.
25
Külső / idegen kulcs : az a tulajdonság (vagy több tulajdonság együttese), amely kulcsa egy másik relációnak. Pl. a szem_szám a Törlesztésben külső kulcs. - lehet kulcsszerepű, de lehet másodlagos tulajdonság is - a kapcsolat hordozója Két reláció csak akkor áll kapcsolatban egymással, ha az egyik tartalmazza a másik kulcsát. Codd, Chen, Date munkássága
26
JELÖLÉSEK vonalas Chen-féle „varjú-lábas” „egyértelmű” E1 E2 E1 E2 1 N
27
ÁBRÁZOLÁS
28
1.példa
29
2.példa
30
3.példa
31
4.példa
32
5.példa
33
Funkcionális függőség
Legyen R{A1, A2 ..., An } egy reláció: P, Q az A attribútumhalmaz részhalmazai. Azt mondjuk, hogy P funkcionálisan meghatározza Q-t (vagy Q funkcionálisan függ P-től), ha abból, hogy a reláció valamely két sora megegyezik a P halmazon, következik, hogy a két sor értékei megegyeznek a Q halmazon is. Jele: P ® Q
34
Példa: RENDELÉS {rendszám, vkód, vevőnév, vevőcím, kelt, határidő, cikkszám, cikknév, egysár, rendmenny, összérték} P = {rendszám}, Q = {vkód, kelt, határidő, összérték} esetén P ® Q teljesül. Továbbá: {vkód} ®{vevőnév, vevőcím} {cikkszám} ®{cikknév, egysár} {rendszám, cikkszám} ®{rendmenny}
35
Megjegyzés A K kulcs funkcionálisan meghatározza a „kulcson kívüli” attribútumhalmazt. pl. {rendszám, cikkszám} ® {vkód, vevőnév, vevőcím, kelt, határidő, cikknév, egysár, rendmenny, összérték} A K kulcs funkcionálisan meghatározza az egész attribútumhalmazt, tehát a tábla minden tulajdonsága függ a tábla kulcsától. K ® A
36
A kulcs definíciója a funkcionális függőség fogalmával:
K kulcsa az R{A} relációnak, ha ) K®A ) Nincsen olyan Y valódi részhalmaza K-nak, amelyre Y® A teljesül.
37
Függőségi család Egy adatbázisban lehet több olyan (P,Q) pár is, melyre P®Q. Ezek halmazát a reláció funkcionális függőségi családjának hívjuk és F-fel jelöljük. Kérdés: Ismert funkcionális függőségekből kikövetkeztethetők-e újabbak ? Válasz: Igen. Az ún. Armstrong-axiómák (szabályok) alapján.
38
A funkcionális függőségek tulajdonságai
1. Reflexivitás Ha Q Í P Í A, akkor P ® Q 2. Bővítés Ha P ® Q és S Í A, akkor P È S ® Q È S 3. Tranzitivitás Ha P ® Q, Q ® S, akkor P ® S
39
A funkcionális függőségek tulajdonságai
4. Egyesítési szabály Ha P ® Q, P ® S, akkor P ® Q È S 5. Pszeudotranzitivitási szabály Ha P ® Q,T È Q ® S, akkor P È T ® S 6. Dekompozíciós szabály Ha P ® Q és S Í Q, akkor P ® S
40
Kérdés: egy X ® Y függőség kikövetkeztethető-e egy F családból az Armstrong-axiómák alkalmazásával ?
Válasz: igen. A lezárt fogalmának segítségével. Az X+ (X lezártja F-re nézve) azon Q attribútumok halmaza, amelyre az X Q függőség az Armstrong-axiómák segítségével F-ből kikövetkeztethető. A fenti kérdésre a válasz: Az X ® Y függőség akkor és csak akkor következik egy F függőségi családból az Armstrong-axiómák alapján, ha az Y részhalmazaz X+-nak, azaz Y Í X+.
41
Példa RENDELÉS {rendszám, vkód, vevőnév, vevőcím, kelt, határidő, cikkszám, cikknév, egysár, rendmenny, összérték} relációban adott az F f. család: {rendszám} ® {vkód, kelt, határidő, összérték} {vkód} ® {vevőnév, vevőcím} {cikkszám} ® {cikknév, egysár} {rendszám, cikkszám} ® {rendmenny}
42
Következik-e F-ből: {rendszám} ® {vevőcím}
A) {rendszám} lezártjának meghatározása B) {vevőcím} részhalmaza-e a lezártnak A) X(0) = {rendszám} X(1) = {rendszám}È{vkód, kelt, határidő, összérték} X(2) = {rendszám, vkód, kelt, határidő, összérték} È {vevőnév, vevőcím} X(3) = X(2)
43
Tehát : {rendszám}+ = {rendszám, vkód, kelt, határidő, összérték, vevőnév, vevőcím} B) {vevőcím} Í {rendszám}+ igaz. Azaz a kérdéses függőség származtatható volt a megadott függőségi családból.
44
Relációk szétbontása Módszereket dolgoztak ki arra, hogy a relációk szétbontása veszteségmentes legyen (a funkcionális függőségek megmaradjanak). Cél: A redundancia megszűntetése.
45
Speciális funkcionális függőségek
részleges (nem teljes) rossz tranzitív (nem közvetlen) rossz
46
Teljes függőség Legyen P, Q Í A és P ® Q.
Q teljesen függ (funkcionálisan) P-től, ha Q a P egyetlen részhalmazától sem függ. Ellenkező esetben részleges a függőség. Példák: REND_TÉTEL {rendszam, cikkszam, darab, cikknév, vevő} TÖRLESZT {szem_szám, hónap, összeg, kelt, szem_név} LÁTOGATÁS {azonosító, dátum, időpont, téma, időtartam}
47
Tranzitív függőség Az S tranzitíven függ P-től, ha létezik olyan Q Í A, hogy P ® Q, Q ® S, de visszafelé nem igazak a függőségek. Példák: DOLGOZÓ {szemszám, név, osztkód, osztelnev} RENDELÉSFEJ {rendszám, vkód, vevőnév, vevőcím, kelt, határidő, összérték} LÁTOGATÓK {azonosító, név, cég, cégnév, cégcím,cégtel}
48
Normálforma: az egyed szerkezeti állapota.
49
R 0. normálformában van (0NF, vagy N1NF típusú), ha létezik olyan másodlagos attribútum, amely a kulcstól funkcionálisan független. … a táblázat akármelyik sorában vlmely tulajdonság többértékű
50
R 1. normálformájú (1NF típusú), ha minden másodlagos tulajdonság funkcionálisan függ a kulcstól.
… a táblázat minden sorában tulajdonságonként pontosan egy érték van
51
Az előző példa 1NF-ben:
52
R 2. normálformájú (2NF típusú), ha 1-es normálformában van, és minden másodlagos attribútuma a reláció bármely kulcsától teljesen függ. … a kulcstól egyik tulajdonság sem függ részlegesen Pl. BIZONYLATFEJ és BIZONYLATTÉTEL esete
53
R 3. normálformájú (3NF típusú), ha 2-es normálformában van, és egyetlen másodlagos attribútuma sem függ tranzitíven valamely kulcstól. … a kulcstól közvetlenül függ minden tulajdonság Pl. BIZONYLATFEJ és PARTNER esete
54
Megjegyzések Ha az R kulcsa egyetlen attribútumból áll, akkor 2NF típusú. Ha nincsen R-ben másodlagos attribútum, akkor 2NF típusú. A csupakulcs esete: ÜGYELET {ki, mikor} Több kulcsjelölt esete: SZÁMLATÉTEL {szlaszám, sorszám, cikkszám, mennyi}
55
Normalizálás (normálforma dekompozíció): a kedvezőtlen normálformájú egyedet lebontjuk több kívánt normálformájú egyedre.
56
Cél: a tárolási és karbantartási káosz megszüntetése …veszteségmentesen...
Példán mutatjuk be…
57
RENDELÉS normalizálása
{rendszám, cikkszám, vkód, vevőnév, vevőcím, kelt, határidő, cikknév, egysár, rendmenny, összérték} A fennálló f.függőségek: {rendszám} ® {vkód, kelt, határidő, összérték} {vkód} ® {vevőnév, vevőcím} {cikkszám} ® {cikknév, egysár} {rendszám, cikkszám} ® {rendmenny} 3 lépésben…
58
RENDELÉS normalizálása
{rendszám, cikkszám, vkód, vevőnév, vevőcím, kelt, határidő, cikknév, egysár, rendmenny, összérték} Tábla2 (rendszám,vkód,vevőnév,vevőcím,kelt,határidő,összérték) Tábla3 (cikkszám, cikknév,egysár) Tábla2 (rendszám,vkód,vevőnév,vevőcím,kelt,határidő,összérték) Tábla4 (vkód, vevőnév,vevőcím )
59
RENDELÉS normalizálása
REND_TETEL {rendszám, cikkszám, rendmenny} REND_FEJ {rendszám, vkód, kelt, határidő, összérték} CIKK {cikkszám, cikknév, egysár} VEVŐ {vkód, vevőnév, vevőcím} Tehát minden leíró teljesen és közvetlenül függ a saját kulcsától! CIKK VEVŐ REND_FEJ REND_TÉTEL
60
Az 1NF-es RENDELÉSben fennálló anomáliák:
rendszám | cikkszám | vkód | vevőnév | vevőcím | kelt | határidő | cikknév | egysár | rendmenny | összérték … BŐVÍT. TÖRLÉS. MÓDOS.
61
MEGSZORÍTÁSOK Adatbázisbeli szabályok rendszerezése:
Kulcsok megadása (elsődleges és egyediek) Külső kulcsok megadása Tulajdonságokra vonatk. korlátozások Önálló megszorítások (több sort / táblát érint) Triggerek (esemény váltja ki) beépítése Aktív elemként felügyelik a hivatkozási épséget, az adat-összefüggéseket, és az ügyvitelhez kötött korlátozásokat.
62
Az ÉTTEREM adatbázis normalizálása
A rendszer nagyvonalú ismertetése: Az étteremben különféle ételeket és italokat rendelhetünk, amelyeket bizonyos nyersanyagokból recept szerint készítenek el. A fogyasztás végén számla szerint fizetünk.
63
Az adatbázis létrehozása
Kiindulásképpen: RECEPT {azonosító, elnevezés, ár, tipus, tipnév, akód, név, egysár, mértegys, szüksmenny} SZÁMLA {szlaszám, dátum, azonosító, elnevezés, ár, rendmenny, érték, végösszeg} Lépések függőségek meghatározása kulcsok tisztázása normalizálás
64
RECEPT kulcsa = { azonosító , akód }
Igazak az alábbi funkcionális függőségek: {azonosító , akód} ® {szüksmenny} {azonosító} ® {elnevezés, ár, tipus, tipnév} {akód} ® {név, egysár, mértegys}
65
SZÁMLA kulcsa = {szlaszám , azonosító}
Igazak az alábbi funkcionális függőségek: {szlaszám , azonosító} ® {rendmenny} {szlaszám} ® {dátum, végösszeg} {azonosító} ® {elnevezés, ár}
66
Megjegyzések érték = ár * rendmenny végösszeg =S érték
számolható, nem tároljuk végösszeg =S érték számlaszámra összegezve számolható, de kerekítve tároljuk a pénzügyi mozgásokat
67
A teljes függőségek alapján
a RECEPT 3 relációra bomlik a SZÁMLA 3 relációra bomlik 1 reláció közös, hiszen 1:1 kapcsolatban állnak egymással (kizáró ok nélkül)
68
ÉTLAP {azonosító, elnevezés, ár, tipus, tipnév} ANYAG {akód, név, egysár, mértegys} RECEPT {azonosító, akód, szüksmenny} SZÁMLAFEJ {szlaszám, dátum, végösszeg} ÉTLAP2 {azonosító, elnevezés, ár} SZÁMLATÉTEL{szlaszám, azonosító, rendmenny}
69
A teljes függőségek felismerésével 2NF-ra hoztuk mindegyik táblát.
Viszont van tranzitív függés az ÉTLAPban: {azonosító} ® {tipus} és {tipus} ® {tipnév} {azonosító} ® {tipnév} A többi tábla már 3NF -ban van.
70
A tranzitív függőség megszüntetése
ÉTLAP {azonosító, elnevezés, ár, tipus} FAJTA {tipus, tipnév}
71
Kapcsolati ábra minden nyíl az N:1 kapcsolatot jelenti
72
azonosító ÉTLAP elnevezés ár tipus tipus FAJTA tipnév
szlaszám SZÁMLAFEJ dátum végösszeg akód ANYAG név egysár mértegys szlaszám azonosító SZÁMLATÉTEL rendmenny azonosító akód RECEPT szüksmenny
73
Technikai adatok az ÉTLAP van logikai tipusú tulajdonsága
a SZÁMLAFEJ kifizet logikai tipusú tulajdonsága
74
Bővíthetőség 1. Napi nyersanyag-beszerzés, készletek, kiadások:
BESZERZÉS {akód,dátum,beár,menny} ANYAG {akód, név, egysár, mértegys, készlet} Megjegyzés: beszerzés bizonylatolása...
75
Bővíthetőség 2. Alkalmazottak nyilvántartása:
SZEMÉLY {kódszám,neve, poszt} BEOSZTÁS {poszt, jelentés} CSAPAT{dátum, kódszám}
76
Bővíthetőség 3. Pincérek pontos munkavégzésének követése:
{dátum, sorszám} ® {kódszám} ahol a sorszám az asztal egyedi azonosítója Megjegyzés: nem igaz viszont, hogy a dátum és kódszám meghatározná a sorszámot
77
Az új egyedek a következők
ASZTAL {sorszám,hányfős} KISZOLGÁL {dátum,sorszám,kódszám} ezért SZÁMLAFEJ {szlaszám, dátum, végösszeg, sorszám}
78
A végleges adatbázis ábrázolása (3 részletben, majd egy áttekintő ábra)
79
azonosító ÉTLAP elnevezés ár tipus
van szlaszám SZÁMLAFEJ dátum sorszám végösszeg kifizet tipus FAJTA tipnév akód ANYAG név egysár mértegys készlet szlaszám azonosító SZÁMLATÉTEL rendmenny azonosító akód RECEPT szüksmenny
80
akód ANYAG név egysár mértegys
készlet akód dátum BESZERZÉS beár menny
81
szlaszám SZÁMLAFEJ dátum
sorszám végösszeg kifizet sorszám ASZTAL hányfős poszt BEOSZTÁS jelentés dátum sorszám KISZOLGÁL kódszám kódszám SZEMÉLY neve poszt dátum kódszám CSAPAT
82
Áttekintő kapcsolati ábra
FAJTA Áttekintő kapcsolati ábra ÉTLAP RECEPT ANYAG BESZERZ SZTÉTEL SZFEJ SZEMÉLY BEOSZT ASZTAL KISZOLG CSAPAT
83
Egyéb gondolatok asztal megbontása műszakban dolgozás
részalkatrészek beépülése (hurokmentes fa-szerkezet) a beépülés megjelenítése (bináris fa)
84
ADATBÁZIS - TERVEZÉS PÉLDÁK
85
1.példa: OKTATÁS Egy iskola folyó tanévében a diákok és tanárok viszonyát tartjuk nyilván értelemszerű törzsadatokkal az órarend kialakításáig. Az egyes tantárgyakat osztályoknak tanítják a tanárok. Több párhuzamos osztály lehet. Egy tanár több tárgyat is taníthat és ford. Ugyanannak az osztálynak több tárgyat ill. egy tárgyat több osztálynak is taníthat ugyanaz a tanár. A nap és óra sorszámozott típusú; a tantárgy kódja beszédes.
86
Adatbázis-részlet DIÁK {azonosító, név, osztály, ...}
TANÁR {kód, név, szoba} TANTÁRGY {tant, megnevezés, heti_óraszám} TANÍT {osztály, tant, kód} ÓRAREND {osztály, nap, óra, tant}
87
Megoldandó: (bevezető példa)
Kapcsolatok felállítása! Az osztály maradhat-e metszet-tulajdonság? Nem ellenőrizhető szabályok felismerése: A párhuzamos osztályoknak ugyanaz a tematikájuk További korlátozások beépítése Osztályfőnökök nyilvántartása (+ heti 1 óra) Lehetnek tagozatos ill. sima osztályok évfolyamon belül Mindenki évvégi osztályzatát tároljuk tantárgyanként Új tanév indítása a régi adatok megőrzésével Bármely tantárgyból szakkör indítható valamely tanárral órarendbe illesztve, melyre a tárgyat tanuló diákok járhatnak
88
2.példa: TANFOLYAMSZERVEZÉS
Egy intézmény rövid tanfolyamokat hirdet. Valamely típusú tanfolyamból több is indulhat. A konkrét tanfolyamnak van egy oktatója, tandíja, kezdete, helyszine és sok hallgatója; az azonos típusú tanfolyamoknak neve, óraszáma. A hallgatók jelentkezőkből lesznek, ha befizettek. Oktató is lehet valahol hallgató. Egy oktató az általa vállalt tipusú tanfolyamokat különböző minősítéssel és tiszteletdíjért tartja meg.
89
Az adatbázis TANFOLYAM {tanfszám, típus, indul, kezdés, terem, tandíj, oktatókód} TIPUS {típus, megnevezés, óraszám} SZEMÉLY {kód, név, cím, tel, végzettség} HALLGAT {hallgatókód, tanfszám, fizetve} OKTAT {oktatókód, típus, minősítés, tiszteletdíj}
90
kód SZEMÉLY név cím tel végz tipus TIPUS megnev óraszám hallgkód oktkód tipus hallgkód tanfszám HALLGAT fizetve ti p u s oktkód tanfszám TANFOLYAM tipus indul kezdés terem oktkód tandij oktkód tipus OKTAT minősít tisztdij tanfszám oktkód tipus
91
Funkcionális függőségek eldöntése
{tanfszám} ® {megnev, óraszám} ü {hallgkód} ® {végz} ü {hallgkód, tipus} ® {tandij} Æ {név, cím, tanfszám} ® {fizetve} Æ {tanfszám, hallgkód} ® {óraszám} ü {tanfszám} ® {tisztdij} ü {indul, kezdés,oktkód} ® {minősít} ü?
92
Lehetséges lekérdezések
hallgatói létszámok tanfolyamtipusonként oktatóknak kifizetett tiszteletdij összege a legtöbbször tartott tanfolyamtipus a legkevesebb létszámmal indult tanfolyam oktatók toplistája tanfolyamtipusonként
93
3.példa: SZERVIZ Egy márkabolt szervizében fogadjuk a reklamációkat.
A márkabolt különböző cikkeket tart, melyekből konkrét gyártási számmal rendelkező darabokat ad el. A vevő értelemszerűen akár többször is reklamálhat. (javítás / csere / visszafizetés igényével).
94
Adatbázis felépítése CIKK {cikksz, megnev, garancia, egysár}
„ A márkabolt különböző cikkeket tart, „ CIKK {cikksz, megnev, garancia, egysár} „ melyekből konkrét gyártási számmal rendelkező darabokat ad el. „ ELADÁS {cikksz, gyártsz, kelt} „A vevő„ VEVŐ {vkód, név, cím} ELADÁS {cikksz, gyártsz, kelt, vkód} „többször is reklamálhat (igények)„ REKLAM {cikksz, gyártsz, dátum, igény, telj}
95
Kapcsolati ábra CIKK cikksz ELADÁS vkód cikksz,gyártsz VEVŐ REKLAM
96
Bővítések CSERE {cikksz, gyártsz, mikor, új_gyártsz}
A cikkek ára néha megváltozik: CIKKbe aktuális árat felvenni + ÁRVÁLTOZÁS táblát tartani: ÁRVÁLT {meddig, cikksz, régi_ár} Vagy: ÁRAK {mióta, cikksz, új_ár} Cserélni csak ugyanolyan cikkre lehet: Az új tábla kulcsai és külső kulcsa! CSERE {cikksz, gyártsz, mikor, új_gyártsz} - több kulcsjelölt; - további megszorítások
97
4.példa: SZÁLLODA Egy szálloda forgalmára készítünk adatbázist az alábbi bemenő bizonylat alapján: megrendelő adatai Kelt SZOBAFOGLALÁS 3 darab kétágyas zuhanyzós dátumtól - ig 1 darab egyágyas fürdőszobás dátumtól - ig Visszajelzést kérünk. (aláírás, pecsét)
98
Adatbázis elkészítése
szoba (szobaszám) - egy szobatípusra több szoba megrendelési bizonylat (iktatószám) megrendelő partner (azonosító) - mint cég, intézmény, magánszemély, utazási iroda A megrendelési bizonylat tartalma helyett a lefoglalást tároljuk!
99
Adatbázis azon sztip PARTNER SZTIPUS név ár cím ágy tel iktszám sztip
szszám SZOBA azon PARTNER név cím tel iktszám MEGREND kelt iktszám sztip TARTALOM darab tól ig
100
Használható adatbázis
sztip SZTIPUS ár ágy szszám SZOBA azon PARTNER név cím tel iktszám MEGREND kelt iktszám szszám FOGLALT tól ig
101
Végleges adatbázis azon sztip PARTNER SZTIPUS név ár cím ágy tel
szszám SZOBA azon PARTNER név cím tel iktszám MEGREND kelt szszám tól FOGLALT ig iktszám
102
5.példa: RAKTÁR Egyetlen raktárból bizonylatolva cikkeket vételezhetnek vagy adhatnak le valamilyen osztály dolgozói. Módosítsuk a meglevő adatbázis szerkezetét a több raktár - benne mindenféle cikk – lehetőségének nyilvántartásával!
103
Régi adatbázis dkód DOLGOZÓ név oszt bizszám BIZFEJ mozgás kelt cikksz
BIZTÉTEL darab CIKK megnev egysár készlet
104
Új adatbázis 1. razon cikksz KÉSZLET készlet RAKTÁR cím vezeti dkód
DOLGOZÓ név oszt bizszám BIZFEJ mozgás kelt cikksz BIZTÉTEL darab CIKK megnev egysár készlet razon
105
Új adatbázis 2. razon cikksz KÉSZLET készlet RAKTÁR cím vezeti dkód
DOLGOZÓ név oszt bizszám BIZFEJ mozgás kelt cikksz BIZTÉTEL darab CIKK megnev egysár készlet razon
106
6.példa: FORGALOM Eladás / Beszerzés / Selejtezés tipusú forgalom tételes nyilvántartása a cél (Zöldséges) Vannak ÁRUk és SZÁLLITÓk, a VEVŐk nem tárolódnak. A kimutatások a 3 tipusú forgalom adataiból épülnek fel. Lemondunk az alegyedek létrehozásáról!
107
Adatbázis ÁRU {cikksz, név, eár, bár, készl, me} SZÁLLITÓ {szkód, ...}
ELADÁS {mikor, miből, mennyit, mennyiért(e_ár)} BESZERZÉS {mikor, miből, mennyit, mennyiért(input), kitől} SELEJTEZÉS {mikor, miből, mennyit, mennyiért(b_ár)} FORGALOM {tip, kelt, cikksz, menny, ár, szkód} kulcs? FORGTETEL kulcsa : bizszám, sorszám Archív?
108
7.példa: KÖNYVTÁR Egy könyvtár
beszerez új könyveket (ugyanabból a könyvből több példányt) selejtez használtabb példányokat (bizonyos idő elteltével automatikusan vagy direkt) karbantartja, ezért le tudja kérdezni a könyvek adatait, mint kölcsönözhetőség, műfaj, kiadó, kiadás éve, egy vagy több szerző, kezdő és aktuális darabszám, egységár és szorzó, kölcsönzések javasolt száma, recenzió, néhány utalás, mely sorozat része kezeli az olvasók alapadatait, mint : születési év, foglalkozás, név, cím
109
Egy könyvtár ezenkívül
kölcsönzéseket bonyolít, azaz : kiad, visszavételez, felszólít (2-szer; a 3. már büntetés) előjegyzést vesz fel, értesít statisztikai kimutatásokat végez legalább évente forgalmi listákat hoz le adott szempontok szerint bármilyen sűrűséggel A fentiekből látszik, hogy egy bizonyos könyv n számú példányát csak a kölcsönzéskor különböztetjük meg.
110
A rendszer ismertetése 1
A beszerzés bizonylatolása a raktárnyilvántartó rendszer része, itt most inputként kapjuk a katalógusszámot a példányszámmal. (Vsz. év+sorszám alakban osztanak katalógusszámot.) Nálunk történik a konkrét példány azonosítása, azaz a katalógusszám kibővítése alkatalógusszámmal (sorszám: 1-től példányszámig). Egy bizonyos könyvet több szerző írhatott, és egy szerző több könyvet is írhatott. Egy bizonyos könyv utalhat több fogalomra és fordítva. Bizonyos könyvnek egy kiadója van, egyetlen sorozatnak a része, és fordítva nem igaz.
111
A rendszer ismertetése 2
Ha bizonyos könyv egyetlen példánya sincs bent, előjegyezzük az olvasót, és érkezési sorrendben próbáljuk kielégíteni a kérését. Automatikus selejtezés - vizsgálat időszakosan történik, de a konkrét példány állapota is vezethet selejtezéshez. Egy olvasónak egy foglalkozása van, de ugyanaz a foglakozása több olvasónak is lehet. A kintlevőségek számát ne a rendszer korlátozza. A tagdíj befizetését nem kötelező bizonylatolni, hiszen a kölcsönzőívbe pecsételés jelzi az azévi befizetést.
112
A rendszer ismertetése 3
A lejáratvizsgálat abból áll, hogy konstansként kezelt változók ismeretében (pl. 30 napos kölcsönzési idő, a felszólítások - számuk 2 - további 15 napot jelentenek, de a 3. már a büntetéskiírás) ellenőrizzük a kölcsönzési dátum óta eltelt időt. Ha a példány elveszett, kikerül a kölcsönözhetők közül. A büntetés nagysága = egységár x szorzó, amiről értesítést küldünk (, de az összeg beérkezését a pénzügyi osztály figyeli).
113
Azonosítók katal az „eszmei” könyv
alkatal egyetlen példánya valamely könyvnek kiadó adott kiadó sorozat adott sorozat fogalom utalásbeli fogalom szerző konkrét szerző olvasó egy olvasó (kölcsönzőív jelzőszáma) foglalk egyfajta foglalkozás műfaj egyetlen szabvány. karakter (0 - 9)
114
Igazak az alábbi függőségek 1
{katal} ® {cím, kiadó, kiadév, műfaj, kezdődarabszám, aktuális darabszám, egységár, szorzó, max kölcs.száma, recenzió, sorozat, kölcsönözhetőség} {katal, alkatal} ® {kikölcsönözve, akt. kölcs. száma} (ha megvan) {katal, alkatal} ® {kelt, selejt/lopott} (ha nincs meg)
115
Igazak az alábbi függőségek 2
{kiadó} ® {megnevezés} {sorozat} ® {elnevezés} {szerző} ® {név} {katal, szerző} ® {katal, szerző} {fogalom} ® {hosszúnév} {katal, fogalom} ® {katal, fogalom}
116
Igazak az alábbi függőségek 3
{olvasó} ® {név, cím, szület.év, foglalk} {foglalk} ® {elnevezés} {olvasó, katal, alkatal, dátum} ® ® {visszahozatal dátuma, felszólítások száma} {olvasó, katal} ® {előjegyzés dátuma}
117
Az adatbázis (1.rész) KÖNYV {katal, cím, kiadó, kiadév, műfaj, kezd_db, akt_db, egys_ár, szorzó, max_kölcs, recenzió, sorozat, kölcs_h} PÉLDÁNY { katal, alkatal, kikölcs, akt_kölcs} NINCS {katal, alkatal,kelt, sel_lop}
118
Az adatbázis (2.rész) KIADÓ {kiadó, megnevezés}
SOROZAT {sorozat, elnevezés} KIMITIRT {katal, szerző} SZERZŐ {szerző, név} UTALÁS {katal, fogalom} FOGALOM {fogalom, hosszúnév}
119
Az adatbázis (3.rész) OLVASÓ {olvasó, név, cím, szül_év, foglalk}
FOGLALKOZÁS {foglalk, elnevezés} KÖLCSÖNZÉS {olvasó, katal, alkatal, dátum, visszahoz_dát, felszólít} ELŐJEGYZÉS {olvasó, katal, előjegyz_dát}
120
KIADÓ SOROZAT KÖNYV PÉLDÁNY NINCS KIMITIRT UTALÁS SZERZŐ FOGALOM
? KÖLCSÖNZ ELŐJEGYZ OLVASÓ FOGLALK KAPCSOLATOK
121
Folyamatok 1 Beszerzésnél nemcsak a KÖNYV és a PÉLDÁNY bővülhet,
hanem a KIADÓ, a SOROZAT, a KIMITIRT és a SZERZŐ, az UTALÁS és a FOGALOM is
122
K Ö N Y V
123
P É L D Á N Y
124
K I A D Ó SO R O Z A T
125
S Z E R Ő
126
K I M T R
127
F O G A L M
128
U T A L Á S
129
Folyamatok 2 Kölcsönzéskor - kivételezésnél a KÖLCSÖNZÉSen túl
az OLVASÓ és a FOGLALKOZÁS is bővülhet; módosul egy PÉLDÁNY-rekord; az ELŐJEGYZÉSben pedig lehet törlés; - visszahozatalnál csak módosítás történik a KÖLCSÖNZÉS és a PÉLDÁNY relációkban; - előjegyzésnél az ELŐJEGYZÉS bővül;
130
K Ö L C S N Z É PÉL DÁ NY
131
O L V A S Ó F O G L A K
132
K Ö L C S N Z É PÉL DÁ NY
133
E L Ő J G Y Z P É L D Á N Y
134
Folyamatok 3 Selejtezésnél a NINCS bővül, a PÉLDÁNYban törlünk,
a KÖNYVben módosítunk
135
N I N C S P É L D Á N Y KÖ NY V
136
Folyamatok 4 Lejáratvizsgálatkor
a felszólítások száma módosulhat a KÖLCSÖNZÉSben; a 3. felszólítás esete okoz további adatmozgást, mégpedig a NINCSben bővítést, a PÉLDÁNYban törlést és a KÖNYVben módosítást.
137
KÖ L CS ÖN Z ÉS N I N C S
138
Folyamatok 5 A többi lekérdezés nem okoz adatmozgást
A Törzsek karbantartása értelemszerűen történik
139
Példa lekérdezésre 1 SZERZŐ SZERINTI KATALÓGUS
szerző1 - szerző könyvcímA katalszámx . szerző2 - szerző könyvcímA katalszámx
140
AZ EGYES MŰFAJOK OLVASOTTSÁGA FOGLALKOZÁSOK SZERINTI BONTÁSBAN
Példa lekérdezésre 2 AZ EGYES MŰFAJOK OLVASOTTSÁGA FOGLALKOZÁSOK SZERINTI BONTÁSBAN műfaj0 műfaj1 műfaj műfaj9 fogl1 fogl2 . fogln
141
Adatbázis bővítési FELADATOK
FUTÁR KELLÉKES tov. ld. Példatár
142
F U T Á R Adott futárszolgálat nyilvántartását végezzük a fővárosban. Bizonyos cégek, magánemberek, intézmények a partnereink, akik kisebb sürgős küldemények más partnerhez való eljuttatását bízzák a szolgálatra. A szolgálat minden egyes küldeményt a megrendelő partner megbízásából partnertől partnernek szállíttat valamelyik futárával, akit telefonon ér el. rend_szám MOTOR műsz_adat1 … kelt hánytól f_szám DOLGOZIK hányig DOLGOZIK másik kulcsa: {kelt,hánytól,rend_szám} Bővítés: A futárok a szolgálat valamelyik motorjával teljesítsenek szolgálatot. Egy futár nem mindig ugyanazzal a motorral jár.
143
KE LL ÉK ES Adott színház egyetlen terméhez az egyes színházi darabok kellékeit tartjuk nyilván. Ilyenek pl. a korabeli bútorok, fegyverek, kosztümök, poharak esetleg ételek, melyeket az egyes színházi darabok konkrét előadásain használnak. A kellékekből több példány is rendelkezésre állhat, de ezeket a frissítésben megfogalmazott előadásszám után cserélni, javítani, tisztítani kell. Azt, hogy az egyes példányokat a legutolsó frissítés óta már hányszor használták, a számlálóban gyűjtjük. Bővítés: A konkrét kellékek közül a kosztümök méreteit is tartsuk nyilván. Az egyes darabok szereplőinek ruha-, cipőméretét is tárolni kell; valamint a napi szereposztást. PÉLDÁNY + { [méret] } SZÜKSÉGES + { [szerep] } + SZEREP {szerep, megnevezés} + SZÍNÉSZ {sz_kód, név, kor, nem, r_méret, c_méret} + SZEREPEL {darab, variáció, szerep, sz_kód} ELŐADÁS + {variáció}
144
SQL = STRUCTURED QUERY LANGUAGE
AZ SQL NYELV SQL = STRUCTURED QUERY LANGUAGE a relációs adatbáziskezelő nyelvek lekérdezési lehetősége a relációs algebra műveletein alapszik
145
Relációs adatbáziskezelő nyelvek
1976, IBM: SEQUEL, SQL (1976) 1983. ORACLE, INFORMIX 1986-os SQL-szabvány: alaputasítások 1989-es SQL-szabvány: dinamikus SQL 1990-tõl OOP hatás SYBASE: hálózati munkára alk. adatbázis „metaadatbázis” (programozó által definiált adattípus, kulcsdefiniálás, tárolt eljárások és triggerek)
146
Relációs adatbáziskezelő nyelvek
4GL hatás INFORMIX: képernyõtervezõ és nyomtatási fejlesztõeszköz Ügyfél-kiszolgálói felépítés hatása: adatbázis-gép programozása (SQL alapon) SQL-változatok: DB2, MS SQL Server, Oracle, ... , MySQL,…
147
ABKR-rel szemben támasztott elvárások:
Tegye lehetővé a felhasználó számára új adatbázis létrehozását. Engedje meg a felhasználónak az adatok lekérdezését, módosíthatóságát. Támogassa nagy mennyiségű adat hosszú ideig való tárolását, garantálja az adatok biztonságát, és tegye lehetővé a hatékony adathozzáférést. Felügyelje a több felhasználó által egyidőben történő adathozzáféréseket, és ezek ne vezessenek az adatok következetlenné válásához.
148
Az 1. szabvány SQL nyelv elemei
149
Az SQL táblákat (relációkat kezel). (Elnevezésük: TABLE.)
Alapelemek Az SQL táblákat (relációkat kezel). (Elnevezésük: TABLE.) A tábla attribútumait oszlopoknak nevezzük, melyek oszlopazonosítóját, típusát és hosszát a tábla definiálásakor adjuk meg. A táblák névvel ellátott együttese adatbázis (DATABASE).
150
Adattábla Eredménytábla Virtuális tábla Indextábla Szinonima-tábla
Táblák az SQLben Adattábla Eredménytábla Virtuális tábla Indextábla Szinonima-tábla
151
DECIMAL(m,n) vagy NUMERIC(m,n) FLOAT(n) vagy REAL DATE [LOGICAL]
Oszloptípusok CHAR(n) INTEGER DECIMAL(m,n) vagy NUMERIC(m,n) FLOAT(n) vagy REAL DATE [LOGICAL] és további, nem általános típusok
152
Az adatbázis létrehozása, törlése
CREATE DATABASE adatbázisnév; Létrehozza egy <adatbázisnév> nevű könyvtárban az adatbázis összes katalógustábláját DROP DATABASE adatbázisnév; Törli a lezárt adatbázist
153
Adatbázis megnyitása,lezárása
START DATABASE adatbázisnév; Megnyitja az adatbázist (egyszerre csak egy aktív) STOP DATABASE; Lezárja az aktív adatbázist
154
ISKOLA ETKEZES SEGELY TAGSAG TANULO NAPIDIJ JOGCIM KOR ld. Példatár
155
Adattábla definiálása
CREATE TABLE táblanév (oszlopnév adattípus (adathossz) [,oszlopnév adattípus (adathossz)]...); a felsorolt oszlopokkal létrehozza a táblát az adott néven Egy adatbázison belül a tábla-nevek különböznek.
156
SZEMELY{kod,nev,nem,anya,apa}
(ez a tábla nem tartozik az ISKOLA adatbázishoz)
157
A tábla módosítása, törlése
ALTER TABLE táblanév ADD / DROP (oszlopnév adattípus (adathossz)); Táblához hozzáadni vagy elvenni lehet oszlopokat. DROP TABLE táblanév; A tábla kitörlése az adatbázisból
158
Új sorok elhelyezése az adattáblába
INSERT INTO táblanév [ (oszlopnév-lista) ] VALUES (értéklista); A tábla felsorolt oszlopaiba az értéklista elemeit helyezi el. Alapértelmezés: minden oszlop.
159
Sorok beszúrása SZEMELY-be :
160
Sorok beillesztése másik táblából
INSERT INTO táblanév [oszloplista] SELECT * FROM mástábla; ahol SELECT * FROM mástábla a mástáblá-ból történő lekérdezés egy E-táblája
161
Adatsor módosítása a táblában
UPDATE táblanév SET oszlop1=újérték1, … · [WHERE feltétel]; WHERE nélkül minden sorra végrehajtódik
162
Sorok törlése a táblából
DELETE FROM táblanév [WHERE feltétel]; WHERE nélkül minden sorra végrehajtódik
163
Lekérdezés adattáblákból
A lekérdezés során egy úgynevezett eredménytábla (E-tábla) jön létre. A SELECT paranccsal az E-tábla a végrehajtás során lépésenként alakul ki. A szelekciókban további belső SELECTek lehetnek.
164
A SELECT parancs SELECT. . . az E-tábla leendő oszlopai
FROM tábla / táblák felsorolása [WHERE. . .] sor-feltétel [GROUP BY csoportosítás [HAVING. . .] ] szűrés csoportokra [ORDER BY. . .] az E-tábla rendezése [SAVE TO TEMP. . .]; az E-tábla megőrzése 2 SELECT között: [UNION. . .] E-táblák összefűzése, hz.elm. unió-ja
165
A SELECT parancs végrehajtása
FROM [Descartes-szorzat] [WHERE. . .] szelekció [GROUP BY csoportosítás (rendezés+kontrollváltás) [HAVING. . .] ] csoportok szelekciója SELECT projekció [ORDER BY. . .] rendezés [SAVE TO TEMP. . .]; megőrzés
166
A SELECT utasítás részei részletesen
SELECT [ALL|DISTINCT] oszlopnév-lista | * FROM táblanév lista; A FROM mögé írt táblákból a SELECT mögé írt paraméterek szerint oszlopokat emel ki (ezekből eredmény-táblát hoz létre).
167
4. A DISTINCT hatása: a duplikált sorokat csak egyszer tartalmazza.
Az opciók 1. A * hatása: a tábla, vagy táblák minden oszlopa bekerül az E-táblába. 2. Az oszlopnév-lista hatása: a lista elemei lesznek oszlopai az E-táblának. 3. Az ALL hatása: az E-tábla duplikált sorokat is tartalmazhat (aIapérteImezett). 4. A DISTINCT hatása: a duplikált sorokat csak egyszer tartalmazza.
174
A lista elemei lehetnek :
a) a tábla oszlopnevei; ha több táblában is szerepel ugyanaz az oszlopnév, akkor táblanév.oszlopnév alakban írjuk b) a FROM által kijelölt tábla oszlopneveiből képzett kifejezés c) az aggregáló függvények valamelyike… d) egyéb kifejezés
175
Példák származtatott oszlopokra
a., Aritmetikai kifejezés : SELECT joved FROM tanulo; b., Karakteres kifejezés : SELECT left(osztaly,1), upper(nev) FROM tanulo; c., Aggregáló függvény : SELECT AVG(joved) FROM tanulo;
176
Összesítő (aggregáló) függvények
1. A számláló függvény COUNT ([DISTINCT] oszlopnév|*) Megszámolja az oszlopnév által megadott oszlop elemeinek számát. (DISCINCT esetén csak a különböző értékeket, * esetén soronként számlál) Az argumentum: tetszőleges típusú.
177
Összesítő (aggregáló) függvények
2. Az összegző függvény SUM [ALL] kifejezés | [ALL|DISTINCT] [oszlopnév] Az átlagoló függvény AVG [ALL] kifejezés | Az argumentum: numerikus típusú.
178
Összesítő (aggregáló) függvények
Legkisebb érték: MIN(kifejezés|[DISTINCT] oszlopnév) Legnagyobb érték: MAX(kifejezés|[DISTINCT] oszlopnév) Az argumentum: rendezhető típusú (numerikus, dátum, karakteres).
181
WHERE feltétel az E-tábla a feltételnek megfelelő sorokból jön létre.
A WHERE alparancs WHERE feltétel az E-tábla a feltételnek megfelelő sorokból jön létre. A sorfeltétel egy logikai kifejezés: egyszerű összetett bonyolult
183
Predikátumfüggvények
a feltételekben használhatók (az egyszerű összehasonlításon kívül) a. A BETWEEN predikátum kif1 BETWEEN kif2 AND kif3 Igaz értéket vesz fel ha: kif2 <= kif1 <= kif3
184
b. Az IN predikátum oszlopnév IN (értéklista) Igaz, ha az oszlop értéke eleme az értéklistának. c. A LIKE predikátum oszlopnév LIKE érték Igaz, ha az oszlop értéke megegyezik a like utáni értékkel, ami maszkolható (_ %)
186
(egy csoportba az azonos oszlopértékű sorok tartoznak),
A GROUP BY alparancs GROUP BY oszlopnév[,oszlopnév] ) az oszlopok értékei alapján csoportokat képez (egy csoportba az azonos oszlopértékű sorok tartoznak), 2.) az egyes csoportokra külön végzi el az összesítést. A csoportokra rendszerint összesítő függvényt alkalmazunk (amely a SELECT mögött és/vagy a HAVING feltételében szerepel).
187
már lehet származtatott oszlopnév is a GROUP BY argumentuma
Megkötések: a SELECT mögött csoportosító oszlopok és aggregáló függvények vannak általában a SELECT mögött csak a GROUP BY mögötti oszlopok lehetnek az aggregáló függvény mellett a GROUP BY oszlopainak sorrendje a fokozatok egymásba ágyazását jelenti már lehet származtatott oszlopnév is a GROUP BY argumentuma
190
A GROUP BY csoportjaiból
A HAVING alparancs HAVING feltétel A GROUP BY csoportjaiból csak azok a csoportosított sorok kerülnek az E-táblába, amelyek eleget tesznek a feltételnek. A feltétel tehát az összesítő függvények eredményeire vonatkozó újabb szűrőfeltétel.
192
A végrehajtás utolsó lépése *).
Az ORDER BY alparancs ORDER BY oszlopnév / oszlop-sorszám [ASC/DESC] [,oszlopnév / oszlop-sorszám [ASC/DESC]]... Az oszlopok értéke szerint rendezi az E-táblát. A végrehajtás utolsó lépése *).
193
Az oszlopnévnek szerepelnie kell a SELECT-ben.
Megjegyzés: Az oszlopnévnek szerepelnie kell a SELECT-ben. Az oszlop-sorszám a SELECT-ben megadott oszlopnév sorszáma *). Az ASC növekvő (alapértelmezés), a DESC csökkenő rendezettség.
198
A SAVE TO TEMP alparancs
SAVE TO TEMP T-táblanév [(oszlopnév-lista)]; Az eredménytáblát a T-táblanév alatt ideiglenesen elmenti a megadott oszlopnevekkel. Nem szabványos sem az elnevezése sem a helye! INTO TEMP T-táblanév esetén SELECT kifejezés AS leendő oszlopnév, ...
199
Az oszlopnév-lista megadással az E-tábla oszlopnevei átnevezhetők.
Megjegyzés: Az oszlopnév-lista megadással az E-tábla oszlopnevei átnevezhetők. Ha a SELECT-ben származtatott oszlop van, akkor az új oszlopnév megadása kötelező. pl. SELECT left(osztály,1) as évfolyam, count(*) as létszám FROM diák group by left(osztály,1);
201
nem alparancs, hanem 2 E-tábla közti hz.művelet!
A UNION művelet nem alparancs, hanem 2 E-tábla közti hz.művelet! SELECT...UNION SELECT...[UNION SELECT]... Veszi az egymásután következő E-táblák unióját (elvégzi a halmazelméleti egyesítés műveletét). Az E-tábláknak kompatibiliseknek kell lenniük: • azonos oszlopszámmal kell rendelkezniük • az oszlopoknak azonos típusúaknak kell lenniük Az 1. tábla oszlopneveit örökli.
203
Táblák összekapcsolása
A táblák összekapcsolása azt jelenti, hogy a FROM mögött több tábla nevét adjuk meg. Mindig 1 tábla készül belőlük, DESCARTES-szorzattal! (a táblanév mögött mód van rövidnév megadására)
205
Táblák összekapcsolása
Egyenlőségkapcsolat (EQUIJOIN-kapcs.) Táblákat legtöbbször a köztük lévő kapcsolat alapján (kulcs és külső kulcs azonossága) kötünk össze. Tábla összekapcsolása önmagával (SELF-JOIN) A táblát önmagával is összekapcsolhatjuk (bármilyen feltétel szerint); ekkor a táblát két különböző névvel kell megjelölni.
206
19 x 7 = 133 sor összesen = 126 rossz sor
209
Rövidnevek megadása itt kötelező!
211
Belső SELECT parancsok
A WHERE és a HAVING feltételében SELECT parancs is szerepelhet (belső vagy beágyazott SELECT, esetleg alSelect), ami nem tartalmazhat: ORDER BY, SAVE TO TEMP alparancsokat. A belső SELECT is tartalmazhat belső SELECT-et, vagyis a SELECT-ek egymásba ágyazhatók.
212
Beágyazott SELECT parancsok
A belső SELECT-et mindig zárójelpárban kell megadni. Sorrend: · először a belső, majd a külső lekérdezést értékeli ki, és végül összeveti az értékeket · a másodlagos lekérdezés eredményét a főlekérdezés minden sorával külön kiértékeli
213
21000 ?
214
egy értéket ad vissza az alSELECT
egyszer hajtódik végre az alSELECT csak TANULObeli kimenetek vannak felesleges a Descartes-szorzat ...
215
A belső lekérdezés hány értékkel tér vissza?
a.Egyetlen értéket tartalmazó belső E-tábla b.Több értéket tartalmazó belső E-tábla Ilyenkor használni kell az IN, ANY, ALL vagy EXISTS predikátumok valamelyikét. A predikátumok megadásának formátuma: predikátum (belső SELECT)
216
Predikátumok: 1. Az IN predikátum: Igaz értéket ad vissza, ha az egyenlőség valamelyik belső E-táblabeli értékre igaz. 2. Az ANY predikátum: Igaz, ha a megadott összehasonlítás valamelyik belső E-táblabeli értékre igaz.
217
Predikátumok: 3. Az ALL predikátum: Igaz értéket ad vissza, ha a megadott összehasonlítás valamennyi belső E-táblabeli értékre igaz. 4. Az EXISTS predikátum: kiválasztja azokat a sorokat, amelyekhez a belső E-táblában egy vagy több sor tartozik. Megj.: az IN operátor helyett mindig alkalmazható, de fordítva nem.
218
egy legkülső SELECTet kap
több értéket ad vissza az alSELECTje egyszer hajtódik végre az alSELECTje csak a TANULOból vetítünk ki nincs Descartes-szorzat
221
A belső lekérdezés hányszor hajtódik végre?
A. A belső SELECT egyszer hajtódik végre B. A belső SELECT a külső minden (vagy csak több) sorára újra végrehajtódik - okozója: a belső SELECT - beli hivatkozások a külsőre (paraméterátadás)
222
soronként újra számolja a havi maximumot
SELECT honap , azon FROM segely sek WHERE osszeg =(SELECT MAX( ) FROM segely seb WHERE seb. = sek . ); SEK->HONAP SEK->AZON 2 92112 3 91113 soronként újra számolja a havi maximumot egy értéket ad vissza, de mindig végrehajtódik a külső paraméter: sek.honap
223
Mindig a paraméter szerint rendezve kaptuk az E-táblát
SELECT jogcim , azon FROM segely sek WHERE osszeg = (SELECT MAX( ) FROM segely seb WHERE seb. = sek . ); SEK->JOGCIM SEK->AZON ar 91113 cs 92112 sz 91116 Mindig a paraméter szerint rendezve kaptuk az E-táblát (pl. havonta / jogcímenként ki kapta a legnagyobb segélyt) ui. a külső lekérdezés táblájában ún. kontrollváltással történik a belső lekérdezés végrehajtása.
224
A meglévő Segélyt egy sorral bővítjük:
Ki kapott segélyt: - több mint egyszer - mindig, amikor volt kifezetés - a legtöbbször (általában nem kell megegyeznie a 3 E-táblának)
225
1.) 2.) + módosítás, mely példa a „gazdaságtalan” EXISTSre:
SELECT nev FROM tanulo WHERE EXISTS (SELECT azon, COUNT(*) FROM segely WHERE azon = tanulo.azon GROUP BY azon HAVING COUNT(*) > 1); + módosítás, mely példa a „gazdaságtalan” EXISTSre: 2.)
226
3.) a rossz próbálkozás: Az alSELECT táblája még nem létezik! Következmény: aggregáló fgv-ek összeágyazása tilos. Megoldás: az átmeneti tábla létrehozása.
227
1.lépés: 2.lépés: 3.) módosított 2.lépés:
228
FELADATOK SQL - lekérdezések
229
1.feladat: az osztályoknak kifizetett összes segély átlaga
1.lépés: a segélyek összege osztályonként 2.lépés: az osztályonkénti összegek átlaga
230
2.feladat: ki kitől örökölte a szellemi képességeit (kódokkal)
0.lépés: a fiúk az anyjuktól, a lányok az apjuk anyjától 1.lépés: a fiúk és anyjuk megjelenítése UNIO a lányok és apai nagyanyjuk megjelenítése
231
3.feladat: tipusonként hány kör van
1.lépés: tipus készítése 2.lépés: csoportosítás
232
4.feladat: a tagság osztálynévsorai
1 lépés: minden körre tagjainak osztálynévsora
233
5.feladat: osztályonként hányan járnak valamilyen körre
1 lépés: osztályonként csoportosítva számláljuk a tagokat fontos: egy tanuló több tagsággal is egyszer számítson
234
6.feladat: osztályonként hányan sportolnak
7.feladat: név szerint kik járnak szakkörre és nyelvkörre is
235
8.feladat: melyik körnek van a legtöbb tagja
1.lépés: körönként hány tag van 2.lépés: a max. tagsággal rendelkező körök kiválasztása
236
9.feladat: melyik körnek ki a tagja legrégebben
1 lépés: egy tag akkor jelenjen meg a köre mellett, ha heve a körre vonatkozó max(heve)-vel egyenlő
237
10.feladat: az egyes osztályok tanulói átlagosan heti
hány órát töltenek (szak-, nyelv-, sport-)köri foglalkozással Hamis, mert csak a tagság létszámával oszt.
238
10.feladat: az egyes osztályok tanulói átlagosan heti
hány órát töltenek (szak-, nyelv-, sport-)köri foglalkozással 1.lépés: osztályonként összesen hány óra foglalkozás 2.lépés: osztálylétszámok 3.lépés: közös táblából a számított adatok kiírása SELECT osztaly, SUM(horasz) FROM tanulo ta, tagsag tg, kor WHERE ta.azon=tg.azon and tg.kor=kor.kor GROUP BY osztaly SAVE TO TEMP korok(oszt,orasz); SELECT osztaly, COUNT(azon) FROM tanulo GROUP BY osztaly SAVE TO TEMP letszam(oszt,ossz);
239
10.feladat: 3.lépés select * from letszam; OSZT OSSZ
select * from korok; OSZT ORASZ 1A ,00 1B ,00 2B ,00 2C ,00 select * from letszam; OSZT OSSZ 1A 1B 2A 2B 2C SELECT ko.oszt, orasz/ossz FROM korok ko, letszam le WHERE ko.oszt=le.oszt; KO->OSZT EXP1 1A ,00 1B ,00 2B ,33 2C ,29
240
11.feladat: név szerint ki tölt legtöbb időt foglalkozással
1.lépés: ki hány órát tölt foglalkozással 2.lépés: max. idő-vel rendelkezők kiválasztása SELECT azon, SUM(horasz) FROM tagsag, kor WHERE tagsag.kor=kor.kor GROUP BY azon SAVE TO TEMP tevek(azon,mennyi); select * from tevek; AZON MENNYI ,00 ,00 ,00 ,00 ,00 SELECT osztaly, nev FROM tanulo WHERE azon IN (SELECT azon FROM tevek WHERE mennyi=(SELECT MAX(mennyi) FROM tevek); OSZTALY NEV 1A MAGYAR ANNA 1B KIS MARIA
241
12.feladat: osztályonként, név szerint ki tölt legtöbb időt
egyéb foglalkozással 1.lépés: ki hány órát tölt foglalkozással (ld. előbb) 2.lépés: osztályonkénti max. idő-vel rendelkezők kiválasztása SELECT osztaly, nev FROM tanulo tak WHERE azon IN (SELECT azon FROM tevek WHERE mennyi=(SELECT MAX(mennyi) FROM tevek te, tanulo ta WHERE ta.azon=te.azon AND osztaly=tak.osztaly)); TAK->OSZTALY TAK->NEV 1A MAGYAR ANNA 1B KIS MARIA 2B DENES ZSUZSA 2C SZABO ENDRE ...lassú!
242
1.lépés: ki hány órát tölt foglalkozással
12.feladat: ua. ...gyorsabb! 1.lépés: ki hány órát tölt foglalkozással 2.lépés: kényelmes segédtábla létrehozása 3.lépés: osztályonkénti max. idő-vel rendelkezők kiválasztása SELECT azon, SUM(horasz) FROM tagsag, kor WHERE tagsag.kor=kor.kor GROUP BY azon SAVE TO TEMP tevek(azon,mennyi); SELECT osztaly, nev, ta.azon, mennyi FROM tanulo ta, tevek te WHERE ta.azon=te.azon SAVE TO TEMP kimennyi;
243
12.feladat: 3.lépés select osztaly,nev from kimennyi kk
select * from kimennyi; OSZTALY NEV AZON MENNYI 2B DENES ZSUZSA ,00 2C SZABO ENDRE ,00 2C VARDA DANIEL ,00 1A MAGYAR ANNA ,00 1B KIS MARIA ,00 select osztaly,nev from kimennyi kk where mennyi=(select max(mennyi) from kimennyi kb where kb.osztaly=kk.osztaly); KK->OSZTALY KK->NEV 2B DENES ZSUZSA 2C SZABO ENDRE 1A MAGYAR ANNA 1B KIS MARIA
244
Újdonságok a lekérdező parancson belül
Halmazműveletek INTERSECT EXCEPT vagy MINUS UNION ALL Csoportosítás származtatott oszlopra: megengedett Függvények (definiálhatók!) elhelyezhetők a lekérdezésekben és a megszorításokban.
245
Újdonságok a lekérdező parancson belül
Külső összekapcsolás (OUTER JOIN) SELECT ... FROM T1 LEFT OUTER JOIN T2 ON (összekapcsolás feltétele) vagy SELECT ... FROM T1 RIGHT OUTER JOIN T2 (A fenti 2 Select egyesítése egy lehetséges FULL OUTER JOIN.) Figyelem, a NULL érték nem egyenlő a NULL értékkel!
246
Újdonságok a lekérdező parancson belül
alSelect elhelyezése From-ban: SELECT * FROM T1, (SELECT <mezők> FROM seged) as T2 WHERE ... alSelect elhelyezése Select-ben: SELECT <mezők>, (SELECT <érték> FROM segéd WHERE <feltétel>) [AS <elnevezés>] FROM tábla ...
247
Virtuális tábla (nézet)
Virtuális vagy nézettábla: fizikailag nem jön létre, mégis táblaként kezelhető. A rendszer csak a definícióját őrzi a katalógustáblázatban. CREATE VIEW V-táblanév [oszlopnév-lista] AS SELECT... [WITH CHECK OPTION]
248
ugyanúgy le lehet kérdezni, mintha adattábla lenne
Megjegyzések: ugyanúgy le lehet kérdezni, mintha adattábla lenne ha egyszerű a definíciója, akkor a sor bekerül / törlődik / módosul a táblában adatismétlődés csökkentése miatt hasznos az adatbiztonság megszervezésének egy egyszerű módja
249
V-tábla: SELECT * FROM nezet; OSZTALY NEV 2A VARGA TEREZ
2A MOLNAR GEZA 2B BALOGH MIHALY 2B CINEGE KATA 2B DENES ZSUZSA 2A VIDA ZSOFIA 2C ALMASI GABOR 2C SZABO ENDRE 2C BAN TIBOR 2C PEK LILLA 2C RIGO PAL 2C VARDA DANIEL 2C SZABO PETER CREATE VIEW nezet AS SELECT osztaly, nev FROM tanulo WHERE osztaly LIKE '2_'; View NEZET created
250
V-tábla: SELECT * FROM nezet ORDER BY 1,2; OSZTALY NEV 2A MOLNAR GEZA
2A VARGA TEREZ 2A VIDA ZSOFIA 2B BALOGH MIHALY 2B CINEGE KATA 2B DENES ZSUZSA 2C ALMASI GABOR 2C BAN TIBOR 2C PEK LILLA 2C RIGO PAL 2C SZABO ENDRE 2C SZABO PETER 2C VARDA DANIEL SELECT osztaly, COUNT(*) FROM nezet GROUP BY osztaly; G_OSZTALY COUNT1 2A 2B 2C
251
V-tábla: CREATE VIEW havi(honap,ossz) AS SELECT honap, SUM(osszeg)
FROM segely GROUP BY honap; View HAVI created SELECT * FROM havi; HONAP OSSZ
252
Másodlagos táblanevek
CREATE SYNONYM másodlagos név FOR táblanév; beszédes név / rövidnév használata céljából
253
CREATE [UNIQUE] INDEX I-táblanév ON táblanév (oszlopnév [ASC/DESC])
Indextáblák CREATE [UNIQUE] INDEX I-táblanév ON táblanév (oszlopnév [ASC/DESC]) [,oszlopnév [ASC/DESC])...; a keresés automatikus bármely kulcs szerinti index automatikusan létrejön a többi kívánatos indexet létre kell hozni (látványra nem vonatkozik)
254
I-tábla: CREATE INDEX onsor ON tanulo (osztaly, nev);
Index ONSOR created CREATE INDEX segely ON segely (honap,azon); Index SEGELY created CREATE INDEX segaz ON segely (azon); Index SEGAZ created CREATE INDEX sekif ON segely (kifiz DESC); Index SEKIF created
255
Táblák törlése a) DROP INDEX I-táblanév ;
b) DROP SYNONYM másodlagos név ; c) DROP VIEW V-táblanév ; d) DROP TABLE A-táblanév ;
256
Igények az ABKR felé ABKR felépítése Metaadatok Tárkezelő
Lekérdezés-feldolgozó Tranzakció-kezelő szerkezeti módosítások lekérdezések adatmódosítások + a kapcsolat-teremtés
257
Rendszerkatalógus-táblázatok
SQL2 pl.
258
Rendszerkatalógus-táblázatok a példa ABKR-ben
Sysauth Syscolau Syscols Sysidxs Syskeys Syssyns Systabls Sysvdeps Sysviews Systimes Sysdbs
259
Részletek az ISKOLA adatbázis rendszer-tábláiból
SELECT * FROM SYSTABLS; TBNAME CREATOR TBTYPE COLCOUNT CLUSTERRID INDXCOUNT CREATED UPDATED CARD NPAGES SYSTABLS SYSTEM T SYSCOLS SYSTEM T TANULO T NEZET V HAVI V
260
SELECT * FROM SYSCOLS WHERE TBNAME='NEZET';
COLNAME TBNAME TBCREATOR COLNO COLTYPE COLLEN COLSCALE NULLS COLCARD UPDATES HIGH2KEY LOW2KEY OSZTALY NEZET C Y Y NEV NEZET C Y Y SELECT * FROM SYSCOLS WHERE TBNAME='NEZET'; IXNAME CREATOR TBNAME TBCREATOR UNIQUERULE COLCOUNT CLUSTERING CLUSTERED FIRSTKCARD FULLKCARD NLEAF NLEVELS ONSOR TANULO D N N SEGELY SEGELY D N N SELECT * FROM SYSIDXS;
261
SELECT * FROM SYSVIEWS;
IXNAME IXCREATOR COLNAME COLNO COLSEQ ORDERING ONSOR OSZTALY A ONSOR NEV A SEGELY HONAP A SEGELY AZON A SELECT * FROM SYSKEYS; VIEWNAME CREATOR SEQNO VCHECK READONLY JOIN SQLTEXT NEZET N N Y CREATE VIEW nezet AS SELECT osztaly, nev FROM tanulo WHERE osztaly LIKE '2_'; HAVI N Y N CREATE VIEW havi(honap,ossz) AS SELECT honap, SUM(osszeg) FROM segely GROUP BY honap; SELECT * FROM SYSVIEWS; VIEWNAME TBLNO TBNAME CREATOR NEZET TANULO HAVI SEGELY EVFOLYAM TANULO SELECT * FROM SYSVDEPS;
262
További SQL lehetőségek
megszorítások, triggerek beágyazott SQL dinamikus SQL tranzakciók jogosultság
263
MEGSZORÍTÁSOK ÉS TRIGGEREK
Kulcsok (PK,UK, FK) megadása Attribútum-értékekre vonatk. korlátozások (a kötelező és az alapértelmezett érték szintén) Önálló megszorítások Triggerek
264
Az elsődleges kulcs megadása
CREATE TABLE táblanév( attrib1 típus(n) PRIMARY KEY (attrib1) ); vagy UNIQUE - nem lehet NULL-érték - az index létrehozása
265
Idegen kulcs megadása CREATE TABLE gyerek-tábla ( ... FOREIGN KEY (attribútumok) REFERENCES szülő-tábla (elsődleges kulcsa) ); - a hivatkozási épség fenntartása - folytatható: ON DELETE / UPDATE SET NULL / CASCADE
266
Attribútum-értékekre von. korlátozás
A CREATE TABLE attribútumai mögött NOT NULL CHECK (feltétel) max. sorfeltétel (ui. csak ebben a táblában ellenőriz) vagy CREATE DOMAIN felhaszn. ált. def. típus neve CHECK ( ) utána egy attribútum ilyen típussal már kötött
267
Önálló megszorítások CREATE ASSERTION megszorítás neve
CHECK (feltétel) több sorra / több táblára von. a feltétel (minden esetben igaz marad) DROP ASSERTION (neve) : kitörli, új definiálható
268
A nem önálló megszorítások módosítása
a CONSTRAINT megsz_neve beékelése javasolt ALTER TABLE tábla ADD CONSTRAINT megsz_neve a megszorítás megadása; ALTER TABLE tábla DROP CONSTRAINT megsz_neve;
269
TRIGGERek a megszorítások megsértésének megakadályozásán túl más célok is megvalósíthatók csak biz. esemény bekövetkezése előtt / helyett / után hajtódik végre, egy táblára vonatkozhat a kiváltó esemény: beszúrás / törlés / módosítás tranz. vége, dátum, … adott feltételtől függően: semmi sem történik vagy végrehajtód. a benne levő művelet(ek)
270
TRIGGER CREATE TRIGGER tr.név AFTER / BEFORE / INSTEAD OF
UPDATE [OF attr.] / DELETE / INSERT ON tábla [REFERENCING OLD AS régi NEW AS új] WHEN feltétel SQL-műveletek… [FOR EACH ROW] sorszintű: minden sorra utasításszintű: egyszer (OLD_TABLE, NEW_TABLE)
271
FELADATOK SQL-lekérdezésekre megszorításokkal
FUTÁR KELLÉKES OKTATÁS kérdéseinek megválaszolása továbbá ld. Példatár
272
F U T Á R Megszorítások kulcsok külső kulcsok (not null) Lekérdezések
kiv.: KÜLD.f_szám (lehet null) hivatk. integr. megőrzése küld. kelt >= rendszerdátum kitől <> kinek küld. storno-ja: 1órán belül lehet elnevezés: lehet üres egyéb indexek (*) Lekérdezések Melyik futár járt már a „Rubin Business Center”ben Ki vitt ma küldeményt az „Országos Levéltár”ból a „Széchenyi Könyvtár”ba
273
KE LL ÉK ES Megszorítások kulcsok külső kulcsok (not null)
kiv. EA.darab (lehet null) hivatk. integr. megőrzése hány > 0 frissítés >= 0 számláló <= frissítés cím, elnev.: nem köt.kitöltendő EA.darab megadása után: kiválaszt.példányok száma megfelel a SZÜKSnek és számlálójuk 1-el nő egyéb indexek (*) Lekérdezések. .A ma este 7 órai előadásban hány “szék”-re van szükség Melyik darabhoz kell a legtöbb kellék Melyik kellékből nem áll egy sem rendelkezésre Milyen napokon adják elő az “Ember tragédiája” c. darabot
274
BEÁGYAZOTT SQL - nem a számonkérés része -
SQL használata programozási környezetben SQL utasításokkal: az adatbázis elérése befogadó nyelv. progr. ut.: megjelenítés és adatbevitel köztük: a megosztott elérésű változók (:változónév) EXEC SQL kulcsszó kapcsoló: SQLSTATE / SQLCODE
275
E-tábla sorainak átadása
egysoros tábla elmentése változókba: SELECT céllista INTO változólista FROM táblanév … többsoros táblán ún. sormutatóval FETCH FROM sormutatónév INTO változólista;
276
Az sqlcnt rendszerváltozó (PL/SQL)
Az utolsó SQL parancs által érintett sorok számát egy sqlcnt nevű változó mutatja (ciklusvezérlésre használható) SELECT * FROM nezet; ? "sqlcnt:",sqlcnt sqlcnt:
277
Az sqlcode rendszerváltozó (PL/SQL)
Minden SQL utasítás végrehajtásakor az sqlcode nevű változó felvesz egy értéket; a) sqlcode=0, ha a végrehajtás rendben b) sqlcode<0, ha hiba van c) sqlcode>0, ha speciális hiba van. pl: sqlcode=100 esetén nincs több sor a táblában
278
A sormutató definiálása (PL/SQL)
Az eredménytáblához egy kurzor definiálható, amivel hozzáférünk a sorokhoz. DECLARE kurzornév CURSOR FOR SELECT...
279
A kurzor A SELECT eredményére (az E-táblára) a kurzornévvel hivatkozhatunk. A kurzor egy pointer ("léptetni" lehet). kurzor E-tábla
280
· a kurzor az első sor elé mutat · egyszerre 10 kurzor lehet megnyitva
A kurzor megnyitása OPEN kurzornév; Megnyitja az eredménytáblát (csak akkor lehet használni). · a kurzor az első sor elé mutat · egyszerre 10 kurzor lehet megnyitva
281
A kurzor lezárása CLOSE kurzornév; Lezárja a kurzort. (Az E-tábla tovább nem használható.)
282
A kurzor mozgatása FETCH kurzornév INTO változólista; A kurzort egy sorral lejjebb viszi és az adatsor tartalmát a változókba beviszi (a változók a behívó nyelv változói). Végül a tábla végére mutat.
283
Példa : lista program DECLARE lista CURSOR FOR SELECT osztaly,COUNT(*)
FROM tanulo GROUP BY osztaly; OPEN lista; sor=sqlcnt FETCH lista INTO moszt,mszam; do while sor>0 ? moszt,mszam sor=sor-1 enddo CLOSE lista; A lista futása: 1A 1B 2A 2B 2C
284
A parancs segítségével E-tábla soronkénti kiíratása válik lehetővé.
A FETCH parancs: A parancs segítségével E-tábla soronkénti kiíratása válik lehetővé. Ha a kurzor használata közben valamelyik sort módosítani vagy törölni kívánjuk, a SELECT nem tartalmazhat GROUP BY, ORDER BY klauzákat.
285
Módosítás kurzor segítségével
UPDATE táblanév SET oszlopnév = kifejezés, [oszlopnév =kifejezés...] WHERE CURRENT OF kurzornév; A táblának azt a sorát módosítja, amelyen a kurzor áll.
286
Ha módosítani akarunk, akkor azt tudatni kell a kurzor definiálásakor:
Megjegyzés: Ha módosítani akarunk, akkor azt tudatni kell a kurzor definiálásakor: DECLARE kurzornév CURSOR FOR SELECT ... FOR UPDATE OF oszloplista;
287
Törlés kurzor segítségével
DELETE FROM táblanév WHERE CURRENT OF kurzornév; A tábla azon sorát törli, amelyen a kurzor áll.
288
Példa : programrészletek
DECLARE kkor CURSOR FOR SELECT kor,horasz FROM kor WHERE kor LIKE 'SP%' FOR UPDATE OF horasz; . UPDATE kor SET horasz=mhora+2 WHERE CURRENT OF kkor; ... ... DELETE FROM kor WHERE CURRENT OF kkor;
289
A sormutató mozgatása (SQL2)
A FETCH után lehet: NEXT / PRIOR FIRST / LAST RELATIVE n ABSOLUTE n
290
DINAMIKUS SQL - nem a számonkérés része -
a felhasználótól kapott SQL-utasítás elemzése és végrehajtása futási időben EXEC SQL PREPARE változó FROM :kérdés; a kérdés a befogadó nyelv kifejezése („SQL-utasítás”) EXEC SQL EXECUTE változó; vagy EXEC SQL EXECUTE IMMEDIATE :kérdés;
291
COMMIT : a tranz. sikeres befejezésére az ab-módosításokat véglegesíti
TRANZAKCIÓK Tranzakció: több SQL-utasítás egy csoportja Ezek ab-elérési ill. -módosító műveletek, melyeket atomian kell végrehajtani a csoport minden műveletét végre kell hajtani vagy ha ez nem lehetséges, akkor egyiket sem szabad közülük végrehajtani. COMMIT : a tranz. sikeres befejezésére az ab-módosításokat véglegesíti ROLLBACK : a tranz. sikertelen befejezésére az ab-módosításokat visszagörgeti
292
JOGOSULTSÁGOK Jogok adása GRANT ALL PRIVILEGES / jogosultságlista
ON táblanév TO PUBLIC / felhasználók [WITH GRANT OPTION]; + engedély. képesség Jogosultságlista: SELECT, INSERT, DELETE, UPDATE, REFERENCES
293
JOGOSULTSÁGOK Jogok törlése REVOKE ALL PRIVILEGES / jogosultságlista
ON tábla FROM PUBLIC / felhasználólista; REVOKE GRANT OPTION FOR …
294
FUTÁRszolgálat részletes adatbázis-specifikáció
részletekben kidolgozott minta a rendszer nagyvonalú ismertetése alapján
295
FUTÁR egy nagyváros küldeményeit továbbító diszpécserszolgálat nyilvántartása
A futárok motorral teljesítenek szolgálatot. Küldeményeket a város valamely címén található partnerek rendelik meg, hogy valamely partnertől másik partnernek elvigyék. A küldemény felvételének pillanata és szállításának stádiuma fontos, mert a diszpécsernek tudnia kell, melyik futár éppen hol tart. Fontos, hogy a rendszer gyorsan válaszoljon arra, ki tart éppen egy adott címre. A partnerek közül több is létezhet ugyanazon a címen (ld. irodaházak). A futárok alapóradíját a küldemények száma további díjjal növeli. Valamilyen sűrűséggel a futárokat kifizetik. Értelemszerű lekérdezések…
296
az adatbázis-rendszer specifikációjának tartalma:
a konkrét rendszer pontosítása a rendszer funkciói az adatbázis specifikálása (szerkezet, kapcsolatok, megszorítások, keresések, ellenőrzések) a funkciók adatszintű leírása kimutatások előkészítése archiválás módosíthatóság vázlatos dokumentálás
297
FUTÁRszolgálat pontosítások rendelésfelvétel naponta: 8-20 ó
a szabad motorokat a dolgozó futárok elosztják a futárok munka közben felhívhatók dolgozó futárnál egyszerre több küldemény is lehet dolgozó futár állapota: adott küldeményért megy (kitől címére) adott küldeményt visz (kinek címére) küldemény hiányában várakozik (választ. címen) a futár a szolgálatnak jelzi az egyes küldemények átvételét és átadását (időpontok rögz.) adott naptól az óradíjak és darabárak változhatnak a futárok kifizetése máshol tört. (itt nem készül bizonylat)
298
FUTÁRszolgálat adatbázisa MOTOR {rendsz, adat1,…, kész}
FUTÁR {fszám, fnév, fcím, m_váll1,...} CÍM {cím, elnev, ker, utca, hsz} PARTNER {kód, név, tel, cím} KÜLDEM {azon, megrend, kelt, időpont, kitől, kinek, fszám, átvét, átad} DOLGOZ {dátum, mettől, fszám, meddig, rendsz, ftel, cím, szám} DÍJAK {mióta, óradíj, dbár} ELSZÁM {meddig, fszám, összeg}
299
FUTÁRszolgálat adatbázis-megszorítások
kulcsok (egyik sem lehet null) külső kulcsok (csak a KÜLDEM.fszám lehet null) elnev, átvét, átad, meddig: lehet null átvét<átad kész: true/false óradíj, dbár, összeg: nagyobbak 0-nál szám >= 0 szám aut. vált., az összeg számított mező ahány kész motor van, annyi futár dolgozhat egyszerre Fogalmak: szám: a pillanatnyilag hozzá tartozó küldemények száma összeg: (meddig- mettől)*óradíj + küld.száma*dbár időszakfüggően (dátum és kelt 2 mióta közé esésének figyelése)
300
FUTÁRszolgálat funkciói futárok, partnerek karbantartása
díjak változtatása küldemény megrendelés felvétele * futár indítása * teljesítésének ellenőrzése * átvételének, átadásának rögzítése * futár jelentkezése munkakezdésre / munkavégzésre * pillanatnyi helyzetének rögzítése * elszámolása napi zárás * elszámolás továbbítása a számfejtés felé
301
Részletes funkcionális leírás *
Megrendelés felvétele: új sor KÜLDEMbe azon:=gen. szám kelt:=rendszerdátum, időpont:=rendszeridő megrend, kitől, kinek: létező partnerek többi mező: nem kitöltött [új sorok PARTNERbe, CÍMbe] választás dolgozó futárok közül (§): felt.: szám=0 vagy a kitől és DOLGOZ.cím összevetéséből telefonon megegyezés / várakozás Futás indítása: üres fszám-os küldeményekhez: § azon és kitől bediktálása futárnak fszám módosítása KÜLDEMben szám megnövelése és cím inputja DOLGOZban
302
Részletes funkcionális leírás *
Küldemény teljesítésének ellenőrzése: választott küldemény állapota: futára sincs még (fszám üres) futár megy érte (fszám van és átvét üres) futár viszi címzettnek (fszám és átvét van, átad üres) teljesítve (átad van) Küldemény átadásának / átvételének rögz.: futár helyes azon-ra hivatkozik: átvét:=rendszeridő, DOLOZ.cím beolvasása vagy átad:=rendszeridő, szám csökkentése, DOLGOZ.cím beolvasása Dolgozó futár helyzetének módosítása: felt.: szám=0 cím: input
303
Részletes funkcionális leírás *
Futár munkakezdése: felt: van-e kész MOTOR új sor DOLGOZba (adott fszám, rendszerdátum és -idő, választott rendsz, input ftel) meddig: üres, cím: input, szám:=0; MOTOR.kész:=false Futár munkavégzése: felt: szám=0 meddig módosítása, MOTOR.kész: input Napi zárás: felt.: minden DOLGOZ.meddig: kitöltve MOTORban a kész frissítése KÜLDEM tételes listázása (törzsadatokkal és aktuális díjakkal) KÜLDEM sorainak felfűzése az ÖSSZKÜLDhez új üres KÜLDEM létrehozása DOLGOZ sorainak felfűzése az ÖSSZDOLGhoz új üres DOLGOZ létrehozása
304
FUTÁRszolgálat listái
elszámolások havi / futár szerinti bontása napi szállítások időtartama, napi összes holtidő küldemények napi számának átlaga megrendelők gyakorisága a legsűrűbben felkeresett címek * két cím közötti legrövidebb ill. leghosszabb teljesítés ... SQL-megoldásokkal
305
SAVE TO TEMP ossz(kod, ossz); SELECT cim, SUM(ossz)
* SQL-megvalósítása % SELECT kod, SUM(szaml) FROM seg GROUP BY kod SAVE TO TEMP ossz(kod, ossz); SELECT cim, SUM(ossz) FROM ossz o, partner p WHERE o.kod=p.kod GROUP BY cim SAVE TO TEMP vegl(cim, ossz); SELECT * FROM cím WHERE cím IN (SELECT cím FROM vegl WHERE ossz= (SELECT MAX(ossz) FROM vegl)); SELECT kitol, COUNT(*) FROM osszkuld GROUP BY kitől SAVE TO TEMP seg(kod, szaml); SELECT kinek, COUNT(*) GROUP BY kinek SAVE TO TEMP seg2(kod, szaml); INSERT INTO seg FROM SELECT * FROM seg2; %
306
FUTÁRszolgálat javaslatok archiválásra és bővítésre
hetente teljes másolat készítés hivatk. nélk. törzsadatok törlése 3 hónap után megengedett időszerű kifizetések adatainak feladása után az ELSZÁM ELSZÁMév_hó_nap néven csak olvasható ... küldemény stornózása problémás esetek kezelése (baleset - új futár, hibás cím, visszaküldés, …) számlázás a megrendelők felé futárok kifizetésének bizonylatolása motorok állapota (szervízelés, káreset, …); üzemanyag nyilvántart.
Hasonló előadás
© 2024 SlidePlayer.hu Inc.
All rights reserved.