Az előadás letöltése folymat van. Kérjük, várjon

Az előadás letöltése folymat van. Kérjük, várjon

ADATBÁZISKEZELÉS Kupcsikné Fitus Ilona

Hasonló előadás


Az előadások a következő témára: "ADATBÁZISKEZELÉS Kupcsikné Fitus Ilona"— Előadás másolata:

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 NY

131 O L V A S Ó F O G L A K

132 K Ö L C S N Z É PÉL 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 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 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.

168

169

170

171

172

173

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).

179

180

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

182

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ó (_ %)

185

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

188

189

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.

191

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.

194

195

196

197

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);

200

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.

202

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)

204

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

207

208

209 Rövidnevek megadása itt kötelező!

210

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

219

220

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.


Letölteni ppt "ADATBÁZISKEZELÉS Kupcsikné Fitus Ilona"

Hasonló előadás


Google Hirdetések