VII. Témakör: Objektumrelációs adatbázisok

1. gyak. - Modellezés. E/K, UML, EER modell
>> Beadandó modellezési feladatok
>> 7.1. E/K, UML, EER modellezési mintapéldák
>> 7.2. Hierarchikus lekérdezések az Oracle-ben

2. gyak. - Rekurzió az SQL3-ban és PL/SQL-ben
>> 7.3. Rekurzió az SQL3 szabványban és PL/SQL-ben

3.gyak. - Objektumrelációs eszközök I.
>> 7.4. Absztrakt adattípusok használata (OBJECT)
>> 7.5. Kollekció: Dinamikus tömbök (VARRAY)

4.gyak. - Objektumrelációs eszközök II.
>> 7.6. Kollekció: Beágyazott táblák (NESTED TABLE)
>> 7.7. Metódusok. Objektumtáblák és OID-ek

5.gyak. - LOB, DBMS_LOB csomag, valamint reguláris kifejezések
>> 7.8. Nagyméretű objektumok használata (LOB: Large Object)
>> 7.9. Reguláris kifejezések és National Languge Support (NLS)
   
6.gyak. - Adattárház technikák és összetett lehetőségek
>> 7.10. OLAP. Adattárház sémák és technikák
>> 7.11. Részletező csoportosítások (ROLLUP, CUBE, GROUPING)
        
I.ZH (7.gyak)
______________________________________________________
Segédanyagok:
>> Tk1./10.3.-10.6.fejezet: Objektumrelációs modell, felhasználó által definiált típusok
>> Nikovits Tibor: UDT.txt és LOB_adatok.txt
>> PL/SQL Kollekciok.pdf és Kollekciok_pelda.html
>> Object-Relational Features of Oracle by ..stanford.edu/~ullman..
 
Oracle® Database 10g (10.2)  Documentation Library
>> Oracle Object-Relational Features 10g (10.2) HTML     PDF
>> Oracle PL/SQL User's Guide and Ref.10g      HTML   PDF
>> Large Objects 10g (10.2)    HTML     PDF
       
Ajánlott irodalom:
[1UW] Ullman-Widom: Adatbázisrendszerek. Alapvetés (Második, átdolg. kiad),
                                   Megjelent: Panem, 2008. november (a "kék könyv") = Tk1.
[3EN]  Elmasri-Navathe: Fundamentals of Database Systems (5th Edition), 2007.
[4Ref] Loney: ORACLE DATABASE 10g Teljes referencia, Panem, 2006.
[6Sql] Stolnitcki Gyula: SQL programozóknak, ComputerBooks, 2003.
[7Pls]  Gábor A.-Juhász I.: PL/SQL-programozás ORACLE 10g-ben, Panem, 2006.
... További ajánlott irodalom és hasznos linkek, lásd DB_links10f.html
______________________________________________________
1. gyak. - Modellezés. E/K, UML, EER modell
 
>> Beadandó modellezési feladatok
>> 7.1. E/K, UML, EER modellezési mintapéldák
>> 7.2. Hierarchikus lekérdezések az Oracle-ben
   
Beadandó modellezési feladatok (szabadon választható!)
-- Több lépcsős feladat (a beadandón szerzett pontok az 1zh pontjaihoz számítanak)
1.) lépcső: Az érdeklődési körödnek és a feladatnak megfelelő saját témakör kiválasztása
2.) lépcső:  E/K modell és leképezése relációs modellre, Tk1. 4.1-4.6.fej., 133-181.o.
3.) lépcső: UML modell és leképezése obj.relációs modellre, Tk1. 4.7-4.8.fej.181-195.o
4.) lépcső: EER modell és leképezése obj.relációs modellre,  lásd az EA anyagban itt
5.) lépcső: Megvalósítása az Oracle obj.relációs adatb.kezelővel, Tk1. 10.3-10.5.fej.
 
7.1. Modellezési mintapéldák:
 
Tankönyv, Tk1.>> 4.fejezet Magas szintű adatbázismodellek
  
71uml_01
     Oracle minta alaptáblák sémái, lásd az Oracle dokumentáció:
     -- Samples Schemas (10.2)      HTML      PDF  
     Feladatok: Írd át E/K diagrammá, majd UML diagrammá!
     -- HR-séma
     -- HR+OE séma, illetve ehhez hasonló:
     --  Áruházi rendszer >> lásd E/K_A.pdf (Kiss A./Ullman) (jelszóval)   
71uml_02
     --  Tanulmányi rendszer  >> lásd  Órai mintadatbázissémák (Hajas Cs.)

71uml_03
     --  Orvosi adatbázis rendszer >> lásd E/K_B.pdf (Kósa B.) (jelszóval)
 
_______________________________________________________
7.2. Hierarchikus lekérdezések az Oracle-ben (CONNECT BY PRIOR)
      Családfák. SFW START WITH ... CONNECT BY PRIOR ...
 
Segédanyagok:
>> Nikovits Tibor: hiera_lekerd.txt
>> Hierarchikus.pdf  példáit próbáljuk ki!
--  Ehhez előkészítésként a HR séma tábláihoz készítsük el a szinonimákat create_synonym
 
Feladatok a hierarchikus lekérdezésekhez
72hier_01
    - Táblák:  dolgozo_tabla.txt  Létrehozása:  create_dolgozo.txt
    - Listázzuk ki az dolgozo tábla alapján a főnökökhöz tartozó beosztottak nevét és osztályukat.
      a.) A dolgozo tábla önamagára való hivatkozásával (többtáblás lekérdezés sorváltozókkal).
      b.) A CONNECT BY utasításrész használatával, a hierarchikus szerkezetet 'KING'-től
           felülről lefelé bejárva.
      c.)  Alulról felfelé járjuk be a hierarchikus szerkezet egy ágát 'SMITH'-től kezdve.

72hier_02
     - Tranzitív lezárt kifejezése PL/SQL programmal
        Az alábbi feladat a tankönyv (Ullman-Widom kék könyv) 10.2 szakaszára épül.
        JARATOK(legitarsasag, honnan, hova, koltseg, indulas, erkezes)
        táblában repülőjáratok adatait tároljuk.
        - Készítsetek ebből saját példányt: Jaratok_tabla.sql és az alapján dolgozzatok!
        - Mely városokba lehet eljutni Dallasból? ('DAL'='Dallas', hierarchikus lekérdezéssel)
        - Átszállásokkal mely városokba lehet eljutni San Franciscoból? ('SF'='San Francisco')
        - Ez a lekérdezés addig működik, amíg nincs a gráfban kör. Szúrjatok be a saját
           táblátokba még egy sort, ami után már irányított kör is lesz a táblában:
                 INSERT INTO jaratok VALUES('LH', 'CHI', 'DEN', 2000, 1900, 2100);
           (Ezután már nem működik a START WITH, CONNECT BY típusú lekérdezés)
______________________________________________________
2. gyak. - Rekurzió SQL3-ban és PL/SQL-ben

>> Beadandó modellezési feladatok
>> 7.3. Rekurzió az SQL3 szabványban és PL/SQL-ben
  
7.3. Rekurzió az SQL3 szabványban és PL/SQL-ben
 
Segédanyagok: Tk1./10.2.fejezet: 1UW_10.2_Rekurzio.pdf

73rek_01
-- Tegyük fel, hogy az alábbi reláció
                     Járatok(légitársaság, honnan, hova, költség, indulás, érkezés)
    azt tartalmazza, hogy melyik légitársaság melyik városból melyik városba mikor indít járatokat.
-- Mely (x, y) várospárokra lehetséges egy vagy több átszállással eljutni x városból y városba?
    Tegyük fel, hogy nemcsak az érdekel minket, hogy el tudunk-e jutni az egyik városból a másikba,
    hanem az is, hogy utazásunk során az átszállások is ésszerűek legyenek, vagyis ha több járattal
    utazunk és átszállásra van szükségünk, akkor az érkező járatnak legalább egy órával a rá következő
    indulás előtt meg kell érkeznie. Feltehetjük, hogy nincs egy napnál hosszabb utazás!
    a.) Írjuk fel erre a rekurzív Datalog szabályokat! (papíron)
    b.) Írjuk át ezt a rekurziót az SQL-99 szabvány szerint! (Ezt is papíron!)

Tranzitív lezárt kifejezése Oracle PL/SQL-ben

73rek_02
     - Tranzitív lezárt kifejezése PL/SQL programmal
            Az alábbi feladat a tankönyv (Ullman-Widom kék könyv) 10.2 szakaszára épül.
            JARATOK(legitarsasag, honnan, hova, koltseg, indulas, erkezes)
            táblában repülőjáratok adatait tároljuk.
          - Készítsetek ebből saját példányt: Jaratok_tabla.sql és az alapján dolgozzatok!
          - Mely (x,y) város párokra lehetséges egy vagy több átszállással
             eljutni x városból y városba?
                           1.    Eljut(x,y) <-  Járatok(l, x, y, k, i, e)
                           2.    Eljut(x,y) <- Eljut(x,z) AND Eljut(z,y)
          - Amennyiben azt szeretnénk megtudni, hogy mely városokba lehet eljutni Dallasból
            ezt a következő hierarchikus lekérdezéssel kapjuk meg ('DAL'='Dallas'):
                           SELECT DISTINCT hova
                           FROM jaratok
                           START WITH honnan='DAL'
                           CONNECT BY PRIOR hova=honnan;
          - Átszállásokkal mely városokba lehet eljutni San Franciscoból ('SF'='San Francisco')
                           SELECT LPAD(' ', 4*level) ||honnan, hova, level-1 Atszallasok
                           FROM jaratok
                           START WITH honnan = 'SF'
                           CONNECT BY PRIOR hova = honnan;
          - Ez a lekérdezés addig működik, amíg nincs a gráfban kör. Szúrjatok be a saját
             táblátokba még egy sort, ami után már irányított kör is lesz a táblában:
                           INSERT INTO jaratok VALUES('LH', 'CHI', 'DEN', 2000, 1900, 2100);
         - Mely (x, y) várospárokra lehetséges egy vagy több átszállással eljutni x városból y városba?

73rek_03
         - Hozzatok létre ELJUT(honnan, hova, koltseg) táblát (üresen, csak a szerkezetet), lásd itt 
         - Írjunk egy olyan PL/SQL programot, ami feltölti az ELJUT táblát a megfelelő város párokkal,
           ahol az első városból el lehet jutni a másodikba. (Önmagával ne szerepeljen egy város sem.)
           A költség oszlop egyelőre maradjon üres.

73rek_04
         - Most úgy töltsük fel az ELJUT táblát, hogy  a költség oszlop a minimális költséget tartalmazza
            két város között. (A és B város között a lehető legolcsóbb út költségét írja be a program.)

73rek_05
          - Tegyük fel, hogy nemcsak az érdekel, hogy el tudunk-e jutni az egyik városból a másikba,
             hanem az is, hogy utazásunk során az átszállások is ésszerűek legyenek, vagyis ha több
             járattal  utazunk és átszállásra van szükségünk, akkor az érkező járatnak legalább egy
            órával a rá következő indulás előtt meg kell érkeznie.
            (Feltehetjük, hogy nincs egy napnál hosszabb utazás)
  
_______________________________________________________
3. gyak. - Objektumrelációs eszközök I.
     
>> 7.4. Absztrakt adattípusok használata (OBJECT)
>> 7.5. Kollekció: Dinamikus tömbök (VARRAY)
      
7.4. Absztrakt adattípusok használata (OBJECT)
   
Segédanyagok: lásd fent 

Feladatok:
A példa adatbázis tábláiból: hr.countries, hr.employees, oe.customers, oe.jobs
A táblák összekapcsolásának felderítésében segítenek a definiált idegen kulcsok.
   
74udt_Előkészítés
-- Próbáld ki az UDT_1_Object.txt példáit!

74udt_01
-- Adjuk meg, hogy hány különböző országból vannak vevőink (oe.customers).

74udt_02 (lásd még külső join)
-- Adjuk meg, hogy melyik országból hány vevőnk van. (oe.customers, hr.countries)
    Az olyan ország is szerepeljen (ha van), amelyik nincs benne a hr.countries táblában.
    (Ország_azon, Országnév, VevőkSzáma) 

74udt_03
-- Adjuk meg azoknak a dolgozóknak a nevét és foglalkozását, akik vevőkkel foglalkoznak,
    valamint azt, hogy hány különböző országbeli vevővel foglalkoznak.
    (Név, Foglalkozás, OrszágokSzáma) vagyis Név: összefűzve a vezeték-és utónevet,
     Foglalkozás: nem a kódot, hanem a nevet. A táblák összekapcsolásának felderítésében
     segítenek a definiált idegen kulcsok, lásd dba_constraints
   
74udt_04
-- Adjuk meg azoknak az amerikai városoknak a neveit, amelyek az északi szélesség
    42. és 43. foka valamint a nyugati hosszúság 82. és 85. foka között helyezkednek el.
    lásd -> oe.customers.cust_geo_location tárolja a vevő városának földi elhelyezkedését.
    Az x és y attribútumokban van a földrajzi hosszúság (-180 - 180, a negatív számok
    Greenwich-től nyugatra) illetve szélesség (-90 - 90, a negatív számok az egyenlítőtől délre).
 

7.5. Kollekció: Dinamikus tömbök (VARRAY)
   
Segédanyagok: lásd fent
 
Feladatok:
A példa adatbázis tábláiból: oe.customers
 
75udt_Előkészítés
-- Próbáld ki az UDT_2_Varray.txt példáit!

75udt_01
-- Adjuk meg a Burt Spielberg nevű vevőnek a telefonszámait (külön sorokban).

75udt_02
-- Adjuk meg azoknak a német vevőknek a nevét, akiknek legalább 2 telefonszámuk van.

_______________________________________________________
4. gyak. - Objektumrelációs eszközök II.
 
>> 7.6. Kollekció: Beágyazott táblák (NESTED TABLE)
>> 7.7. Metódusok. Objektumtáblák és OID-ek
 
7.6. Kollekció: Beágyazott táblák (NESTED TABLE)
 
Segédanyagok: lásd fent
    
Feladatok:
A példa adatbázis tábláiból: oe.orders, oe.customers

76udt_Előkészítés
-- Próbáld ki az UDT_3_NestedTable.txt illetve UDT_4_Cast.txt példáit!

76udt_01
-- Hozzunk létre egy T táblát az OE.ORDERS, OE.CUSTOMERS táblák adatai alapján
    a következőképpen. A T táblában legyen benne a vevo neve (first name + last name),
    címe (cust_address), telefonszámai (VARRAY oszlopként), valamint az általa feladott
    rendelések adatai (beágyazott táblaként). A rendelések információi közül elég az
    azonosítót, dátumot és összértéket (order_id, order_date, order_total) tárolni.
-- Töltsük is fel adatokkal a T táblát a fenti két táblából.
    Az összes vevő összes rendelésével kerüljön bele a táblába.
-- Majd adjuk meg a T táblát lekérdezve azon vevők nevét és összes rendeléseik összértékét,
    akik címének városa Detriot.
-- Ellenőrzésképpen adjuk meg ugyanezt a lekérdezést az eredeti két táblára megfogalmazva.
 
 
7.7. Metódusok. Objektumtáblák és OID-ek
 
Segédanyagok: lásd fent
  
Feladatok:
 
77udt_Előkészítés
-- Próbáld ki az UDT_5_Metodus.txt illetve UDT_6_Objektumtabla.txt példáit!

77udt_01
-- Adjuk meg a nikovits.sokszogek tábla adatai alapján az egyes sokszögek kerületét
    vagyis oldalainak összhosszát. (Név, Kerület)
    Minden szükséges információt, típusokat, metódusokat a katalógusból nézzetek meg.

77udt_02
-- Deklaráljuk az alábbi típusoknak megfelelő típusokat:
    a.) NevTipus, amely tartalmazza a családi nevet, utónevet és valamilyen megszólítást.
    b.) CimTipus, amely három komponensből áll, attribútumai irányítószám, város és utca.
    c.) SzemelyTipus, amely tartalmazza a személy nevét, címét és a házasság dátumát,
         valamint a hivatkozásokat azokra a személyekre, akik az ő férjük vagy feleségük.
         A deklarációban használjuk az a.) és b.) részben definiált típusokat.
    d.) Egészítsük ki a b.) részben szereplő CimTipus definícióját egy UtcaNev eljárással,
         amely az utcanevet szedi ki az utca komponensből, mint például ’Fő út 48’ esetén
         'Fő út' jelenti az utcanevet (vagyis a házszámot, a számokat vágjuk le a végéről).
          Definiáld a metódust (PL/SQL segítségével add meg az eljárást).
    e.) Hozzunk létre egy HanyHonapjaHazas függvényt a SzemelyTipus tagfüggvényeként,
         amelynek visszatérési értéke, hogy a személy mennyi ideje házas hónapokban megadva.

_______________________________________________________
5. gyak.  - LOB, valamint az összetett lehetőségek.

>> 7.8. Nagyméretű objektumok használata (LOB: Large Object)
>> 7.9. Reguláris kifejezések és National Languge Support (NLS)

7.8. Nagyméretű objektumok használata (LOB: Large Object)

Segédanyagok:
>> Nikovits Tibor: LOB_adatok.txt
>> Oracle doksik: Large Objects 10g (10.2)    HTML     PDF
 
Feladatok:

78lob_Előkészítés
-- Próbáld ki a  LOB_adatok.txt példáit!

78lob_01
-- File I/O műveletek, LOB oszlopok
-- A medusa gépen levő /tmp/INFOKEZ3/Moricz_Rokonok.txt állományból egy tetszőleges
   1000 karakter hosszúságú részt irassatok ki a képernyőre egy plsql programmal,
   valamilyen beépített Oracle package-ek használatával. Az Oracle package-ek segítségével
   olvasni tudjátok az állományt annak ellenére, hogy nincs op.rendszer azonosítótok a gépre.
>> Nikovits Tibor: utl_file_demo.txt   
      
7.9. Reguláris kifejezések és National Languge Support (NLS)
   
Ismétlés: Numerikus, karakterkezelő, dátumkezelő, konverziós függvények
és speciális függvények (NVL és DECODE függvények, CASE kifejezés). 
 >> Ora_functions.pdf  (lásd még SQL Reference)

Reguláris kifejezések:
REGEXP_SUBTR, REGEXP_INSTR, REGEXP_LIKE, REGEXP_REPLACE 
>> Regularis.pdf  (jelszóval)    (lásd még SQL Reference, C Appendix)

Nemzeti nyelv támogatás (National Language Supports)
>> Nikovits Tibor: nls_info.txt   

Feladatok:
>> Nikovits Tibor: SQLfvfeladatok.txt  
_______________________________________________________
6. gyak.  - Adattárház technikák és összetett lehetőségek
  
>> 7.10. OLAP. Adattárház sémák és technikák
>> 7.11. Részletező csoportosítások (ROLLUP, CUBE, GROUPING)
 
7.10. OLAP. Adattárház sémák és technikák
 
ROLAP (Relational OLAP) materializált nézetek, bitmap indexek.
MOLAP  (Multidimensional OLAP) adatkockák, drill-down, roll-up.
>> olap_Ullman.pdf (forrás: http://infolab.stanford.edu/~ullman/)
>> Oracle SH séma (sh.sales, stb)     >> olap_Cz.pdf
   
7.11. Részletező csoportosítások (ROLLUP, CUBE, GROUPING)
 
Segédanyag: 
>> Grouping.pdf (jelszóval)
 
Feladatok:
>> Példák és megoldások (jelszóval)
 
KÖV.HÉTEN I.ZH (7.gyak)

Lap tetejére        Gyak oldalára        Vissza a Kezdőlapra