Tamás Ferenc: Adatbáziskezelés alapjai 3. rész


Ebben a részben egy gyakorlati feladatot oldunk meg. Ez legyen a 2014-es májusi informatika középszintű érettségi adatbáziskezelési feladata! A feladat pontos URL-je: http://dload.oktatas.educatio.hu/erettsegi/feladatok_2014tavasz_kozep/k_inf_14maj_fl.pdf

Az utasfelmérésről szóló feladat a következőképpen kezdődik:

„A budapesti utazási szokásokat rendszeresen vizsgálja a közlekedési vállalat. Az autóbuszjáratok terhelését és kihasználtságát utasszámlálással és úticél-felméréssel vizsgálják.
A felmérők a megállóba érkező (és ténylegesen utazni akaró) személyt, vagy együtt érkező személyeket (továbbiakban együtt utazó utasok) megkérdik utazásuk céljáról. A célt és kérdezés időpontját, valamint az együtt utazó utasok számát feljegyzik.
Az adatbázisban a 20E busz Keleti pályaudvartól Káposztásmegyerig közlekedő viszonylatának és az ott végzett felmérés adatainak egy része szerepel. Rendelkezésre állnak a 20E busz vonalán a megállók nevei, és a megállókban a felmérőbiztosok által rögzített adatok üzemkezdettől délig.
1. Készítsen új adatbázist felmeres néven! A mellékelt állományokat (utazas.txt, megallo.txt) importálja az adatbázisba a fájlnévvel azonos táblanéven! Az állományok tabulátorral tagolt, UTF-8 kódolású szövegfájlok, az első soruk a mezőneveket tartalmazza. A létrehozás során állítsa be a megfelelő típusokat és kulcsokat!
Táblák:
utazas (az, honnan, hova, mikor, letszam)
az Az adatrögzítés azonosítója (számláló), ez a kulcs
honnan A megálló neve, ahol az adatrögzítés történt (szöveg)
hova Az együtt utazók által megadott célmegálló neve (szöveg)
mikor Az adatrögzítés időpontja (idő)
letszam A megállóba együtt érkező utazók száma (szám)
megallo (nev, menetido)
nev A megálló neve (szöveg), ez a kulcs
menetido A busz menetideje az induló végállomástól a megállóig (idő)”

A megoldás első lépéseként indítsuk el az adatbáziskezelőt, majd hozzunk létre egy „felmeres” nevű üres adatbázist.
 
Most nyissunk meg egy új adatbázist!


 
Sok lehetőség közül ez az egyetlen, ami teljesen üres. A többi már előzetesen meg van formázva. Tapasztalatom szerint tanulni a teljesen üres adatbázissal lehet igazán!


 
Persze itt már el kell menteni az adatbázist – még a konkrét munka megkezdése előtt!


 
Ez a kép már ismerős lesz!
 

Következő lépés az importálás. Ehhez e fenti helyről le kell tölteni az adatok forrását (http://www.oktatas.hu/bin/content/dload/erettsegi/feladatok_2014tavasz_kozep/k_inffor_14maj_fl.zip), majd kitömörítés után beszúrni!
A „Külső adatok” menü alatt a „Szövegfájl”-t kell kiválasztani.


 
Ez a szokásos Windows alatti kiválasztással megoldható pár kattintással.


 
A lehetséges opciók közül az elsőt érdemes kiválasztani („Forrásadatok importálása új táblába az aktuális adatbázisban”). Az „OK” megnyomása után a program felhozza a következő ablakot:


 
Nem szabad megijedni az ismeretlen karakterektől, mert ezek hamarosan eltűnnek. Ebben az adatbázisban tabulátorral határolt adatok vannak, így a felső pontot kell kiválasztani. A „Tovább” gomb után a következő képernyő jön:


 
Az adatbázis első sora tartalmazza a mezőneveket (honnan, hova, mikor, letszam), így a fenti képen ezt az opciót ki kell pipálni. A következő képen egyesével lehet beállítani a mezőket, de ez általában felesleges.


 
A rendszer felajánl egy elsődleges azonosító kulcsot. Ezt érdemes elfogadni (főleg, mert a feladat is ezt kéri). A következő képen látható a „Speciális…” gomb, amit érdemes megjegyezni, ugyanis a magyar nyelv okozta ékezet-zavarok így kiválóan kiküszöbölhetők.


 
Az alapértelmezett betűkészlet helyett a „Unicode (UTF-8)”-at kell kiválasztani, majd az OK-vel jóvá kell hagyni a kiválasztást.


 
Így már megszűnnek a furcsa karakterek és a következő kép fogad bennünket:


 
Most már csak a tábla névadása van hátra. Ez a feladatnak megfelelően legyen „utazas”.


 
A mentés után a rendszer még felajánlja, hogy ezen lépéseket elmenti egy következő importáláshoz mintaként. Ízlés kérdése, hogy ezt a felhasználó elfogadja-e. Én személy szerint jobban szeretem, ha kézzel irányíthatom az egyes lépéseket.


 
Most már végre látható a teljes, importált tábla.
 
Ugyanezt meg kell ismételni a másik, „megallo” nevű táblával!
 


Most, hogy a sok lépést igénylő importálással megvagyunk, bőven jut idő a további feladatokra is!

„A következő feladatok megoldásánál a lekérdezéseket és a jelentést a zárójelben olvasható néven mentse! Ügyeljen arra, hogy a lekérdezésben pontosan a kívánt mezők szerepeljenek, felesleges mezőt ne jelenítsen meg!
2. Készítsen lekérdezést, amely a „Vadgesztenye utca” megállóban várakozó megkérdezett utasok felmérési idejét, célállomását és az együtt utazók számát sorolja fel! (2vad)”

Először kössük össze a két adattáblát a megfelelő ponton. Ehhez értelemszerűen a megállók neve a lehetséges egyetlen kapcsolat. Fontos, hogy ez minden adatbázisnál más és más lehet!


 
A „Kapcsolatok” gomb lenyomása után ki kell választani az adattáblákat. Most mind a kettőt.
 
A két adattábla meg fog jelenni a fő képernyőn.
 
A „megallo” tábla „nev” mezőjét össze kell egérrel kötni az „utazas” tábla „honnan” mezőjével. Az egér megfelelő használata után a következő kép jelenik meg.
 
A „Létrehozás” lenyomása után immár megjelenik a tényleg összekapcsolt két adattábla.
 


Ha ez a kapcsolat megvan, akkor jöhet a konkrét lekérdezés létrehozása! Először a „Létrehozás” eszköztáron a „Lekérdezéstervező” gombra kell kattintanunk.
 
Így megjelenik a főablak aljában a lekérdezés helyes összeállításához szükséges lekérdező-mező.
 
Egyesével ki kell választani a lekérdezéshez szükséges mezőket. Ezek az „utazas” táblában lévő honnan, hova és letszam mezők. Ezeket simán kattintással lehet kiválasztani, vagy a lenti lekérdezés-mezőkbe való beírással. Érdemes megfigyelni, hogy ha a „Megjelenítés” sorban lévő mező ki van pipálva, akkor a mező megjelenik, de csak akkor.
Mivel a feladat úgy szól, hogy a csak Vadgesztenye utcában felszállókat kell kérdezni, ezért a honnan mezőt nem kell megjeleníteni (hiszen ez a Vadgesztenye utca), viszont ki kell írni az utcanevet feltételként. Ezt értelemszerűen a „Feltétel” sorba kell beírni, de az egyenlőségjellel nem kell vesződni. Ezt mutatja a lenti kép.
 
A lekérdezés csak akkor lehet teljes, ha el is mentjük. Módszer: kattintás a lekérdezés nevére. Ezt a lenti kép mutatja. A lekérdezés csak így futtatható!
 


Most jöhet a következő lekérdezés!

„3. Lekérdezés segítségével határozza meg, hogy a legnagyobb létszámú csoport melyik megállóból hova szeretne utazni, mikor történt a kikérdezésük és hányan utaznak! (3csoport)”

Itt is össze kell hozni az előző részben leírtak szerint a megfelelő mezőket Ez látható az alábbi képen:
 
Itt mindössze arra kell figyelni, hogy nem az összes értéket kell megjeleníteni, hanem csak egyetlen egyet. Tehát a fenti képen a „Visszatérés:” értékét át kell írni (ott, ahová a piros nyíl mutat). A válaszpanelbe való belekattintás után elkezdhetjük beírni az 1-et. Sajnos a rendszernek alapértelmezés szerint megvan az a rossz szokása, hogy 100-ra egészíti ki a visszatérő értéket.
 
De ezeket a felesleges nullákat le lehet törölni, majd már látható is a jelenlegi eredmény.
 
Ezzel csak az a bökkenő, hogy a legelső ilyen értéket adja vissza, nem pedig a feladatban kívánt legnagyobbat. Így a „Rendezés:” sorában egérrel ki kell választani a megfelelő rendezési módszert. Itt a „letszam” oszlopában a legördülő mezőből kell kijelölni a „Csökkenő” mezőt.
 
Most már a mentés van hátra, majd a következő tervezési nézet lesz látható:
 
Most már kipróbálhatjuk az immár kész lekérdezést! Íme:
 
A következő feladatra térve jöhet egy újabb lekérdezés összeállítása!

„4. Adja meg lekérdezés segítségével, hogy a „Chinoin utca” megállóban 7:00 és 8:00 óra között először megkérdezett utasok melyik megállóba kívántak utazni! (4koran)”

Itt a szokásos lépéseket tehetjük meg. Ki kell választani a honnan mezőben a „Chinoin utca” feltételt, illetve a hova és a mikor mezőket. Ám a mikor mezőben a feladatnak megfelelően kell két feltételt szabni: 7 óránál később, illetve 8 óránál korábban utazzon az illető. Ezt először legtöbben így készítik el:

 
Ám ez hibás, mivel a két feltételt össze kell fűzni! Jelen állapot szerint a két feltétel megengedő vagy viszonyban van, ami most helytelen. Ha a két feltételt összekapcsoljuk egy „And” (és) szóval, akkor már megfelelő eredményt kapunk.
 
A feltételek okozta zavarban elfelejtettük kikapcsolni a „honnan” mezőt, így most a következő futtatási nézetet kapjuk:
 
Szerencsére bármikor javíthatunk, így a honnan mező láthatóságát kapcsoljuk ki a tervező nézetben!
 
Most már tényleg a helyes megoldást kapjuk meg!
(Megjegyzés: ha a feladatot szó szerint értelmezzük, akkor a „mikor” mező is feleslegesen jelenik meg!)

Most jöhet az 5. számú feladat:

„5. Adja meg lekérdezés segítségével azt a két megállót, amely között a legtöbb utas közlekedett a teljes felmérési időszakban! Az eredményben a két állomás neve és az utasok számának összege jelenjen meg! (5forgalmas)”

Elsőnek a szokásoknak megfelelően válasszuk ki a szükséges mezőket!
 
Most egy olyan művelet jön, ami eddig nem volt: az „Összesítés”. Ezt a lent látható gombbal érhetjük el:
 
Fent látható, hogy az „Összesítés” gombra kattintás után megjelenik egy új sor a mezők között „Összesítés:” néven. Miután létszám szerint kell összegeznünk, ezért a szokásos legördülő menüből válasszuk ki a „Sum” (összeadás) mezőt.
 
A visszatérési értéket itt is 1-re kell állítani.
 
Így már a következő képet kapjuk a lekérdezés futtatásakor:
 
Még egy apróság, ami szebbé teszi a megjelenést: a lekérdezés jelenlegi felirata: „SumOfletszam”, de ez elég csúnya. Ha a mezőbe belekattintunk egérrel, akkor szerkeszthetővé válik, így már szebbé tehetjük a feliratot. Pl.: „utasok száma: letszam”.
 

„6. Készítsen lekérdezést, amely meghatározza, hogy a „Chinoin utca” megállótól a „Vadgesztenye utca” megállóig mennyi a menetidő! Az eredményt tetszőleges formátumban megjelenítheti. (6menet)”

Itt is a megfelelő mezők kiválasztásával kell kezdeni, de a megszokott „utazas” tábla helyett most a „megallo” táblát vegyük elő. Mivel itt nem a legegyszerűbb lekérdezésről lesz szó, ezért most hozzunk létre két segédlekérdezést, amelyeket majd összehangolva meg tudjuk oldani az aktuális feladatot. Tehát 6s1 néven hozzunk létre egy segédlekérdezést, amelyben megnézzük, hogy a busz mikor ér a „Chinoin utca” nevű megállóba. Ennek eredménye 19 perc lesz.
 
Most jöjjön a 2. segédlekérdezés, amelyben a „Vadgesztenye utca” idejét tudjuk meg. Ez persze 28 perc lesz.
 
Mivel mindkét lekérdezés számot (illetve időt) adott eredményül, ezért ki lehet őket vonni egymásból. Ehhez nem a megszokott táblákból kell válogatni, hanem a lekérdezésekből.
 
Amikor már megvan a két beviteli lekérdezés, akkor a kivonást beírni!
 
Ekkor sajnos a végeredmény nem az áhított 9 perc lesz, hanem 0,00625. Tehát ebből sejthető, hogy valami formai gondunk van. Ehhez elő kell venni a Tervező nézetben a Tulajdonságlapot!
 
A képernyő jobb oldalán megjelenő formázási lehetőségekből a formátum sorba kell beírni a „Rövid idő” kifejezést, így már a helyes formátumú választ kapjuk meg a lekérdezés futtatásakor.
 
Végül jöjjön egy jelentés is!

„7. Készítsen jelentést, amely kilistázza, hogy a „Vadgesztenye utca” megállóban óránként hány utast kérdeztek meg! A jelentés létrehozását lekérdezéssel vagy ideiglenes táblával készítse elő! A jelentés elkészítésekor a mintából a mezők sorrendjét, a címet és a mezőnevek megjelenítését vegye figyelembe! A jelentés formázásában a mintától eltérhet. (7idodb)”

Ehhez hozzunk létre egy segédlekérdezést. Az „utazas” táblából vegyük sorra a mikor, letszam és honnan mezőket, majd az első kettőt írassuk is ki, míg a honnan mezőt kiíratás nélkül tegyük feltételessé, mivel csak a Vadgesztenye utcát szükséges most vizsgálni.
 
Ekkor még nem látszik az óránkénti csoportosítás. Első lépésként az összesítés gombra kattintással a mikor mezőt csoportosítsuk (Group by), illetve a letszam mezőt összesítsük (Sum).
 
Ám ezzel még nem vagyunk készen, mivel a program nem óránként csoportosít, hanem indulási időpontonként. Ehhez kézzel át kell írni a mikor mezőt a következőre:
Óra: Hour(mikor)
 
Így már megfelelő lesz a lekérdezés, mivel tényleg óránkénti csoportosítást kapunk. A jelentés egyszerűsítési miatt a SumOfLetszam kifejezést érdemes átnevezni valami egyszerűbbre, itt a képen „fő” lett az új név.
Most már kezdjük el a jelentést! Fontos, hogy a legegyszerűbb formátum létrehozásakor a fénymutatóval azon a lekérdezésen álljunk, amiből a jelentést szeretnénk létrehozni.
 
A kattintás után a következő kép fogad:
 
Innen már a felső eszköztárral igen könnyű lesz a megfelelő szerkesztettség elérése. Pár kattintással eljuthatunk a kész felülethez!
 

Ezzel a feladat végére értünk, de a cikksorozat még folytatódik!