E/K
modell leképezése
relációs modellre
Rekurzív
nem-negált Datalog és SQL3 WITH RECURSIVE
PL/SQL alapok, feladatok E/K
diagram
leképezése
relációs modellre
Ullman-Widom:
Adatbázisrendszerek.
Alapvetés
(Második,
átdolg.kiad),
2009.
-- E/K modell és
leképezése
relációs modellre, [UW1] 4.1-4.6.fej., 133-181.o.
-- Megvalósítása az
Oracle relációs
adatbázis-kezelővel, vagyis
táblák és
megszorítások
létrehozása, [UW1] 2.3.,
2.5.fej és 7.1-7.4.fej.
és táblák
feltöltése a
megszorításoknak eleget tevő
sorokkal, [UW1]
6.5.fej.
-- II.ZH-án várható
feladat adott E/K modell (vagyis adott egy E/K diagram)
ezt kell leképezni
relációs
modellre (meg kell adni a relációs
adatbázissémát)
Példák: E/K
modellre és
relációs sémákká
való átírásukra
-- E/K átírása
relációkra,
összevonás, lásd E/K_A.pdf (Kiss
A./Ullman: Princ.of DB)
-- Gyenge egyedhz, Osztályhierarchia
átalakítása
relációkká,
lásd E/K_A2.pdf
-- Orvosi
adatbázis rendszer
>> lásd E/K_B.pdf
(Kósa B.- kicsit más
jelöléssel)
-- Tanulmányi rendszer
>> lásd E/K_C.pdf
(Hajas Cs.) -- HF: átírni
relációkká!
--
Gyakorló példák, lásd Tankönyv
4.5-4.6 >> E/K_pl1.pdf
és HF: E/K_pl2.pdf
Feladat:
Írd át a HR-sémát
E/K diagrammá! (klasszikus Chen
jelöléssel)
Rekurzív
nem-negált Datalog és SQL3 WITH RECURSIVE
[Ullman-Widom]
5.3. Datalog
szabályok és
lekérdezések [Ullman-Widom]
10.2.
Rekurzió az SQL-ben (466-474.o.)
Rek1.feladat:
- 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.txt
és az
alapján
dolgozzatok
DROP TABLE jaratok;
CREATE TABLE jaratok(
legitarsasag CHAR(2),
honnan VARCHAR2(10),
hova VARCHAR2(10),
koltseg NUMBER,
felszallas NUMBER,
erkezes NUMBER);
INSERT INTO jaratok VALUES('UA', 'SF','DEN', 1000, 930,1230);
INSERT INTO jaratok VALUES('AA', 'SF','DAL', 10000, 900,1430);
INSERT INTO jaratok VALUES('UA','DEN','CHI', 500, 1500,1800);
INSERT INTO jaratok VALUES('AA','DEN','DAL', 2000, 1400,1700);
INSERT INTO jaratok VALUES('AA','DAL','CHI', 600, 1530,1730);
INSERT INTO jaratok VALUES('AA','DAL', 'NY', 2000, 1500,1930);
INSERT INTO jaratok VALUES('AA','CHI', 'NY', 3000, 1900,2200);
INSERT INTO jaratok VALUES('UA','CHI', 'NY', 2000, 1830,2130);
- (Papíros feladat) Fejezzzük ki Datalog
programmal, hogy mely (x,y)
város
párokra
lehetséges egy vagy
több
átszállással eljutni x
városból y városba?
- Megoldás:
1. Eljut(X, Y)
<- Jaratok(L, X, Y, K, F, E)
2. Eljut(X, Y) <-
Eljut(X, Z) AND Jaratok(L, Z, Y, K, F, E)
- (Papíros feladat) A fenti rekurzív Datalog
programot
írd át az SQL3 szabványban
szereplő WITH RECURSIVE
utasítással! (Csak
papíron! Oracle nem támogatja).
- Megoldás:
WITH eljut AS
(SELECT honnan, hova FROM jaratok
UNION
SELECT eljut.honnan, jaratok.hova
FROM eljut, jaratok
WHERE eljut.hova = jaratok.honnan
AND eljut.honnan <> jaratok.hova)
SELECT * FROM eljut;
- (Gépes feladatok: Oracle CONNECT BY PRIOR, lásd
előző
órán 8.gyak#CSFA)
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
WHERE
HOVA <> 'DAL'
START WITH honnan = 'DAL'
CONNECT BY NOCYCLE 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
WHERE
HOVA <> 'SF'
START WITH honnan = 'SF'
CONNECT BY NOCYCLE PRIOR hova =
honnan;
- A hierarchikus lekérdezésben további
pszeudo
oszlopokat is használhatunk, amint
azt az alábbi
példában
láthatjuk az úzvonal megadását
SELECT
hova,
sys_connect_by_path(honnan||'->'||hova, '/'),
connect_by_isleaf, connect_by_iscycle
FROM
jaratok
START
WITH honnan = 'SF'
CONNECT BY NOCYCLE PRIOR hova
= honnan;
- Szúrjunk be 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?
Ezt PL/SQL programmal fogjuk
Oracle-ben megoldani (folytatjuk, lásd 11.gyak#Rek1)
További
gyakorló feladatok találhatóak
az Oracle
Példatárban
-- Lásd Feladatok.pdf (8-9.fejezet
feladatai)
-- Ehhez: a táblák
létrehozása cr_dept_emp.sql