ADATBÁZISOK HASZNÁLATA GYAK. [MAT: im1c2ah5e]  
  ELTE, 2016/2017-os tanév I. félévében  [2016.szept.]
 
 
   
   A gyakorlat időpontja:
Kedd 12:15-13:45-ig (2x45perc, nincs szünet)
   A gyakorlat helye: Tanrendben: D.ép. 2-709 PC9-labor viszont általában
   amikor nincsenek a levelezősök a D.ép. 2-202  PC3-laborban van az óra.
   A gyakorlat kötelező, katalógus van, legfeljebb 4 hiányzás lehetséges!
   A gyakorlat célja: az előadáson szereplő alapfogalmak, algoritmusok, és
   az adatbázis-szemlélet gyakorlatban való elsajátítása, SQL megismerése.
 
   Követelmények: Három dolgozatot írunk. A gyakorlatok anyaga:
   > SQL SELECT >> 1.GY >> 2.GY >> 3.GY >>  4.GY: zh1 (okt.11.) 
   > SQL DML,DDL >> 5.GY >> 6.GY >> 7.GY >>  8.GY: zh2 (nov.15)  
   > Tervezés >> 9.GY >> 10.GY >> 11.GY >> 12.GY: zh3 (dec.13.)
   > Gyak.jegy zárása >> Jav/pótZH (dec.21.) >> GyakUV (jan.04.)    
   > Fogadóórák a szorgalmi és a vizsgaidőszakban: Hétfő 10:00-12:00 2.507
   
   A gyakorlati jegy alapja: Összpont = MAX(zh1+zh2; 2*zh2) + zh3,
   vagyis akinek nem sikerül a zh1, azoknál helyette a zh2-vel számolunk,
   ugyanis a lekérdezések témakörben a zh2 bővebb volt, mint az első zh1 
   A zh2 vagy zh3 közül az egyiket és csak az egyiket lehet pótolni/javítani:
   JavZH időpontja: 2016.12.21. szerda 12:15-13:45-ig 2.520 Mest.Int.labor
   Eredmények: (név-nélkül 4kar-kóddal) elérése hallgato/[jelszóval] .pdf
      
   Előadás: [az előadó Molnár Bálint weblapján ebből a mappából: .ppt
   Tankönyv: Jeffrey D. Ullman, Jennifer Widom: Adatbázisrendszerek Alapvetés 
                                     Második átdolgozott kiadás, Panem, 2009. (a kék könyv)
   
   
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   1.GY: 2016.09.13.  --- Táblák lekérdezése relációs algebra segítségével 
   > Déli ép. 2-709  PC9-labor
   > Ismerkedés, gyakorlat célja, menete és a követelmények
   > Relációk adatainak lekérdezése relációs algebra segítségével
      Lekérdezések kifejezése természetes módon táblákkal, a táblákon
      értelmezett műveletekkel gondolkodva, majd relációs algebrában:
      Relációs algebrai feladatok: 1.EA -> Relaciok.ppt feladatai
   
   Info: 2016.09.20-án kedden UNESCO Egyetemi Sport Nemzetközi Napja,
   2016/2017-es tanév rendje: https://www.elte.hu/kozerdeku/tanev1617
   
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | #  
   2.GY: 2016.09.27.  --- Egy táblára vonatkozó lekérdezések SQL-ben  
   > Déli ép. 2-709  PC9-labor
   > Gépes gyak: Oracle gyakorlatban 
   > Ismerkedés, Oracle adatbázisok elérése, SQL Developer használata
   > SQL DDL: relációséma, adattípusok, megszorítások: create table
   > SQL DML: relációelőfordulás, táblák feltöltése adatsorokkal: insert 
   > Egy táblára vonatkozó lekérdezések az SQL-ben: SELECT utasítás
      SELECT, FROM, WHERE és ORDER BY záradékai
   
   -- TÁBLÁK LÉTREHOZÁSÁRA scriptek:
        >> szeret
        >> createDolg(hu) vagy createEmpDept(en)
   
   -- FELADATSOR-1:  
   - Milyen azonosítójú osztályon dolgoznak a dolgozók? (kiterjesztett vetítés)
   - Adjuk meg a dolgozók között előforduló foglalkozások neveit (vetítés,
     az eredmény halmaz legyen, vagyis minden foglalkozást csak egyszer írjuk ki!)
   - Kik azok a dolgozók, akiknek a fizetése > 2800? (kiválasztás, elemi feltétel)
   - Kik azok a dolgozók, akiknek a fizetése 2000 és 4500 között van?
     (1.mo: kiválasztás, összetett feltétel; 2.mo: where-ben: intervallum)
   - Kik azok a dolgozók, akik a 10-es vagy a 20-as osztályon dolgoznak?
     (1.mo: kiválasztás, összetett feltétel; 2.mo: where-ben: in értékek)
   - Adjuk meg azon dolgozókat, akik nevének második betűje 'A' (where: like)
   - Kik azok a dolgozók, akiknek a jutaléka ismert? (vagyis nem NULL)
    
   -- Oracle Leckék a fenti feladatokhoz (ehhez: createHRsyn)
   > SELECT utasítás SELECT, FROM, WHERE és ORDER BY záradékai
      >> 1/1.lecke (vetítés kiterjesztése, kifejezések)
      >> 1/2.lecke (kiválasztás, kiválasztott sorok rendezése)
     
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   3.GY: 2016.10.04.  --- Lekérdezések relációs algebrában és az SQL-ben     
   > Figyelem! Amikor nincsenek a levelezősök új helyszín: 2-202  PC3-labor!     
   > Több táblára vonatkozó lekérdezések, összekapcsolások, alkérdések
   > Tankönyv feladatai: Termékek-feladatok.pdfCsatahajók-feladatok.pdf  
   > Tankönyv feladataihoz a scriptek: create Termékekcreate Csatahajók
   > Tk.2.4.14.Feladatok (Tk.54-57.o. 2.4.1.feladat) Termékek feladatai
      Lekérdezések kifejezése először (papíron) természetes módon táblákkal,
      a táblákon értelmezett műveletekkel gondolkodva, és relációs algebrában  
      kifejezőfákkal is felrajzolva, majd átírva SQL SELECT utasítással (gépnél)
      többféle átírást, megoldási lehetőséget vizsgáljunk meg, vessünk össze!
             >>>  Megoldás (ellenőrzésre) Termékek-feladatok-megoldása.pdf
                  
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   4.GY: 2016.10.11.  --- I.ZH: Lekérdezések relációs algebrában és SQL-ben 
   > Déli ép. 2-202  PC3-labor
   > I.ZH  két részből áll:
     - gépes feladatok: Lekérdezési feladatok megoldása az SQL SELECT-tel
     - papíros feladatok: Lekérdezések relációs algebrában és SQL SELECT-tel
   > Tankönyv feladatai: Termékek-feladatok.pdfCsatahajók-feladatok.pdf
   > Tankönyv feladataihoz a scriptek: create Termékekcreate Csatahajók
    
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   5.GY: 2016.10.18.  --- Lekérdezések kiterjesztett rel.algebrában, SQL-ben  
   > Déli ép. 2-202  PC3-labor
   Gépes gyak: folyt. Oracle gyakorlatban (2.GY folytatása) 
    I.rész: Egy táblás SQL SELECT utasítás SELECT és WHERE záradékaiban a
    kifejezések és a különböző típusokra vonatkozó sorfüggvények használata.
   > Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn 
   >> 3.lecke - sorfüggvények használata a SELECT és WHERE záradékban
  
   -- FELADATSOR-2:  
   - Adjuk meg azon dolgozókat, akik nevében van legalább két 'L' betű.
    (Többféle megoldást is keressünk a lekérdezésre, LIKE, INSTR függvény)
   - Adjuk meg a dolgozók fizetéseinek négyzetgyökét és 3-mal vett maradékát.
   - Adjuk meg, hogy hány hete dolgozik a cégnél ADAMS és milyen hónapban
     és milyen nap (hétfő, kedd, stb) lépett be.
   - Számoljuk ki, hogy a mai nap hány naposak vagyunk, illetve azt is
     hány hónaposak vagyunk (DUAL tábla)
   - Adjuk meg a dolgozók nevét, az éves fizetését és hány hete állt munkába!
   - Adjuk meg a dolgozók éves jövedelmét, ahol a havi jövedelem a fizetés
     és jutalék összege, ahol nincs jutalék megadva,ott a 0 helyettesítő
     értékkel számoljunk (NVL függvény alkalmazása).
   - Írassa ki azon dolgozók nevét, foglalkozását, fizetését, jutalékát és
     az osztály azonosítóját, akik 1000 USD-nál többet keresnek, és
     1981. március 1. és szeptember 30. között léptek be a vállalathoz és
     a foglalkozásban szerepel a ’MAN’ rész sztring kis- vagy nagybetűvel
     (pl. manager, salesman).
   
   > Segédlet: Examples/Példák:  SQL Language Reference >> 5 Functions:
      Sorfüggvények: pl. Karakteres függvények: SUBSTRRPAD, ...,  INSTR, ...
      pl. Dátum függvények: MONTHS_BETWEEN, ..., pl. Konverziós: TO_DATE, ...
      pl. Null érték kezelése, helyettesítő érték megadása: NVL, COALESCE, ...
             Figyelem! COALESCE példában: FROM product_information
             mivel ez a tábla nem az HR, hanem OE sémában szerepel, ezért
             itt ki kell írni a táblatulajdonost: FROM OE.product_information
             (ugyanis csak a HR owner tábláihoz hoztuk létre a szinonimákat).
   
   Gépes gyak: II.rész: Egy táblás SQL SELECT utasítás GROUP BY, HAVING
    és ORDER BY záradékai, csoportosítás és összesítő függvények használata
   > Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn 
   >> 1/4.lecke - csoportosítás, group by és having záradékok
   
   -- FELADATSOR-3:
   - Mennyi a minimális, illetve a maximális fizetés a dolgozók között?
   - Mennyi a dolgozók összfizetése?
   - Adjuk meg, hogy hány különböző foglalkozás fordul elo a dolgozók között!
   - Mennyi a 20-as osztályon az átlagfizetés?
   - Adjuk meg osztályonként az átlagfizetést! (OAZON, ATL_FIZ)
   - Adjuk meg azokra az osztályokra az átlagfizetést, ahol ez nagyobb mint 2000.
   - Adjuk meg azokra az osztályokra az átlagfizetést, ahol legalább hárman dolgoznak!
   - Melyek azok az osztályok, ahol legalább hárman dolgoznak? (OAZON,LÉTSZÁM)
   - Adjuk meg osztályonként a minimális fizetést, de csak azokat az osztályokét, ahol
     a minimális fizetés nagyobb, mint a 30-as osztályon dolgozók minimális fizetése.
   - Adjuk meg osztályonként az ott dolgozó hivatalnokok (FOGLALKOZAS='CLERK')
     átlagfizetését, de csak azokon az osztályokon, ahol legalább két hivatalnok dolgozik!
   - Adjuk meg a legmagasabb osztályonkénti átlagfizetést!
     
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   6.GY: 2016.10.25. --- Lekérdezések kiterjesztett rel.algebrában és SQL-ben  
   > Figyelem! Ez levelezős hét, ezért másik laborban Déli ép. 2-709  PC9-labor !!!
  Gépes gyak: Az 5GY feladatok megoldásait ellenőrizzük és 5.GY folytatása:
      Több táblára vonatkozó lekérdések, többféle megoldás joinnal, alkérdéssel
      Összekapcsolások és alkérdések használatával többféle módon oldjuk meg,
      de az alkérdéseket most még csak a WHERE és HAVING záradékokban
      használjunk és kerüljük a FROM utáni alkérdéseket (ún. inline nézeteket),
      a köv.héten nézzük meg a nézettáblák és az inline nézetek használatát!  
   > Oracle Példák: -- lekérdezésekhez elég szinonimákat venni: createHRsyn 
      >> 1/5.lecke (összekapcsolások, a külső join is)  
      >> 1/6.lecke és  2/6.lecke (alkérdések)
   
   -- FELADATSOR-4: --- a lekérdezéseket relációs algebrai kifejezésként is írjuk fel!
   - Kik azok a dolgozók, akik a 10-es vagy a 20-as osztályon dolgoznak?
   - Kik azok a dolgozók, akiknek a főnöke KING?
   - Kik azok a dolgozók, akik főnökének a főnöke KING?
   - Adjuk meg azoknak a főnököknek a nevét, akiknek a foglalkozása nem 'MANAGER'.
   - Adjuk meg azokat a dolgozókat, akik többet keresnek a főnöküknél.
   - Kik azok a dolgozók, akik osztályának telephelye DALLAS vagy CHICAGO?
   - Kik azok a dolgozók, akik osztályának telephelye nem DALLAS és nem CHICAGO?
   - Listázza ki a Dallasi telephelyen dolgozók nevét és éves jövedelmét, ahol
     a havi jövedelem a fizetés és jutalék összege, ha a jutalék ismeretlen, akkor
     azt 0 helyettesítő értékkel vegyük figyelembe.
   - Adjuk meg azokat a dolgozókat, akiknek nincs 2000-nél nagyobb fizetésű beosztottja.
   
   -- FELADATSOR-5: --- ezeket a kiterjesztett relációs algebrába tudjuk csak átírni
   - Adjuk meg osztályonként a telephelyet és az átlagfizetést (OAZON, TELEPHELY, ATL_FIZ).
   - Kik azok a dolgozók, és milyen munkakörben dolgoznak, akiknek a legnagyobb
     a fizetésük? 
   - Adjuk meg, hogy mely dolgozók fizetése jobb, mint a saját osztályán (azon
     az osztályon, ahol dolgozik) dolgozók átlagfizetése!
   - Adjuk meg, hogy mely dolgozók átlagjövedelme jobb, mint a saját osztályán
    dolgozók átlagjövedelme, ahol a jövedelem a fizetés és jutalék összege, ahol
    nincs jutalék megadva, ott a 0 helyettesítő értékkel számoljunk (NVL függvény).
  - Adjuk meg, hogy az egyes osztályokon hány ember dolgozik (azt is, ahol 0=senki).
  - Adjuk meg osztályonként a dolgozók összfizetését az osztály nevét megjelenítve
    ONEV, SUM(FIZETES) formában, és azok az osztályok is jelenjenek meg ahol
    nem dolgozik senki, ott az összfizetés 0 legyen. Valamint ha van olyan dolgozó,
    akinek nincs megadva, hogy mely osztályon dolgozik, azokat a dolgozókat
    egy 'FIKTIV' nevű osztályon gyűjtsük össze. Minden osztályt a nevével plusz
    ezt a 'FIKTIV' osztályt is jelenítsük meg az itt dolgozók összfizetésével együtt. 
   
   Info: folyt.2hét múlva, köv.hét őszi szünet, lásd 2016/2017-es tanév rendje: link
     
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   7.GY: 2016.11.08. --- SQL SELECT kérdés/válasz, SQL DML, SQL DDL
   > Déli ép. 2-202  PC3-labor
  Gépes gyak: A 6GY feladatok megoldásait ellenőrizzük és 6.GY folytatása:
   > SQL DML (adatok karbantartása: insert, delete, update)
   > SQL DDL (create table, create view) 
      Táblák és megszorítások (constraints) létrehozása.
      Egyszerű és összetett nézettáblák létrehozása.
   
  -- FELADATSOR-6:
     Előkészítés: Ezekhez a DML feladatokhoz ámenetileg most megszorítások,
                           hivatkozási épség megadása nélkül hozzuk létre a táblákat:
   >> Módosított Dolgozo és Osztaly táblák létrehozása (no constraints)
   >> Órai gyakorló feladatok .txt-ben is itt: DML_feladatok.txt
 
DELETE
  1. Töröljük azokat a dolgozókat, akiknek jutaléka NULL.
  2. Töröljük azokat a dolgozókat, akiknek a belépési dátuma 1982 előtti.
  3. Töröljük azokat a dolgozókat, akik osztályának telephelye DALLAS.
  4. Töröljük azokat a dolgozókat, akiknek a fizetése kisebb, mint az átlagfizetés.
  5. Töröljük ki azokat az osztályokat, akiknek van olyan dolgozója,  aki a 2-es
      fizetési kategóriába esik (lásd FizFokozat táblát, adjuk meg azon osztályok
      nevét, amelyeknek van olyan dolgozója,  aki a 2-es fizetési kategóriába esik)
  6. Töröljük ki azon osztályokat, amelyeknek 2 olyan dolgozója van, aki a 2-es
      fizetési kategóriába esik.

INSERT
  7. Vigyünk fel egy 'Kovacs' nevű új dolgozót a 10-es osztályra a következő
      értékekkel: dkod=1, dnev='Kovacs', oazon=10, belépés=aktuális dátum,
      fizetés=a 10-es osztály átlagfizetése. A többi oszop legyen NULL.
  8. Több sor felvitele: Hozzunk létre egy UjOsztaly nevű táblát, amelynek
      attribútumai megegyeznek az Osztály tábla oszlopaival, plusz van még egy
      numerikus típusú Letszam nevű attribútuma. Ebbe az UjOsztaly táblába az
      insert utasítás 2. alakjával (alkérdéssel ) vigyünk fel új sorokat az osztály és
      dolgozó táblák aktuális tartalmának felhasználásával minden osztály adatát
      kiegészítve az adott osztályon dolgozók létszámával. Azok az osztályok is
      jelenjenek meg ahol nem dolgozik senki, ott a létszám 0 legyen. Továbbá
      ha vannak olyan dolgozók, akiknek nincs (nem ismert) az osztályuk, azok
      létszámát egy oazon=0, onev= 'FIKTIV' és telephely='ISMERETLEN'
      adatokkal rendelkező sorba írjuk be.
   
UPDATE
  9. Növeljük meg a 20-as osztályon a dolgozók fizetését 20%-kal.
10. Növeljük meg azok fizetését 500-zal, akik jutaléka NULL vagy
      a fizetésük kisebb az átlagnál.
11. Növeljük meg mindenkinek a jutalékát a jelenlegi maximális jutalékkal. 
12. Módosítsuk 'Loser'-re a legrosszabbul kereső dolgozó nevét.
13. Növeljük meg azoknak a dolgozóknak a jutalékát 3000-rel, akiknek
      legalább 2 közvetlen beosztottjuk van.
      Az ismeretlen (NULL) jutalékot vegyük úgy, mintha 0 lenne.
14. Növeljük meg azoknak a dolgozóknak a fizetését, akiknek van olyan
      beosztottja, aki minimális fizetéssel rendelkezik.
15. Növeljük meg a nem főnökök fizetését a saját osztályuk átlagfizetésével.

   DDL DDL (create table, create view) 
   -- Táblák és megszorítások (constraints) létrehozása.
   -- Egyszerű és összetett nézettáblák létrehozása.
   > További segédletek: create table, típusok, megszorítások (.txt)
 
   Egy példa nézettáblák használatára:
   -- Képezzük osztályonként az összfizetést, vegyük ezen számok átlagát, és
   -- adjuk meg, hogy mely osztályokon nagyobb ennél az átlagnál az összfizetés.

   CREATE OR REPLACE VIEW osztaly_osszfiz
   AS
   SELECT onev, SUM(fizetes) ossz_fiz
   FROM sila.dolgozo d, sila.osztaly o
   WHERE d.oazon = o.oazon
   GROUP BY onev;
 
   CREATE OR REPLACE VIEW atlag_koltseg
   AS
   SELECT SUM(ossz_fiz)/COUNT(*) atlag
   FROM osztaly_osszfiz;
   
   SELECT * FROM osztaly_osszfiz
   WHERE ossz_fiz  >  (SELECT atlag FROM atlag_koltseg)
   
-- Ugyanez WITH-záradékkal
       >> 2/6.lecke (WITH záradék -- alkérdések után 16-18.o.)

   WITH
   osztaly_osszfiz AS (
       SELECT onev, SUM(fizetes) ossz_fiz
       FROM sila.dolgozo d, sila.osztaly o
       WHERE d.oazon = o.oazon
       GROUP BY onev),
   atlag_koltseg AS (
       SELECT SUM(ossz_fiz)/COUNT(*) atlag
       FROM osztaly_osszfiz)
  SELECT * FROM osztaly_osszfiz
  WHERE ossz_fiz  >  (SELECT atlag FROM atlag_koltseg)
   
   -- -- --  --
   KÖV.HÉTEN ZH  két részből áll:
    - gépes feladatok:
Lekérdezési feladatok megoldása az SQL SELECT-tel
    - papíros feladatok: Lekérdezések relációs algebrában és SQL SELECT-tel
   > Tankönyv feladatai: Termékek-feladatok.pdfCsatahajók-feladatok.pdf
   > Tankönyv feladataihoz a scriptek: create Termékekcreate Csatahajók
   > További gyakorló feladatok: Oracle Példatár Feladatok.pdf
   > További segédletek: hallgato/[jelszóval] [ebben a mappában]
    
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   8.GY: 2016.11.15. --- II.ZH: Rel.algebra és SQL SELECT, DML és DDL  
   > Déli ép. 2-202  PC3-labor
   > II.ZH témaköre:  
  -- -- --
   > Előadások anyagából:
      Tankönyv 1.fej. Alapok, 2.4. Rel.algebra, 
5.1-5.2. Kiterj.rel.algebra,
      6.1-6.4. SQL SELECT, 6.5. SQL DML, 7.1-7.5. és 8.1-8.2. SQL DDL
  -- -- --
   > 1-7.gyakorlatok anyaga:
       Több táblára vonatkozó lekérdezések

       SQL DML és DDL utasításai
 
   
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   9.GY: 2016.11.22.  --- Rekurzió az SQL-ben. Tervezés: E/K diagram lekép.
   > Déli ép. 2-202  PC3-labor   
   
[1] Rekurzió az SQL-ben. Az Eljut feladat --- Ehhez: create_jaratok_tabla.txt
   > Ullman/Tk. 10.2. Az Eljut-feladat. Rekurzió. prog.inf.ea: 07.előadás.pdf
     -- További példák az Oracle SQL Language Reference 11.2.pdf doku-ban:
         >> Rekurzió with-utasítással: Recursive Subquery Factoring: Examples
         >> ill. egy korábbi Oracle megoldás 2/7.lecke hierarchikus lekérdezések
              >> SQL Lang.Ref: Hierarchical QueriesHierarchical Query Examples
   
[2] Tervezés/1: E/K diagram felrajzolása, majd átalakítása relációkká   
   > Ullman/Tk. 4.fejezete E/K modell prog.inf.ea: 08.előadás.pdf
      -- Tk.4.1.-4.4. Az egyed-kapcsolat (E/K) modell elemei
          E/K diagramok felrajzolása: Modellezési feladatok - E/K diagram
      -- Tk.4.5.-4.6. E/K diagram átírása relációs modellé  
          E/K diagramok átírása relációkká: E/K_pl1.pdf és E/K_pl2.pdf    
          További feladatok, lásd EKpelda.pdf (ábra: EKpelda.png)
   > További irodalom (elektronikusan is elérhető magyar nyelvű könyvek)
      --- MEK könyvtár: Halassy Béla: Adatmodellezés, elmélet és gyakorlat
      --- MEK könyvtár: Halassy Béla: Az adatbázistervezés alapjai és titkai
     
   > Házi feladat dec.6-ig Mikulásra - Papíron beadandó tervezési feladat
      Saját tervezési feladat kiválasztása és leírása, az adatbázis sématervezés
      (papíron, kézzel felrajzolt) E/K diagrammal, majd az átalakítása relációkká.
   
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   10.GY: 2016.11.29.  --- Félig-strukturált adatok, XML, Xpath, XQuery    
   > TEREMVÁLTOZÁS !!! Déli ép. 00-807 Adatbázis labor (ahol az EA van) !!!
   
    A félig-strukturált adatmodell, XML, Xpath, XQuery, Tankönyv 11-12.fej.
     Xpath-XQuery.pdf (Forrás: részlet Kiss Attila habilitációs előadásából)  
[1] XPath_feladatok.txt >> Ehhez: kolcsonzesek.xml és Xpath-Tester
[2] XQuery_feladatok.txt  >> Ehhez: kolcsonzesek.xml és XQuery-Demo
   
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   11.GY: 2016.12.06.  --- Tervezés: Funk.függőségek, normalizálás, indexek  
   > Déli ép. 2-202  PC3-labor
 
  Tervezés/2: Függőségek elmélete és normalizálás, VM BCNF, VM FŐ 3NF
   > Ullman/Tk. 3.fejezete: Relációs sématerv. prog.inf.ea: 09.előadás.pdf
   > Áttekintés az előadásanyagról, és példák: fuggoseg_feladat.pdf
-- -- -- -- --
   A tervezéssel kapcsolatos alapfogalmak és algoritmusok megértését segítő
   Gyakorló feladatok
-- -- --
1.) Adott R relációs séma és F funkcionális függőségek halmaza.
     Attribútum halmaz lezártjának kiszámolására tanult algoritmus
     felhasználásával határozza meg az adott séma kulcsait, és azt,
     hogy BCNF-ben vagy 3NF-ben van-e?

a.) Cím(Város, Utcahsz, Irányítószám) röviden R(V, U, I), és
     a séma feletti funkcionális függőségek F = {I → V, VU → I}.

b.) Tankönyv 3.5.2. feladata: Órarend adatbázis
  Jelölje röviden:
      K - Kurzus
      O - Oktató
      I - Időpont
      T - Terem
      D - Diák (hallgató)
      J - Jegy
 Feltételek (funkcionális függőséggel megadva)
     K → O vagyis egy kurzust csak egy oktató tarthat
     IT  → K nincs óraütközés, egy helyen egy időben egy kurzus lehet
     IO  → T az oktatónak nincs óraütközése
     ID  → T a diákoknak sincs óraütközése
     KD  → J egy diák egy kurzust egy végső jeggyel zár
 R=KOITDJ és F= {K → O, IT → K, IO → T, ID → T, KD → J}

c.) Adott SzallításiInformáció(SzallAzon, SzallNev, SzallCim,
               AruKod, TermekNev, MeEgys, Ar) reláció séma,
     amit így is rövidithetünk R(S, N, C, K, T, M, A), és
     a séma feletti funkcionális függőségek:
     SzallAzon→{SzallNev, SzallCim},
     AruKod→{TermekNev, MeEgys},
    {SzallAzon, AruKod}→ Ar,
     vagyis a röviden F = {S → NC,  K → TM,  SK → A}.

d.)  Tekintsük egy befektetési cég adatbázisát, melynek attribútumai
      B (bróker), I (a bróker irodája), U (befektető ügyfél), R (részvény),
      M (a befektető tulajdonában levő részvény mennyisége),
      O (a részvény osztaléka). Érvényes funkcionális függőségek:
      F = {B → I,  U → B,  UR → M,  R → O}.      

-- -- --
2.) Adott R, F és d dekompozíció. Chase algoritmussal döntsük el,
     hogy veszteségmentes-e illetve függőségőrző-e a dekompozíció.

a.) Az 1a. feladat R sémáját szétvágjuk IU, VU sémákra.
b.) Az 1b. feladat R sémáját szétvágjuk KOIT, IDT, KDJ sémákra.
c.) Az 1c. feladat R sémáját szétvágjuk SNC, KTMA sémákra.
d.) Az 1d. feladat R sémáját szétvágjuk a BI, BU, URM és RO sémákra.

-- -- --
3.) Az 1.feladatban adott R, F esetén adjuk meg a BCNF-ra való felbontás
     algoritmusával az R egy veszteségmentes BCNF sémákra való felbontását.
   
-- -- --
4.) Az 1.feladatban adott R, F esetén számoljuk ki az F függőségi rendszer
     egy minimális fedőjét (minimális bázisát) és a minimális fedőt felhasználva
     a 3NF szintetizáló algoritmussal adjuk meg R-nek egy függőségőrző és
     veszteségmentesen 3NF sémákra való felbontását.
   
-- -- --
   Info: Köv.héten dolgozat, a III.ZH-ról részleteket lásd 12.GY
   További info a gyakorlati jegyek zárásáról, jav/pótZH-ról: itt
    
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   12.GY: 2016.12.13.  --- ZH3: E/K modell, Relációs sématervezés, XML   
   > Déli ép. 2-202  PC3-labor   
   
   > III.ZH témaköre: Ellenőrző kérdések az előadás és 9-10-11.gyakorlatok
      anyagából fontosabb fogalmak és algoritmusok, egyszerű típusfeladatok.
     [1] Rekurzió az SQL-ben. Az Eljut feladat (Tankönyv 10.2. szakasza)
     [2] A félig-strukturált adatmodell, XML, Xpath, XQuery(Tankönyv 12.1.-12.2.)
     [3] Tervezés/1: E/K diagram és átalakítása relációkká (Tankönyv 4.1.-4.6.)
     [4] Tervezés/2: Függőségek elmélete, normalizálás, VM BCNF, 3NF (Tk 3.1.-3.5.)
     Ez egy 30 perces dolgozat, a fenti 4 témakörből lehet szabadon választani,
     csak kérem, hogy legkésőbb a dolgozat előtt 24 órával mindenki küldje el
     e-mailben, hogy a fenti 4 témakör közül melyiket választja, abból írja a zh3-t.
      
  « | 1G | 2G | 3G | 4G | 5G | 6G | 7G | 8G | 9G | 10G | 11G | 12G | # 
   JavZH: 2016.12.21. szerda 12:15-13:45; +GyakUV: 2017.01.04. (Neptun)
   > Déli ép. 2-520  Mesterséges Intelligencia labor
   > A gyakorlati jegy alapja: Összpont = MAX(zh1+zh2; 2*zh2) + zh3,
   > vagyis akinek nem sikerül a zh1, azoknál helyette a zh2-vel számolunk,
      ugyanis a lekérdezések témakörben a zh2 bővebb volt, mint az első zh1 
   
   > Akinek nem sikerül a zh1, azoknál a zh2-vel számolunk duplán zh1 helyett.
   > A zh2 vagy zh3 egyik dolgozat (és csak az egyik) pótolható/javítható: 
      Jav/PótZH: 2016.12.21. szerda 12:15-13:45-ig 2.520 Mest.Int.labor
 
   > Akinek sem a zh2 sem a zh3 nem sikerült, azok elégtelen gyakorlati jegyet
      kapnak (decemberben) és a januári gyakUV-val tudnak gyakorlati jegyet
      szerezni, a gyakorlati utóvizsgára a Neptunban tudnak feljelentkezni: 
      GyakJegyUV: 2017.01.04. szerda 12:15-13:45-ig 2.520 Mest.Int.labor