Vissza az előzőleg látogatott oldalra (nem elérhető funkció)Vissza a tananyag kezdőlapjára (P)Ugrás a tananyag előző oldalára (E)Ugrás a tananyag következő oldalára (V)Fogalom megjelenítés (nem elérhető funkció)Fogalmak listája (nem elérhető funkció)Oldal nyomtatása (nem elérhető funkció)Oldaltérkép megtekintése (D)Keresés az oldalon (nem elérhető funkció)Súgó megtekintése (S)

Tehetséggondozás az informatikában – Adatbázis-kezelés / Adatbázis-tervezés, normalizálás /OKTV 2005/2006. 3. forduló 10. feladat (Járatok) A és B részfeladatok

Adatbázis-tervezés, normalizálás

OKTV 2005/2006. 3. forduló 10. feladat (Járatok) A és B részfeladatok

Ebben a feladatban a rendelkezésünkre bocsátott nyersanyagokat felhasználva magunknak kell megterveznünk az adatbázis sémáját. Lássuk a feladat szövegét.

Megjegyzés

A teljes feladatsor megtalálható a Függelékben, valamint elérhető a http://tehetseg.inf.elte.hu/nemesa/2006/Nt06-3f4.doc cím alatt [Utolsó megtekintés: 2014. június 30.]

Feladat

A Nevesincs Közlekedési Szövetség autóbusz járatinformációit egy adatbázisban szeretnénk tárolni (járatok.mdb). Azokat a kulcsfogalmakat, amelyek az adattárolás szempontjából fontosak számunkra, vastagon szedjük a következő mondatban: A menetrend megadja, hogy melyik járat, melyik település megállóhelyére mikor érkezik, és a járatról azt is tudjuk, hogy ki a sofőr. FelŹtehetjük, hogy egy járat egy településen csak egyszer áll meg. A sofőrökről tároljuk, hogy hány éve vannak szolgálatban a Szövetségnél (sofor.txt).

  • A. Tervezz adatbázis struktúrát a fent leírt adatok tárolására! Hozd létre a táblákat, és a köztük lévő kapcsolatokat! Minden táblában legyen elsődleges kulcs! A menetrendek tárolását úgy kell kialakítani, hogy elvben tetszőlegesen sok járat lehet, és egy járat tetszőlegesen sok településen megállhat. Az tehát nem jó megoldás, hogy annyi oszlopot veszünk fel, ahány település vagy ahány járat maximum lehet. Ügyeljünk arra, hogy egy információt feleslegesen többször ne tároljunk, továbbá azt is oldjuk meg, hogy a menet-rendben szereplő városnevek csak a menet0.txt fájlban tárolt nevek közül kerülhessenek ki (természetesen a városnevek itt megadott listája a későbbiekben bővülhet, az adatbázis ezt is támogassa)! A tervezésnél vedd figyelembe, hogy az Általad létrehozott táblákba kell betölteni a B. feladatban megadott fájlok adatait (érdemes először a fájlok adatait megtekinteni)!
  • B. Töltsd fel az adatbázisodat a kapott fájlok adatai alapján! A települések listáját a menet0.txt fájlban, a sofőrök listáját (sofőrazonosító, név, hány éve dolgozik a cégnél) a sofor.txt-ben a járatinformációkat (járatszám, sofőr azonosítója) a jarat.txt-ben, a menetrendi adatokat pedig a menet1.txt – menet9.txt fájlokban találod, ez utóbbiaknál a járat azonosítója a fájlnévből olvasható ki. A szöveges fájlokban kapott adatokat érdemes bemásolni Excel-be vagy egy szövegszerkesztőbe, és ott hozni őket olyan formára, hogy bemásolhatók legyenek az adatbázis tábláidba.
Megjegyzés

E feladat elegáns elkészítéséhez szükség lesz a korábbi példákhoz képest mélyebb táblázatkezelői ismeretekre is, ha nem vagyunk elég figyelmesek. ☺

Példa

Javasolt megoldás:

Megoldási terv:

Mivel a forrásadatok összesen 11 állományban (Jarat.txt, Sofor.txt, menet0-9.txt) vannak tárolva, célszerűnek tartom ezeket egy Excel munkafüzetbe összefogni. Egyrészt azért, mert egyben kezelhetőbbek, másrészt azért, mert ha megnyitjuk az egyes szöveges állományokat, láthatjuk, hogy az összefésülés mellett még sok más dolgunk is lesz velük.

A legkönnyebb dolgunk a Sofor.txt, a Jarat.txt és a menet0.txt állományokkal lesz, hiszen az ezekben szereplő adatok fogják adni a Sofőrök, a Járatok és a Települések táblák adatait. A Településeknek azért célszerű külön táblába kerülniük, mert a feladat is kiemelte, hogy ezeknek a listája folyamatosan bővülhet, így, ha külön táblában vannak eltárolva, akkor biztosíthatjuk azt, hogy csak azokat a településeket használhassuk fel a menetrendben, melyek szerepelnek a Települések táblában is (emlékezz az anomáliákra).

A menet1-9.txt állományokkal első látásra nehezebb dolgunk lesz. Ha megnyitjuk az egyiket, láthatjuk, hogy a települések nevei és a járatok érkezési időpontjai szerepelnek bennük. Első ránézésre láthatjuk, hogy mindegyik állományból hiányoznak az oszlopnevek, ezeket feltétlenül pótolnunk kell, de a feladat megoldása során láthatjuk, hogy még más, fontos adat is hiányzik belőlük.

Javasolt megoldás lépései:

Kezdjük először a menet0.txt állománnyal! Ebben találhatóak a településnevek.

  • Nyissunk egy üres Excel állományt, mentsük el jarat_forras.xlsx néven, majd kattintsunk az Adatok fülre, és itt a Szövegből gombra!
  • Tallózzunk rá a menet0.txt állományra, majd menjünk végig az importálás varázsló lépésein!
  • Az első lépésben nézzük meg, hogy a mintában minden egyes város neve rendesen megjelenik-e (ékezetes karakterek)! Ha nem, akkor A fájl eredete legördülő listát nyissuk le, és keressünk olyan karakterlapot, amely jól jeleníti meg az ékezetes karaktereket. Ha ez megvan, menjünk tovább.
  • A következő lépésben a mezőket határoló karaktert kell kiválasztani. Az Excel általában jól felismeri a határoló karaktereket, de minden esetben érdemes a mintán megnézni, hogy minden oszlopban normálisan jelennek-e meg az adatok. Ha valahol nem, akkor másik határoló karaktert kell választani. Ennél az állománynál szerencsére nincs probléma, hiszen csak egyetlen oszlopot tartalmaz.
  • Az utolsó lépésben megadhatjuk az oszlopnak a típusát, de akkor sincs probléma, ha Általánoson hagyjuk, a későbbiekben módosíthatjuk. Ezután kattintsunk a Befejezés gombra, és szúrjuk be a munkalapra az adatokat.
  • Miután beimportáltuk az adatokat, szúrjunk be egy sort az oszlop elejére, és írjuk be, hogy Település! Ez lesz ennek a mezőnek a neve.
  • Ha ezzel megvagyunk, nevezzük el a munkalapot Településnek! Ez lesz majd az adatbázisban a Település tábla.

A következőkben a Jarat.txt-t fogjuk beimportálni.

  • Hozzunk létre egy új munkalapot az Excel állományban, és nevezzük el Járatoknak! Ez lesz majd az adatbázisban a Járatok tábla.
  • Az előző alapján importáljuk be a Jarat.txt tartalmát! Ügyeljünk a karakterkódolásra!
  • Az importálás után szúrjunk be egy sort a táblázat elejére, majd nevezzük el az oszlopokat! Az első oszlopban a járatazonosítók vannak, így nevezzük Járatazonosítónak! A másodikban a sofőrazonosítók szerepelnek, így azt nevezzük Sofőrazonosítónak!

Ezután a Sofor.txt-t importáljuk be.

  • Az előzőekhez hasonlóan hozzunk létre egy új munkalapot Sofőrök néven!
  • Ennek az állománynak a kódolását nem ismeri fel az Excel; itt a 1250: közép-európai (Windows) karakterkódolást kell használni.
  • Ezután a korábbi módon menjünk végén az importálás varázslón!
  • Miután beimportáltuk az adatokat, szúrjunk be egy sort, és nevezzük el az oszlopokat: Sofőrazonosító, Sofőr_neve, Évek_száma!

A következőkben importáljuk be a menet1-9.txt állományokat. A munkalapot nevezzük el Menetrendnek.

Kezdjük az importálást a menet1.txt-vel!

  • Lépjünk rá az imént létrehozott Menet1_nyers nevű munkalapra!
  • A korábbi táblákhoz hasonlóan menjünk végig az importálás varázsló lépésein! Ügyeljünk a megfelelő karakterkódolásra!
  • Ha nem figyelünk importálás közben, akkor határoló karakternek ott hagyhatjuk a tabulátort az importálás varázslóban, és így minden sort egyetlen cellába fog beilleszteni. Ha ezt tesszük, és nem jut eszünkbe, hogy próbáljunk ki más határoló karaktert, akkor kicsit megnehezítettük a saját dolgunkat – ahogy én tettem először. Ebben a nehezített esetben az Excel Szöveg függvényeit (a Bal, a Közép és a Szöveg.keres függvényeket megfelelő paraméterezéssel) kell alkalmaznunk ahhoz, hogy megfelelő formára hozzuk a nyers állományt. Viszont ha figyelmesek voltunk, akkor láthattuk, hogy a menet1-9.txt állományok esetén a határoló karakter a szóköz.
  • Ha sikeresen beimportáltuk – szóköz határoló karakter használatával – a menet1.txt állomány adatait, akkor láthatjuk, hogy nincsenek oszlopnevek. Szúrjunk be egy sort a táblázat elejére, és nevezzük el az oszlopokat Településnek és Érkezésnek!
  • Már csak egy problémánk van ezzel az adathalmazzal: szerepelnek benne a települések és az érkezési idők, viszont az nem, hogy ezek az adatok melyik járathoz tartoznak. Ez azért probléma, mert így számunkra is nehéz lesz azonosítani a járatokat, de ami fontosabb, hogy nem fogjuk tudni összekapcsolni a Járatok táblával. Ezért szúrjunk be egy új oszlopot a Település oszlop elé, és nevezzük el Járatazonosítónak! Ha ez megvan, akkor a települések nevei elé írjunk mindenhova 1-est, hiszen a menet1.txt – aminek az adataival jelenleg dolgozunk – az 1-es azonosítójú járat adatait tartalmazza.
  • Álljunk be a következő üres sorba, majd importáljuk be a menet2.txt-t! A módszer megegyezik az előző tábla importálási lépéseivel (karakterkódolás, határoló karakter).
Megjegyzés

Innentől kezdve már nem kell felvennünk az oszlopneveket, hiszen azok a legelső sorban szerepelnek.

  • Ha beimportáltuk az adatokat, akkor a Járatazonosító oszlop üres részeit töltsük fel 2-es számmal, mert ezek az adatok a 2-es azonosítójú járathoz tartoznak.
  • Ismételjük meg a fenti lépéseket a menet3-9.txt állományokkal!
  • Miután a menet1-9.txt állományokat beimportáltuk a Menetrend munkalapra, és fentieknek megfelelően kiegészítettük az adatokat, már csak egyetlen teendőnk maradt: az Érkezés oszlopban az óra és a perc közötti vessző karaktereket ki kell cserélnünk „:” (kettőspont) karakterekre. Ehhez célszerű használnunk a Keresés-csere funkciót (Kezdőlap fül, Keresés és kijelölés gomb, Csere menüpont, vagy CTRL+H billentyűkombináció). Ezután egy javaslat a gyorsabb cserére (lehet, hogy van jobb megoldás is): a Keresett szöveg mezőbe írjuk be az órát, majd tegyünk utána vesszőt (6,), a Csere erre mezőbe pedig írjuk be az órát, majd tegyünk utána kettőspontot (6:). Ezt követően kattintsunk Az összes cseréje gombra, és ismételjük meg minden, az oszlopban szereplő óra esetén!

Ha mindegyik állományt beimportáltuk, akkor elkészült a jarat_forras.xlsx állományunk, ami megfelelő formában tartalmazza adatbázisunk minden táblájának minden adatát.

Ezután nincs más dolgunk hátra, mint létrehozni az adatbázist, beimportálni a jarat_forras.xlsx állományból az adatokat, majd beállítani a táblák közötti kapcsolatot.

  • Hozzuk létre a jaratok.accdb adatbázist!
  • Importáljuk be a táblákat! (Részletesen lásd az Importálási lehetőségek című fejezetet!) Ügyeljünk arra, hogy a táblák kapcsolataiban részt vevő mezők (idegen kulcsok) azonos típusúak és mezőtulajdonságúak legyenek!
  • Állítsuk be az egyes táblákban az elsődleges kulcsokat is!
    • A Települések táblában egyetlen mező található, ami a települések neveit tartalmazza; állítsuk ezt be elsődleges kulcsnak!
    • A Járatok táblában legyen a Járatazonosító az elsődleges kulcs, hiszen egy járatot általában ugyanaz a sofőr vezet végig.
    • A Sofőrök táblában a Sofőrazonosító egyértelműen azonosítja a sofőröket, ezért legyen ez a mező az elsődleges kulcs!
    • A Menetrend táblában a három mező közül önmagában egyik sem azonosítja egyértelműen a másik két mezőt. Például, ha a Járatazonosító mezőt választanánk elsődleges kulcsnak, az nem határozza meg egyértelműen a Település és az Érkezés mező értékeit. Így tehát ebben a táblában az elsődleges kulcs egyben összetett kulcs, vagyis több mezőt foglal magába. Két lehetőségünk van: az egyik, hogy elsődleges kulcsnak választjuk a Járatazonosító és a Település mezőket együtt. A másik, hogy a táblában szereplő mindhárom mező fogja alkotni az elsődleges kulcsot. Az előbbi esetén a Járatazonosító és a Település már egyértelműen meghatározza az Érkezést, hiszen a feladat szövege kiemelte, hogy feltehetjük, hogy minden járat minden településen csak egyszer áll meg, vagyis csak egyszer érkezhet meg oda. Az utóbbi eset (vagyis hogy a három mező együttesen alkotja az elsődleges kulcsot) pedig garantálja, hogy még véletlenül se legyen ismétlődés a rekordok között.
  • Ha minden táblát beimportáltunk, állítsuk be a kapcsolatokat! Kattintsunk az Adatbáziseszközök fülre, majd itt a Kapcsolatok gombra. Állítsuk be az alábbi ábrán látható kapcsolatokat (ne feledkezzünk meg a Hivatkozási integritás megőrzéséről)!
A kép (nagyobb változata) külön ablakban is megtekinthető.9_full.jpg9. ábra: A jaratok adatbázis táblái és a köztük lévő kapcsolatok

Ezzel pedig elérkeztünk ennek a részfeladatnak a végéhez.

Vissza a tartalomjegyzékhez

Új Széchenyi terv
A projekt az Európai Unió támogatásával, az Európai Szociális Alap társfinanszirozásával valósul meg.
Készült az "Országos koordinációval a pedagógusképzés megújításáért” című TÁMOP-4.1.2.B.2-13/1-2013-0007 pályázat keretében.

A tananyag az ELTESCORM keretrendszerrel készült