Középiskolai Matematikai és Fizikai Lapok
Informatika rovattal
Kiadja a MATFUND Alapítvány
Már regisztráltál?
Új vendég vagy?

Az I. 129. feladat (2006. március)

I. 129. Egy iskolában adatbázisban rögzítik a rendszergazdák teendőit. A iskola dolgozói és tanulói egy internetes űrlapon jelenthetik be a hibákat. A hibák az adatbázisba kerülnek, a feladatokat az informatikai munkaközösség egyik tagja rendeli a rendszergazdákhoz. A hibabejelentés egy kódot, a bejelentés dátumát, a hibás eszköz azonosítóját és a hiba rövid leírását tartalmazza. A bejelentés után dől el, melyik rendszergazda felelős a hiba elhárításáért. Ekkor állapítják meg a probléma megoldásának fontosságát is. Bejelentéskor a hiba státusza ,,bejelentve'', a hozzárendelés után ,,folyamatban'' és a probléma megoldásakor ,,megoldva''.

Az adatbázis a következő táblákat tartalmazza:

hiba a bejelentett hibák listája
szg az iskolában használt informatikai eszközök listája
rg a rendszergazdák

A táblák szerkezete:


hiba(
hibaaz : egész; a hibák azonosítója, elsődleges kulcs
bdat : dátum; a hibabejelentés dátuma (év-hónap-nap)
hdat : dátum; a hibát ekkor rendelték valamelyik rendszergazdához
(év-hónap-nap)
rgaz : egész; a felelős rendszergazda azonosítója
mdat : dátum; a probléma megoldásának dátuma (év-hónap-nap)
stat : felsorolás; értéke 'bejelentve', 'folyamatban' és 'megoldva' lehet,
a hiba státusza
szgaz : egész; a hibás eszköz kódja
hibadef: szöveg; a hiba leírása
prior : felsorolás; értéke 'A','K' és 'M' lehet (alacsony, közepes, magas),
a probléma fontosságát jelzi
)
rg(
rgaz : egész; a rendszergazda azonosítója, elsődleges kulcs
neve : szöveg; a rendszergazda neve
tel : szöveg; a rendszergazda telefonszáma
)
szg(
szgaz : egész; a gép azonosítója, elsődleges kulcs
hely : egész; a gép szobaszáma
tip : felsorolás; értéke 'pc', 'szerver' és 'printer' lehet,
az eszköz típusa
)

A következő feladatokat SQL parancsok segítségével kell megoldani. Az első nyolc kérdéshez SQL lekérdezéseket kell írni (,,SELECT''), az utolsó kettőhöz pedig módosító (,,UPDATE'') és törlő (,,DELETE'') parancsot.

  • Soroljuk fel ,,Kiss Béla'' megoldatlan feladatait!

  • Hány olyan probléma van, amely több mint 30 napja nincs megoldva?

  • Melyik szobákban vannak megoldandó feladatok?

  • Melyik probléma megoldása tartott legtovább? (A bejelentéstől számolva.)

  • Hány hibabejelentés vonatkozik nyomtatóra?

  • Listázzuk rendszergazdánként a megoldatlan feladatok számát!

  • Írjuk ki azon rendszergazdák nevét, akiknek van megoldatlan magas prioritású feladata!

  • Melyik a legrégebben bejelentett megoldatlan probléma?

  • Módosítsuk a megoldatlan problémák fontosságát magasra!

  • Töröljük az adatbázisból a 2005-ben megoldott hibákat!
  • Segítségül, a KöMaL szerverén létrehoztunk egy példa adatbázist, amely a http://www.komal.hu/i129/ címen elérhető. Lehetőség van SQL lekérdezések futtatására, így az első 8 kérdés tesztelésére is.

    Beküldendő a 10 SQL parancs egy egyszerű szöveg fájlban (i129.txt).

    (10 pont)

    A beküldési határidő 2006. április 18-án LEJÁRT.


    Megoldás. A MYSQL 3.23 címkéjű parancsok a Kömal honlapján található teszt adatbázison is lefutnak. A 4.01-es változatban már lehetőség van allekérdezések (subquery) és újabb dátumkezelő függvények használatára, illetve a táblák belső összekapcsolása a FROM záradékban is definiálható.

    1. Soroljuk fel 'Kiss Béla' megoldatlan feladatait!

    SELECT szg.szgaz, hely, hibadef
    FROM hiba,rg,szg
    WHERE rg.rgaz = hiba.rgaz
    AND szg.szgaz = hiba.szgaz
    AND stat = 'folyamatban'
    AND neve = 'Kiss Béla'

    == MYSQL 4.01 ==

    SELECT hiba.*
    FROM hiba INNER JOIN rg ON hiba.rgaz = rg.rgaz
    WHERE rg.neve='Kiss Béla'
    AND stat<>'megoldva'

    2. Hány olyan probléma van, amely több mint 30 napja nincs megoldva?

    == MYSQL 3.23 ==

    SELECT COUNT(*)
    FROM hiba
    WHERE bdat'megoldva'

    vagy:

    SELECT COUNT(h.hibaaz)
    FROM hiba h
    WHERE h.stat!='megoldva ' AND CURDATE()-h.bdat>30

    vagy:

    SELECT COUNT(*) Regiek
    FROM hiba
    WHERE CURRENT_DATE - bdat > 30
    AND stat <> 'megoldva'

    == MYSQL 4.01 ==

    SELECT COUNT(*)
    FROM hiba
    WHERE stat <> 'megoldva'
    AND DATEDIFF(NOW(),bdat)>30

    3. Melyik szobákban vannak megoldandó feladatok?

    == MYSQL 3.23 ==

    SELECT DISTINCT hely
    FROM hiba, szg
    WHERE hiba.szgaz = szg.szgaz
    AND (stat = 'bejelentve' OR stat = 'folyamatban')

    == MYSQL 4.01 ==

    SELECT szg.hely
    FROM szg INNER JOIN hiba ON szg.szgaz = hiba.szgaz
    WHERE hiba.stat <>'megoldva'
    GROUP BY szg.hely

    4. Melyik probléma megoldása tartott legtovább? (A bejelentéstől számolva.)

    == MYSQL 3.23 ==

    SELECT *, TO_DAYS(mdat)-TO_DAYS(bdat)
    FROM hiba
    WHERE stat='megoldva'
    ORDER BY TO_DAYS(mdat)-TO_DAYS(bdat) DESC
    LIMIT 1

    == MYSQL 4.01 ==

    SELECT *
    FROM hiba
    WHERE DATEDIFF(mdat,bdat) =
    ( SELECT MAX(DATEDIFF(mdat,bdat))
    FROM hiba
    WHERE stat = 'megoldva' )

    5. Hány hibabejelentés vonatkozik nyomtatóra?

    == MYSQL 3.23 ==

    SELECT COUNT(*)
    FROM hiba,szg
    WHERE hiba.szgaz = szg.szgaz
    AND szg.tip='printer'

    == MYSQL 4.01 ==

    SELECT Count(*)
    FROM hiba INNER JOIN szg ON hiba.szgaz = szg.szgaz
    WHERE szg.tip='printer '

    6. Listázzuk rendszergazdánként a megoldatlan feladatok számát!

    == MYSQL 3.23 ==

    SELECT neve, COUNT( * )
    FROM hiba, rg
    WHERE hiba.rgaz = rg.rgaz
    AND stat <> 'megoldva'
    GROUP BY rg.rgaz

    == MYSQL 4.01 ==

    SELECT neve, (
    SELECT COUNT(*)
    FROM hiba
    WHERE hiba.rgaz=rg.rgaz
    AND stat<>'megoldva')
    FROM rg

    7. Írjuk ki azon rendszergazdák nevét, akiknek van megoldatlan magas prioritású feladata!

    == MYSQL 3.23 ==

    SELECT DISTINCT rg.neve
    FROM rg, hiba
    WHERE rg.rgaz = hiba.rgaz
    AND prior='M'
    AND stat <> 'megoldva'

    == MYSQL 4.01 ==

    SELECT neve
    FROM rg
    WHERE rg.rgaz
    IN
    (
    SELECT rgaz
    FROM hiba
    WHERE prior = 'M'
    AND stat <> 'megoldva')

    8. Melyik a legrégebben bejelentett megoldatlan probléma?

    == MYSQL 3.23 ==

    SELECT *
    FROM hiba
    WHERE stat!='megoldva'
    ORDER BY bdat
    LIMIT 1

    == MYSQL 4.01 ==

    SELECT *
    FROM hiba
    WHERE stat <> 'megoldva'
    AND bdat =
    (
    SELECT MIN( bdat )
    FROM hiba
    WHERE stat <> 'megoldva')

    9. Módosítsuk a megoldatlan problémák fontosságát magasra!

    == MYSQL 3.23 és 4.01 ==

    UPDATE hiba
    SET prior = 'M'
    WHERE stat <> 'megoldva'

    10. Töröljük az adatbázisból a 2005-ben megoldott hibákat!

    == MYSQL 3.23 és 4.01 ==

    DELETE FROM hiba
    WHERE YEAR(mdat) = 2005 AND stat = 'megoldva'

    vagy:

    DELETE FROM hiba
    WHERE (mdat BETWEEN '2005-01-01' AND '2005-12-31') AND stat='megoldva'

    (Gombos Gergely, Kiss Dániel Miklós, Ozsvárt László, Véges Márton és Vincze János dolgozata alapján)


    Statisztika:

    16 dolgozat érkezett.
    10 pontot kapott:Balambér Dávid, Czigler András, Gilián Zoltán, Gombos Gergely, Kiss Dániel Miklós, Véges Márton, Vincze János.
    8 pontot kapott:5 versenyző.
    7 pontot kapott:1 versenyző.
    5 pontot kapott:1 versenyző.
    3 pontot kapott:1 versenyző.
    1 pontot kapott:1 versenyző.

    A KöMaL 2006. márciusi informatika feladatai