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)
HTMLPDF
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 ...
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
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)
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_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).
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.
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.
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