08. ADATBÁZISOK (LEV.INFOTANÁR)
   
 
   1.RÉSZ  Relációs adatbázisok sématervezése (előadások)
   - Funkcionális függőségek (Tankönyv 3.1.-3.2. szakaszok) 10.ea.pdf
   - Boyce-Codd normálforma (Tankönyv 3.3.-3.4. szakaszok) 11.ea.pdf
   - Harmadik normálforma (Tankönyv 3.5.-3.6. szakaszok)  12.ea.pdf
 
 
   2.RÉSZ  SQL DDL Feladatok:  
 
>> SQL DDL, relációs séma megadása = sortípus + megszorítások: 6EA.pdf
>> Oracle: SQL Language Reference >> innen Data Types; illetve Contraint
 
1.) Dolgozo, Osztaly, Fiz_Kategoria táblák, példa: createDolg+Constraints  
 
        Dolgozo (dkod, dnev, foglalkozas, fonoke, belepes, fizetes, jutalek, oazon)      
        Osztaly (oazon, onev, telephely)
        Fiz_Kategoria (kategoria, also, felso)
 
     Készítsünk drop table mytabla; create table mytabla as select * from tabla;  
     másolatokat a dolgozo és osztaly táblákból mydolgozo és myosztaly néven,
     véglegesítse az adattáblákat (commit), majd a létrehozott táblákat lássa el
     az alábbi megszorításokkal, alter table példák  (mo_ell: megszorítások.txt)
    - Legyen a dkod elsődleges kulcs a mydolgozo táblában, és
      legyen az oazon elsődleges kulcs a myosztaly táblában és idegen kulcs a
      mydolgozo táblában, amely a hivatkozási épséget itt úgy állítsa be, hogy
      egy osztály törlése esetén törlődjenek ennek az osztálynak a dolgozói is.
   - Egy új dolgozó csak az adott 700 és 7000 USD értéktartománybeli fizetést
     kaphasson.

    - Ellenőrizze ezeket a megszorításokat sikeres (megfelelő rekord felvitele)
      és sikertelen (hibás rekord) adatbeviteli kísérletekkel, majd állítsa vissza
      az eredeti táblatartalmakat (rollback).
 
-- -- -- -- --  
2.)  Készítsünk két táblát az egyikben legyenek sportcsapatok csapat_id, név.
      A másikban a játékosok, id, név, mezszám, csapat_id. A csapat azonosító 
      legyen idegen kulcs. (lásd még: create table-példák.txt).  
 
-- -- -- -- --
>> SQL DDL create view: módosítható/nem-módosítható nézettáblák: 7EA.pdf;
 
3.) Egyszerű/összetett nézettáblák létrehozása, melyik módosítható/melyik nem?
     Adatok karbantartása adattáblán illetve nézeten keresztül, és megfigyelni ezek
     egymásra hatását: Hogyan hat a nézetek adatainak módosítása az adattáblára,
     és a másik irányban, az adatok módosítása hogyan jelenik meg a nézetben?
 
>> Például: Bonyolultabb lekérdezés megoldása nézettáblák segítségével 
   -- 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)
   
-- -- -- -- --
>> WITH munkatáblák használata az SQL SELECT lekérdezésekben
>> Oracle: SQL Language Reference >> innen: Subquery Factoring: Examples 
 
4.) lásd a fenti példát nézettáblákra, ugyanezt WITH-záradékkal is felírhatjuk
   Példák WITH munkatá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.
    
  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)