8.Előadás Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Hasonló dokumentumok
7.előadáshoz kieg.: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

Rekurzió a Datalogban és az SQL3-ban

Adatbázisok 1. Rekurzió a Datalogban és SQL-99

Logikai lekérdezı nyelv: Datalog Rekurzió a Datalogban és az SQL-ben

Adatbázisok-1 előadás Előadó: dr. Hajas Csilla

Feladatok A mai előadáson: Tankönyv -- Termékek feladatai:

Databases 1. Relációs algebra és nemrekurzív Datalog

Adatbázis tartalmának módosítása

Tankönyv példák kidolgozása

Bevezetés: az SQL-be

4.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE), SELECT október október 26. Adatbázisok 1 / 17

Tankönyv: SQL/PSM + Gyak:PL/SQL

SQL. 1.rész. 1.elıadás // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 1

Lekérdezések az SQL-ben 2.rész

Adatbázisok elmélete 11. előadás

SQL DDL-2 (aktív elemek) triggerek

8-9.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

5.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Az SQL adatbázisnyelv: DML

Lekérdezések az SQL-ben 1.rész

SQL. Táblák összekapcsolása lekérdezéskor Aliasok Allekérdezések Nézettáblák

Adatbázis-lekérdezés. Az SQL nyelv. Makány György

Tartalomjegyzék. Tartalomjegyzék 1. Az SQL nyelv 1 Az SQL DDL alapjai 2

Bevezetés: Relációs adatmodell

Relációs algebra 2.rész példák

8. Gyakorlat SQL. DDL (Data Definition Language) adatdefiníciós nyelv utasításai:

Lekérdezések az SQL-ben 1.rész

Relációs algebrai lekérdezések átírása SQL SELECT-re (példák)

SQL ALAPOK. Bevezetés A MYSQL szintaxisa Táblák, adatok kezelésének alapjai

SQL jogosultság-kezelés. Privilégiumok Grant és Revoke Grant Diagrammok

Java és web programozás

ADATBÁZISOK gyakorlat: SQL 2. rész SELECT

SQL PÉLDATÁR. készült a PTE TTK Iskolai informatika III. kurzus teljesítésére

Relációs algebra áttekintés és egy táblára vonatkozó lekérdezések

Adatbázis kezelés Delphiben. SQL lekérdezések

Gyakorlás: Hozzunk létre egy Alkalmazottak táblát AZO szám, Részleg szöveg, Munkakör szöveg és BelépésDátuma dátum típussal.

Adatbázisok. 9. gyakorlat SQL: SELECT október október 26. Adatbázisok 1 / 14

Adatbázisok elmélete 9. előadás

Adatbázisok elmélete 9. előadás

SQL haladó. Külső összekapcsolások, Csoportosítás/Összesítés, Beszúrás/Törlés/Módosítás, Táblák létrehozása/kulcs megszorítások

SQL DDL-1: táblák és megszorítások

Elemi alkalmazások fejlesztése IV.

Informatikai képzés Információs rendszerek dr. Hajas Csilla (ELTE IK)

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

LOGISZTIKAI ADATBÁZIS RENDSZEREK UNIÓ, ALLEKÉRDEZÉSEK

MS ACCESS 2010 ADATBÁZIS-KEZELÉS ELMÉLET SZE INFORMATIKAI KÉPZÉS 1

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

Készítette: Szabóné Nacsa Rozália

Adatbázis tartalmának módosítása (DML), az adatbázis-kezelı rendszerek felépítése,

SQL DDL: Táblák, megszorítások (constraints), triggerek, nézettáblák

Az adatbázisrendszerek világa

ADATBÁZISOK: TAN7.EA témaköre SQL DDL, DML, DCL, Tranz.kez.

Adatbázisok. 2. gyakorlat SQL november november 12. Adatbázisok 1 / 31

Datalog: logikai alapú lekérdezı nyelv

Hozzunk ki többet abból amink van. Fehér Lajos

Adatbázisok I. Definíció: DDL: - objektum létrehozás CREATE - objektum megszüntetés DROP - objektum módosítás ALTER

ADATBÁZIS-KEZELÉS - BEVEZETŐ - Tarcsi Ádám, ade@inf.elte.hu

Relációs algebra 1.rész alapok

Adatbázis használat I. 2. gyakorlat

Bevezetés: Relációs adatmodell

Csomag. Adatbázis-objektum Programozási eszközök gyűjteménye Két részből áll. specifikáció törzs (opcionális)

A relációs algebra egy speciális algebra, amely néhány egyszerű, de hathatós. operandusok. Egy reláció megadható a nevével vagy közvetlenül, sorainak

WHERE záradék (további lehetıségek) SQL specialitások, nem írhatók át relációs algebrába: LIKE. NULL értékek. Az ismeretlen (unknown) igazságérték

Tankönyvben: SQL/PSM Gyakorlaton: Oracle PL/SQL

Bevezetés az SQL-be. Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009

Adatbázisok-1 előadás

3.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Adatbázis tartalmának módosítása. SQL DML utasítások

Adatbázisok. 8. gyakorlat. SQL: CREATE TABLE, aktualizálás (INSERT, UPDATE, DELETE) október október 22. Adatbázisok 1 / 14

2.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

INFORMATIKA ÁGAZATI ALKALMAZÁSAI. Az Agrármérnöki MSc szak tananyagfejlesztése TÁMOP /1/A

9.előadás: Adatbázisok-I. dr. Hajas Csilla (ELTE IK)

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK)

SQL*Plus. Felhasználók: SYS: rendszergazda SCOTT: demonstrációs adatbázis, táblái: EMP (dolgozó), DEPT (osztály) "közönséges" felhasználók

A relációs adatbáziskezelés szabványos nyelve Két fő csoportba sorolhatók az utasításai

Adatbázisok* tulajdonságai

Információs rendszerek Adatbázis-kezelés

Adatbázis, adatbázis-kezelő

LOGISZTIKAI ADATBÁZIS RENDSZEREK JOIN, AGGREGÁCIÓ

Az indexelés újdonságai Oracle Database 12c R1 és 12c R2

Nézetek és indexek. AB1_06C_Nézetek_Indexek - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

Adatbáziskezelı-szerver SQL. Relációs adatbázis-kezelık. Relációs adatszerkezet. Házi feladat

Az SQL nyelv Structured Query Language (Struktúrált lekérdező nyelv)

LBRA6i integrált rendszer

Adatbázisban tárolt kollekciók

Adatbáziskezelő-szerver. Relációs adatbázis-kezelők SQL. Házi feladat. Relációs adatszerkezet

ADATBÁZIS-KEZELÉS FÉLÉVES FELADAT

Java és web programozás

ADATBÁZISOK ELMÉLETE 5. ELŐADÁS 3/22. Az F formula: ahol A, B attribútumok, c érték (konstans), θ {<, >, =,,, } Példa:

Datalog: logikai alapú lekérdezı nyelv

Adatbázis Rendszerek II. 8. Gyakorló környezet

AB1 ZH mintafeladatok. 6. Minősítse az állításokat! I-igaz, H-hamis

Adatbázis-kezelés. Harmadik előadás

Spatial a gyakorlatban

Megszorítások. AB1_06A_Megszorítások - Adatbázisok-1 EA (Hajas Csilla, ELTE IK) - J.D. Ullman elıadásai alapján

A könyv tartalomjegyzéke

Adatbázis Rendszerek I. 10. SQL alapok (DML esettanulmány)

Átírás:

8.Előadás Adatbázisok-I. dr. Hajas Csilla (ELTE IK) http://sila.hajas.elte.hu/ Tankönyv 10.2. Az Eljut-feladat (monoton, lineáris rekurzió) megoldása (a.) az SQL-ben WITH RECURSION utasítással Kiegészítések a rekurzióhoz, az Eljut feladat megoldása: (b.) Oracle megoldások/2: CONNECT BY PRIOR (c.) Oracle megoldások/3: WITH alkérdés faktorizáció Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 1

Következik Relációs algebra korlátai: bizonyos típusú lekérdezéseket nem tudunk relációs algebrával kifejezni Nézzünk meg olyan logikai felépítést, amivel az ilyen rekurzív jellegű lekérdezések könnyen megoldhatók. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 2

Milyen fontos rekurzív feladatok vannak? I. Hierarchiák bejárása Leszármazottak-ősök ParentOf(parent,child) Find all of Mary s ancestors Vállalati hierarchia felettes-beosztott Employee(ID,salary) Manager(mID,eID) Project(name,mgrID) Find total salary cost of project X Alkatrész struktúra (mely alkatrésznek mely alkatrész része) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 3

Milyen fontos rekurzív feladatok vannak? II. Gráf jellegű bejárások Repülőgép járatok, eljut-feladat Flight(orig,dest,airline,cost) Find cheapest way to fly from A to B Közösségi hálók Ki-kinek az ismerőse, Twitterben ki-kit követ Kiegészítés a gráf adatbázisokról Gráfok könnyen megadhatók relációs táblával, a gráf lekérdezések egyre gyakoribb feladatok, ezek relációs megoldása hatékonysági kérdés. Vannak kimondottan gráf-adatbázisok. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 4

Bevezető motiváció: Rekurzív SQL Alkérdés-faktorizáció WITH utasítással. SQL-99 szabványban szerepel. Az Oracle 11.2 verziótól kezdve a WITH rekurzív lekérdezésekre is használható (kiegészítésekkel). A MS SQL Server 2005-ben implementálták a rekurziót is. Rögzítsük egy irányított gráf éleit, és kérdezzük le, honnan hová vezet út! Minden él út is egyben, és ha van él x-ből z-be, és van út z-ből y-ba, akkor van út x-ből y-ba is. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 5

Bevezető motiváció: Rekurzív SQL create table el (honnan INT, hova INT); insert into el values (1,2); insert into el values (2,3), insert into el values (1,4); 1 Oracle: Alkérdés faktorizáció WITH [RECURSION] ut AS (select * from el UNION ALL -- Oracle-ben select el.honnan, ut.hova from el, ut where el.hova=ut.honnan) select * from ut; 2 4 3 honnan el: 1 2 2 3 1 4 honnan ut: 1 2 2 3 1 4 1 3 hova hova Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 6

Bevezető motiváció: Rekurzív SQL A WITH ben definiált ut tábla átmeneti munkatábla, az utasítás végén szereplő lekérdezés futása után már nem lehet rá hivatkozni. A lekérdezést részekre lehet szétbontani (alkérdés faktorizáció), rekurzív lekérdezések megadhatóak. Az él, út példában két szabályt adtunk meg: select * from el Első szabály: ut(x,y) el(x,y) select el.honnan, ut.hova from el, ut where el.hova=ut.honnan Második szabály: ut(x,y) el(x,z) and ut(z,y) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 7

Az Eljut-feladat Tankönyv 10.2. fejezet példája (az ELJUT feladat) Jaratok(legitarsasag, honnan, hova, koltseg, indulas, erkezes) táblában repülőjáratok adatait tároljuk. A járatok táblát létrehozó script: http://people.inf.elte.hu/sila/eduab/jaratok_tabla.txt Mely (x,y) párokra lehet eljutni x városból y városba? Ezt egy relációs algebrai kifejezésként nem tudjuk megadni zárt alakban, klasszikus SQL SELECT utasítással sem tudjuk kifejezni, csak azt tudjuk, hogy átszállás nélkül, egy, két, stb átszállással: Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 8

Az Eljut-feladatnak nincs algebrai megoldása select distinct honnan, hova from jaratok union select j1.honnan, j2.hova from jaratok j1, jaratok j2 where j1.hova=j2.honnan union select j1.honnan, j3.hova from jaratok j1, jaratok j2, jaratok j3 where j1.hova=j2.honnan and j2.hova=j3.honnan --- union stb... Ezt így nem lehet felírni Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 9

Az Eljut-feladat Datalogban Tankönyv 10.2. fejezet példája (az ELJUT feladat) Jaratok(legitarsasag, honnan, hova, koltseg, indulas, erkezes) EDB-táblában repülőjáratok adatait tároljuk. Mely (x,y) párokra lehet eljutni x városból y városba? Datalogban felírva (lineáris rekurzió) Eljut(x, y) <- Jaratok(l, x, y, k, i, e) Eljut(x, y) <- Eljut(x, z) AND Jaratok(l, z, y, k, i, e) Vagy másképp felírva Datalogban (mi a különbség?) Eljut(x, y) <- Jaratok(_, x, y, _, _, _) --- anonimus változók Eljut(x, y) <- Eljut(x, z) AND Eljut(z, y) --- nem lineáris rek. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 10

Az Eljut feladat SQL-99 szabványban Datalog LINEÁRIS, MONOTON rekurzió átírható: Eljut(x, y) <- Jaratok(l, x, y, k, i, e) Eljut(x, y) <- Eljut(x, z) AND Jaratok(l, z, y, k, i, e) Hova, mely városokba tudunk eljutni Budapestről? WITH RECURSIVE Eljut AS (SELECT honnan, hova FROM Jaratok UNION SELECT Eljut.honnan, Jaratok.hova FROM Eljut, Jaratok WHERE Eljut.hova = Jaratok.honnan) SELECT hova FROM Eljut WHERE honnan= Bp ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 11

SQL-99 szabvány: Rekurzív lekérdezés A WITH utasítás több ideiglenes relációra vonatkozó definíciója: WITH [RECURSIVE] R 1 AS <R 1 definíciója> [RECURSIVE] R 2 AS <R 2 definíciója>... [RECURSIVE] R n AS <R n definíciója> < R 1,R 2,...,R n relációkat tartalmazó lekérdezés> Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 12

Másik példa: Rekurzív Datalog A testvérek (féltestvérek) gyerekei első unokatestvérek, az első unokatestvérek gyerekei másod-unokatestvérek, és így tovább. Hívjuk egyszerűen unokatestvéreknek, akik valamilyen szinten unokatestvérek. A rokonok azok, akik közös ősnek leszármazottjai. Milyen Datalog program írja ezt le? testvér(x,y) gyerek(x,z),gyerek(y,z),x y unokatestvér(x,y) gyerek(x,z),gyerek(y,v),testvér(z,v) unokatestvér(x,y) gyerek(x,z),gyerek(y,v),unokatestvér(z,v) rokon(x,y) testvér(x,y) rokon(x,y) rokon(x,z),gyerek(y,z) rokon(x,y) rokon(z,y),gyerek(x,z) r u Függőségi gráf Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 13 t g

Másik példa: Rekurzív Datalog Mik a Datalog egyenletek? testvér(x,y) unokatestvér(x,y) unokatestvér(x,y) rokon(x,y) rokon(x,y) rokon(x,y) gyerek(x,z),gyerek(y,z),x y gyerek(x,z),gyerek(y,v),testvér(z,v) gyerek(x,z),gyerek(y,v),unokatestvér(z,v) testvér(x,y) rokon(x,z),gyerek(y,z) rokon(z,y),gyerek(x,z) A megfelelő relációk legyenek T,U,R,G a testvér, unokatestvér, rokon, illetve gyerek esetén. T(x,y)= x,y ( x y (G(x,z) >< G(y,z))) U(x,y)= x,y (G(x,z) >< G(y,v) >< T(z,v)) x,y (G(x,z) >< G(y,v) >< U(z,v)) R(x,y)=T(x,y) x,y (R(x,z) >< G(y,z)) x,y (R(z,y) >< G(x,z)) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 14

Másik példa: Rekurzív Datalog Milyen SQL utasítás írja le az IDB táblákat? T(x,y)= x,y ( x y (G(x,z) >< G(y,z))) U(x,y)= x,y (G(x,z) >< G(y,v) >< T(z,v)) x,y (G(x,z) >< G(y,v) >< U(z,v)) R(x,y)=T(x,y) x,y (R(x,z) >< G(y,z)) x,y (R(z,y) >< G(x,z)) Tegyük fel, hogy a séma: G(u,w). with T as (select G1.u x, G2.w y from G G1,G G2 where G1.w=G2.u and G1.u<>G2.u), U as (select G1.u x, G2.u y from G G1, G G2, T where T.x=G1.w and T.y=G2.u) union all (select G1.u x, G2.u y from G G1, G G2, U where U.x=G1.w and U.y=G2.u), R as (select * from T) union all (select R.x x,g.u y from R,G where R.y=G.w) union all (select G.u x, R.y y from R,G where R.x=G.w) (select T.x, T.y, 'T' from T union all select U.x, U.y, 'U' from U union all select R.x, R.y, 'R' from R); Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 15

Rekurzív lekérdezések Datalog rekurzió segít megérteni az SQL-99 szabványban bevezetett rekurzív lekérdezések WITH RECURSIVE záradékát. A BSc-n csak MONOTON rekurziót vesszük, vagyis nem használjuk nem-monoton különbség műveletet, nincs csoportosítás-aggregálás (ugyanis az olyan lekérdezések, amelyek nem-monotonok, megengedik a negációt és aggregálást az olyan különös hatással van a rekurzióra, ezt csak MSc kurzusokon vesszük). Gyakorlaton a rekurzív Eljut-feladatnak az Oracle CONNECT BY záradékkal való gépes-megoldásait is megnézzük (ezt csak a gyakorlaton próbáljuk ki). Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 16

Oracle megoldások: with utasítással Az Oracle SQL a WITH RECURSIVE utasítást (UNION) nem támogatja, ott másképpen oldották meg WITH utasítással (Oracle 11gR2 verziótól használható) WITH eljut (honnan, hova) as (select honnan, hova from jaratok UNION ALL select jaratok.honnan, eljut.hova from jaratok, eljut where jaratok.hova=eljut.honnan ) SEARCH DEPTH FIRST BY honnan SET SORTING CYCLE honnan SET is_cycle TO 1 DEFAULT 0 select distinct honnan, hova from eljut order by honnan; Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 17

Oracle megoldások: connect by SELECT DISTINCT hova FROM jaratok WHERE HOVA <> 'DAL' START WITH honnan = 'DAL' CONNECT BY NOCYCLE PRIOR hova = honnan; SELECT LPAD(' ', 4*level) honnan, hova, level-1 Atszallasok, sys_connect_by_path(honnan '->' hova, '/'), connect_by_isleaf, connect_by_iscycle FROM jaratok START WITH honnan = 'SF' CONNECT BY NOCYCLE PRIOR hova = honnan; Adatbázisok-1 (Hajas Csilla, ELTE IK) 8.előadás: Rekurzió 18