3.3.1. Oktatás

iDevice ikon

A rendszer ismertetése

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, egy osztályba sok diák jár. Egy tanár több tárgyat is taníthat, és fordítva. Ugyanannak az osztálynak több tárgyat, illetve egy tárgyat több osztálynak is taníthat ugyanaz a tanár. A nap és óra sorszámozott típusú (1-5: a napok, 1-8: az órák), a tantárgy kódja beszédes (pl. MAT4: negyedikes matematika).

Kellenek a törzsek, a tanítás ténye és maga az órarend.

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}

 

Kapcsolatok

15. ábra

 

Gyakorlás céljából töltse le az Access-adatbázist!

Figyelje meg, hogy az Access nem egy vonallal húzza be a kapcsolatot az összetett külső kulcs felől!

 

 

Azonnal látjuk, hogy ebben az adatbázis-kezdeményben nincs osztály-törzs, és az egyes évfolyamok tematikája nincs tárolva. Ha az iskolatitkár fegyelmezetten indítja a tanévet, és azt kell berögzíteni, akkor ez az adatbázis megfelelő.

Követelmények:

  • egy osztályba sok diák járhat
  • egy tanár több osztályt taníthat
  • egy tanár több tárgyat taníthat
  • egy tanár egy osztálynak több tárgyat taníthat
  • egy tanár egy tárgyat több osztálynak taníthat
  • az órarend mind az osztály, mind a tanár szempontjából ütközésmentes kell legyen
  • a heti óraszám korlátozása

Fontos megjegyzés:

Az azonosító felépítése szervezői feladat, de tudnunk kell, hogy egy olyan beszédes azonosító kiosztása, amely függ az osztálytól, nem jó (pl. osztály+sorszám). Ilyen esetben azoknak, akik nem bukotak meg, évente új azonosítót kellene osztani, ami rossz, mert kényelmetlen. Ilyen esetben lehet a beiratkozás éve+sorszám, vagy egy abszolut sorszám az azonosító.

 

A követelmények pontosítása után a következő szabályok beépítése kívánatos:

  1. létező tantárgyat csak létező tanár taníthat
  2. tanítani csak olyan osztálynak lehet, amelybe legalább 1 diák jár
  3. egy osztálynak egy tárgyat egy tanár tanítja az adott tanévben
  4. egy osztálynak adott nap adott órájában egy tárgyat taníthatnak
  5. az órarend a tanár szempontjából is ütközésmentes (azaz a tárgyat tanító tanár egyszerre nem taníthat több helyen)
  6. adott osztálynak adott tárgyat a tárgy heti óraszámában feltüntetett alkalommal kell szerepeltetni az órarendben
  7. a tárgy azonosítójának felépítése feleljen meg az előírásnak
  8. minden tantárgynak a heti óraszáma 1 és 10 közötti érték lehet
  9. minden osztálynak legyen egy osztályfőnöke, de minden tanár legfeljebb egy osztálynak lehessen a főnöke

Nem megoldott viszont:

  • a párhuzamos osztályok tanmenetének fixálása

Ezért itt két dolog nem lerendezett:

  • az osztály értékének szabályozása az adatbevitelnél.

Ez a diák esetében lehetséges (pl. csak számjegy és betűkarakter a megengedett, vagy felsorolt konkrét osztályok közül való választás), de a tanít-tábla esetében azt kell leszabályozni, hogy csak a DIÁKban előforduló osztályhoz lehessen sort felvinni. Semmi garancia nincs arra, hogy minden osztályhoz valóban felvittek legalább 1 diákot.

  • az évfolyam leválasztása az osztályból.

Az egyes évfolyamok egyforma tematikája nincs tárolva, tehát előfordulhat, hogy a TANÍT ellenőrzése után kimarad az egyik évfolyam minden párhuzamos osztályából valamelyik tárgy.

Tehát csak valóban fegyelmezett előmunkálatok után rögzített tanít-tábla esetén maradhat meg ez az adatbázis.

Mivel képzésünkben erőn felül (de megtérülően) foglalkozunk az adatbázistervezéssel, a 2. problémát (évfolyam-tematika) meg sem oldjuk. Az 1. probléma pedig nemcsak az osztálytörzs létrehozásával küszöbölhető ki, ha végiggondoljuk a rendszer ügyvitelét. Valószínűleg egy önálló funkcióként, nem pedig az órarendkészítési feladatok szintjén veszik fel az új diákokat (beiratkozás, új osztályok indítása). Bizonyára a tanévzárás is ilyen, hiszen akkor legalább a nem bukottakat tovább kell léptetni (osztályukban az évfolyam számát megnövelni). Tehát bízhatunk abban, hogy az összes diák az aktuális osztályával szerepel az adatbázisban ezen ügyviteli funkció idején. Az órarendkészítés tehát a tanévindítási funkció alatt elhelyezhető feladat, melynek ugyancsak van lezárása, ami után már nem módosítható.

 

Megszorítások

Jelen adatbázis-kezdemény kulcsainak és külső kulcsainak beépítése automatikus ellenőrzéseket állít be az adatbázisban, de bonyolult szabályok figyelését csak önálló megszorítások megadásával érünk el.

Nézzük, hogyan gondoskodhatunk a fenti 9 szabály betartásáról:

  1. a TANÍT külső kulcsa a tant és a kód
  2. a TANÍT osztály előfordul a DIÁK osztályai között
  3. a TANÍT kulcsa osztály+tant
  4. az ÓRAREND kulcsa osztály+nap+óra
  5. naponta, óránként és kódonként 0 vagy 1 sor van az ÓRARENDben
  6. osztályonként és tantárgyanként legfeljebb annyi sor van az ÓRARENDben, ahány a tárgy heti óraszáma
  7. a tantárgy azonosítójának formátuma 4 karakteren: betű, betű, betű, számjegy, és a számjegy korlátozható
  8. pl. 0< heti óraszám < 11
  9. osztályfőnöki óra bevezetésével oldjuk meg a problémát

 

 

A kulcsok és külső kulcsok megadását {1),3),4)} egy táblaszerkezetben már ismerjük, SQL-megvalósítását a következő részben tanuljuk, mint ahogy a többi egyszerű vagy összetett megszorítás SQL-megfogalmazását is.

 

 

A 8) egy egyszerű feltétel a TANTÁRGY heti óraszámára

A 7) egyszerű, mezőre vonatkozó feltétel, mely a TANTÁRGY-bővítésnél kell, hogy érvényesüljön. Az összes többi tábla tant-mezője külső kulcs, tehát csak olyan lehet, ami a törzsben létezik.

 

 

Ezzel szemben a 2) önálló szabály kell legyen, ui. a TANÍT osztálya nem külső kulcs. Ha csak a TANÍT bővítés esetén ellenőriznénk, hogy az osztály csak olyan lehet, ami a DIÁKban létezik, akkor a DIÁKból való törlésekkel előfordulhat, hogy a feltétel elromlik; szemben a külső kulcsos hivatkozások megőrzésének biztosításával.

 

 

Az 5) biztosítása jó helyen lesz az ÓRAREND táblában, ui. csak annak bővítése / módosítása esetén kell ellenőrizni. Törléskor nem romolhat el a feltétel. Figyelem: jelen esetben az, hogy az ÓRAREND külső kulcsa az osztály+tant, önmagában nem elég a megszorításhoz, viszont szükséges a feltétel megfogalmazásához. Megj. ha a TANÍTból törlünk, akkor az itteni külső kulcs miatt lesz annak feltétele, hogy az innen is törlődjön.

 

 

A 6) beállítása gondoskodik minden ÓRAREND-bővítés/módosítás esetén arról, hogy ne ütemezzenek le több alkalmat, mint az előírt heti óraszám. Az órarendkészítés hosszabb folyamat, az ilyen ügyviteli feladat ellátása nem a menüpontból való kilépéssel fejeződik be, tehát az órarendkészítés lezárásának (őnálló funkció) feltétele lehet csak, hogy minden osztály összes tantárgya pontosan annyi sorban forduljon elő, ahány a heti óraszáma.

 

 

Mivel általában heti egy, órarendben elhelyezett osztályfőnöki órára van igény, az osztályfőnök szerepe {9)} ebben az adatbázisban ún. osztályfőnöki óra tantárggyal megoldható. Nem a tanárban kell tárolni, hogy ő melyik osztálynak a főnöke (beleértve, hogy ez lehet nem kitöltött érték), mégcsak nem is egy lehetséges osztálytörzsben, hogy ki az osztály osztályfőnöke, hanem tantárgyként kell felfogni. Legyen az OFO rövidnév az osztályfőnöki óra azonosítója, melyet a TANÍTban tárolva az osztályfőnökség tényét rögzítjük. Külön kell az ÓRAREND-bővítéskor ellenőrizni, hogy az adott tanár csak egy osztálynak „taníthassa" ezt a „tárgyat". (Néhány szabály fennállása ellenőrizhető a lekérdezések futtatásával.)

Ezek után nem nehéz megválaszolni az olyan kérdéseket, hogy mi annak a feltétele, hogy valamely táblába felvegyünk / valamely táblában módosítsunk / valamely táblából töröljünk egy sort. (A hivatkozási épség ellenőrzésére mód van a csatolt adatbázisban.)

 

Rejtett kapcsolatok tárgyalása

A diák nem kapcsolódik tisztán másik táblához.

Az osztály csak egy metszet-tulajdonság, de jelen esetben egy lekérdezés alkalmával a DIÁK és a TANÍT osztályon keresztül való összekapcsolása jelentéssel bír: minden diák minden tárgya szerepel majd benne azzal a tanárral, aki neki azt tanítja. (ld. SQL-lekérdezés)

Ha az évvégi osztályzatokat tárolnánk, akkor az egyes diákok tárgyankénti osztályzatát kellene „lerakni" pl. egy bizonyítvány-táblában. Ennek kulcsa csak akkor lehet az azonosító és tant, ha az előző évfolyamokat nem kell látni, vagyis a bukottak jegyei nem mondanak ellent a kulcsnak.

 

Ilyen bizonyítvány-tábla érdekes viszonyban áll a tanít-táblával:

BIZONYÍTVÁNY {azonosító, tant, jegy}
TANÍT {osztály, tant, kód}

 

 

Itt a tant metszet-tulajdonságra alapozott összekapcsolás nem hordozna jelentést, hiszen a tárgyat tanuló összes diák „összeállna" a tárgyat tanuló összes osztállyal, akkor is, ha ő nem oda jár. Ekkor azt kell észrevenni, hogy a DIÁK-BIZONYÍTVÁNY helyes összekapcsolása áll kapcsolatban a TANÍT táblával (ez viszont nem jelölhető semmilyen eszközben). Lekérdezésnél kell észnél lenni, hogy a 3 tábla csak együtt alkalmas az összekapcsolásra (ld. SQL-lekérdezés).

Tehát a Bizonyítvány sorainak felvitele alkalmával nem elegendő ellenőrizni, hogy létező diák és létező tantárgy mellé egy 1-5 közötti jegyet rögzítsünk, hanem azt is, hogy a diák azt a tárgyat tanulta-e (tanították-e neki az osztályában).