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

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

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

Datalog: logikai alapú lekérdezı nyelv

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

Datalog: logikai alapú lekérdezı nyelv

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

Rekurzió a Datalogban és az SQL3-ban

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

SQL/PSM kurzorok rész

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

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

Bevezetés: az SQL-be

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

5.3. Logika a relációkhoz

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

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

SQL DDL-2 (aktív elemek) triggerek

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

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

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

Az SQL adatbázisnyelv: DML

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

Tranzakciókezelés PL/SQL-ben

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

Adatok szűrése, rendezése

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

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

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

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

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

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

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

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

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

B I T M A N B I v: T M A N

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

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

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

Tankönyv példák kidolgozása

Lekérdezések az SQL SELECT utasítással

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

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

Bevezetés: Relációs adatmodell

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

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

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

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

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

Bevezetés: Relációs adatmodell

Elemi alkalmazások fejlesztése IV.

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

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

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

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

SQL/PSM tárolt modulok rész

INDEXSTRUKTÚRÁK III.

2007. február 25. TARTALOM

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

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

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.

Adattípusok. Max. 2GByte

Adattípusok. Max. 2GByte

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

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

Bevezetés: Relációs adatmodell

5. téma XML DB. Az adatkezelés és XML kapcsolata. Miért fontos az XML használata az adatbázis kezelésben?

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

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

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

Adatbázisok-1 előadá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:

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

Adatbázisok* tulajdonságai

Indexek és SQL hangolás

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

Haladó DBMS ismeretek 1

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

Lekérdezések az SQL SELECT utasítással

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

Együttes hozzárendelés

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

Lekérdezések az SQL SELECT utasítással. Copyright 2004, Oracle. All rights reserved.

Bevezetés: Relációs adatmodell

Mapping Sequencing Reads to a Reference Genome

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

Relációs algebra 2.rész

BEVEZETÉS Az objektum fogalma

Kivételkezelés 2. SQLCODE lehetséges értékei:

A trigger egy aktualizálási művelet esetén végrehajtandó programrészletet definiál. Alakja:

Az adatbázisrendszerek világa

Széchenyi István Egyetem

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

Az SQL*Plus használata

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

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

SQL bevezetés. Select-From-Where záradékok Több relációt tartalmazó lekérdezések Alkérdések

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

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

Kilencedik témakör: Lazarus-Firebird. Készítette: Dr. Kotsis Domokos

Java és web programozás

Átírás:

Adatbázisok-I. előadás dr. Hajas Csilla (ELTE IK) http://sila.hajas.elte.hu/ 8.ea: Datalog 9.ea: Rekurzió Az előadások Ullman-Widom: Adatbázisrendszerek Alapvetés alapján készültek, forrás: http://infolab.stanford.edu/~ullman/dscb.html Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 1

8.-9.előadások témakörei Tankönyv 5.3. Logika a relációkhoz: Datalog 5.4. A relációs algebra és nem-rekurzív biztonságos Datalog kifejező erejének összehasonlítása 10.2. Az Eljut-feladat (monoton, lineáris rekurzió) megoldása (a.) a Datalogban (b.) az SQL-ben WITH RECURSION utasítással Kiegészítések a rekurzióhoz, az Eljut feladat megoldása: (c.) Eljut feladat PL/SQL-ben (illetve SQL/PSM-ben) (d.) Oracle megoldások/2: CONNECT BY PRIOR (e.) Oracle megoldások/3: WITH alkérdés faktorizáció Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 2

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. Ez a nyelv: a Datalog Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 3

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-9.előadás: Datalog és Rekurzió 4

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-9.előadás: Datalog és Rekurzió 5

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-9.előadás: Datalog és Rekurzió 6

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-9.előadás: Datalog és Rekurzió 7

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-9.előadás: Datalog és Rekurzió 8

Kérdések: Bevezetés: Rekurzív SQL Hogyan változik az SQL lekérdező ereje ezzel a lehetőséggel? Hogyan értékelődnek ki az ilyen lekérdezések? Hogyan lehet optimalizálni az ilyen lekérdezéseket? Logika a relációkhoz: Olyan lekérdezőnyelveket definiálunk, amelyekben ilyen szabályok adhatók meg. Az ideiglenes táblákat IDB (intenzionális) tábláknak, a többi táblát EDB (extenzionális) táblának fogjuk nevezni. Az EDB táblákat tároljuk, az IDB táblákat az EDB és IDB táblák alapján lekérdezésekkel definiáljuk. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 9

Logika, mint lekérdező nyelv Datalog: logikai, szabály-alapú nyelv szabály: IF feltétel THEN eredmény, ahol a feltétel relációkkal legyen megadható és az eredmény pedig az output tábla sorait eredményezze A példa a Sörivók adatbázison alapszik Látogat(név, söröző), Szeret(név, sör), Felszolgál(söröző, sör, ár). Adjunk meg egy olyan szabályt, amely lekérdezi a boldog sörivókat, akik olyan sörözőt látogatnak, ahol felszolgálnak olyan sört, amelyet szeretnek. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 10

Datalog szabályok felépítése Happy(d) Frequents(d,bar) AND Likes(d,beer) AND Sells(bar,beer,p) Head = consequent, a single subgoal Read this symbol if Body = antecedent = AND of subgoals. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 11

Atomi formulák-1: Relációs formulák An atom is a predicate, or relation name with variables or constants as arguments. The head is an atom; the body is the AND of one or more atoms. Convention: Predicates begin with a capital, variables begin with lower-case. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 12

Példa relációs atomi formulára (1) Sells(bar, beer, p) The predicate = name of a relation Arguments are variables (or constants). (2) Proba(x, x, y, 5, alma ) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 13

Example: Interpretation Happy(d) Frequents(d,bar) AND Likes(d,beer) AND Sells(bar,beer,p) Distinguished variable Nondistinguished variables Interpretation: drinker d is happy if there exist a bar, a beer, and a price p such that d frequents the bar, likes the beer, and the bar sells the beer at price p. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 14

Datalog szabályok kiértékelése ---1 Approach 1: consider all combinations of values of the variables. If all subgoals are true, then evaluate the head. The resulting head is a tuple in the result. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 15

Example: Rule Evaluation Happy(d) Frequents(d,bar) AND Likes(d,beer) AND Sells(bar,beer,p) FOR (each d, bar, beer, p) IF (Frequents(d,bar), Likes(d,beer), and Sells(bar,beer,p) are all true) add Happy(d) to the result Note: set semantics so add only once. Set semantics vice versa bag semantics Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 16

Datalog szabályok kiértékelése ---2 Approach 2: For each subgoal, consider all tuples that make the subgoal true. If a selection of tuples define a single value for each variable, then add the head to the result. Happy(d) Frequents(d,bar) AND Likes(d,beer) AND Sells(bar,beer,p) FOR (each f in Frequents, i in Likes, and s in Sells) IF (f[1]=i[1] and f[2]=s[1] and i[2]=s[2]) add Happy(f[1]) to the result Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 17

Atomi formulák-2: Aritmetikai formula In addition to relations as predicates, a predicate for a subgoal of the body can be an arithmetic comparison. We write arithmetic subgoals in the usual way, e.g., x < y. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 18

Példa: Aritmetikai részcélok A beer is cheap if there are at least two bars that sell it for under $2. Cheap(beer) Sells(bar1,beer,p1) AND Sells(bar2,beer,p2) AND p1 < 2.00 AND p2 < 2.00 AND bar1 <> bar2 Feladatok: Írjuk át SQL SELECT utasításra a fenti szabályt! Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 19

Negált részcélok NOT in front of a subgoal negates its meaning. Example: Think of Arc(a,b) as arcs in a graph. S(x,y) says the graph is not transitive from x to y ; i.e., there is a path of length 2 from x to y, but no arc from x to y. S(x,y) Arc(x,z) AND Arc(z,y) AND NOT Arc(x,y) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 20

Biztonságossági elvárás A szabályok kiértékelhetőek legyenek, ehhez: A szabályban szereplő minden változónak elő kell fordulnia a törzsben nem-negált relációs atomban Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 21

Biztonságos szabályok A rule is safe if: 1. Each distinguished variable, 2. Each variable in an arithmetic subgoal, and 3. Each variable in a negated subgoal, also appears in a nonnegated, relational subgoal, amivel az x korlátozott: pred(x, y, ) argumentuma (értéke a táblából) vagy x=c (konstans) vagy x=y (ahol y korlátozott) Safe rules prevent infinite results. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 22

Példa: Nem biztonságos szabályokra Each of the following is unsafe and not allowed: 1. S(x) R(y) 2. S(x) R(y) AND x < y 3. S(x) R(y) AND NOT R(x) In each case, an infinity of x s can satisfy the rule, even if R is a finite relation. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 23

Datalog programok Datalog program = collection of rules. In a program, predicates can be either 1. EDB relációk = Extensional Database = stored table (csak a törzsben szereplő relációk) 2. IDB relációk = Intensional Database = relation defined by rules (szerepel fej-ben) Never both! No EDB in heads. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 24

Datalog programok kiértékelése As long as there is no recursion, we can pick an order to evaluate the IDB predicates, so that all the predicates in the body of its rules have already been evaluated. If an IDB predicate has more than one rule, each rule contributes tuples to its relation. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 25

Példa: Datalog program Using EDB Sells(bar, beer, price) and Beers(name, manf), find the manufacturers of beers Joe doesn t sell. JoeSells(b) Sells( Joe s Bar, b, p) Answer(m) Beers(b,m) AND NOT JoeSells(b) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 26

Példa: Kiértékelése Step 1: Examine all Sells tuples with first component Joe s Bar. Add the second component to JoeSells. Step 2: Examine all Beers tuples (b,m). If b is not in JoeSells, add m to Answer. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 27

Datalog kifejező ereje Without recursion, Datalog can express all and only the queries of core relational algebra. The same as SQL select-from-where, without aggregation and grouping. But with recursion, Datalog can express more than these languages. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 28

Relációs algebrai kifejezések átírása Mi a leggyakrabban előforduló típus, amiből építkezek? Lista ( Felt (R S ) Ezt a komponenst támogatja legerősebben az SQL is: SELECT lista FROM táblák összekapcsolása WHERE felt Ez felel meg egy Datalog szabálynak. Halmazműveletek: kezdjük ezzel, hogyan lehet a metszetet és különbséget Datalog szabállyal, és az egyesítést Datalog programmal kifejezni. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 29

Relációs algebra és Datalog ---1 Rel.algebrai műveletek hogyan néznek ki Datalogban? Halmazműveletek: T.f.h R(x 1,...,x n ), S(x 1,...,x n ) predikátumokhoz tartozó reláció R(A 1,...,A n ), S(A 1,...,A n ) R S metszetnek megfelelő szabály: Válasz(x 1,...,x n ) R(x 1,...,x n ) AND S(x 1,...,x n ) Kik szeretik az almát is és a körtét is logikai megoldását írjuk át SQL SELECT utasításra! Válasz(N) Szeret(N, alma ) AND Szeret(N, körte ) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 30

Relációs algebra és Datalog ---1 Rel.algebrai műveletek hogyan néznek ki Datalogban? Halmazműveletek: T.f.h R(x 1,...,x n ), S(x 1,...,x n ) predikátumokhoz tartozó reláció R(A 1,...,A n ), S(A 1,...,A n ) R S metszetnek megfelelő szabály: Válasz(x 1,...,x n ) R(x 1,...,x n ) AND S(x 1,...,x n ) R-S különbségnek megfelelő szabály: Válasz(x 1,...,x n ) R(x 1,...,x n ) AND NOT S(x 1,...,x n ) R S unió műveletet egyetlen szabállyal nem tudom felírni, mert a törzsben csak AND lehet, OR nem. Ehhez több szabályból álló Datalog program kell: Válasz(x 1,...,x n ) R(x 1,...,x n ) Válasz(x 1,...,x n ) S(x 1,...,x n ) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 31

Relációs algebra és Datalog ---2 Kiválasztás: x i xj (R) kifejezésnek megfelelő szabály : Válasz(x 1,...,x n ) R(x 1,...,x n ) AND x i x j x i c(e1) kifejezésnek megfelelő szabály: Válasz(x 1,...,x n ) R(x 1,...,x n ) AND x i c Vetítés: A (R) kifejezésnek megfelelő szabály: i1,...,aik Válasz(x,...,x i 1 ik ) R(x 1,...,x n ) Megjegyzés: név nélküli anonymus változók, amelyek csak egyszer szerepelnek és mindegy a nevük azt aláhúzás helyettesítheti. Például: HosszúFilm(c,é) Film(c,é,h,_,_,_) AND h 100 Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 32

Relációs algebra és Datalog ---3 Természetes összekapcsolás: Tegyük fel, hogy R(A 1,...,A n, C 1,, C k ) és S(B 1,...,B m, C 1,, C k ) R S kifejezésnek megfelelő szabály: Válasz(x 1,...,x n,y 1,...,y m, z 1,, z k ) R(x 1,...,x n, z 1,, z k ) AND S(y 1,...,y m, z 1,, z k ) A felírt szabályok biztonságosak. Minden Q relációs algebrai kifejezéshez van nem rekurzív, biztonságos, negációt is tartalmazó Datalog program, amelyben egy kitüntetett IDB predikátumhoz tartozó kifejezés ekvivalens a Q lekérdezéssel. A nem rekurzív, biztonságos, negációt is tartalmazó Datalog kifejezőerő tekintetében EKVIVALENS a relációs algebrával. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 33

Példa Kik szeretik az almát is és a körtét is logikai megoldását írjuk át SQL SELECT utasításra! Válasz(N) Szeret(N, alma ) AND Szeret(N, körte ) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 34

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-9.előadás: Datalog és Rekurzió 35

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-9.előadás: Datalog és Rekurzió 36

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-9.előadás: Datalog és Rekurzió 37

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-9.előadás: Datalog és Rekurzió 38

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-9.előadás: Datalog és Rekurzió 39

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-9.előadás: Datalog és Rekurzió 40 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-9.előadás: Datalog és Rekurzió 41

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-9.előadás: Datalog és Rekurzió 42

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-9.előadás: Datalog és Rekurzió 43

Eljut feladat PL/SQL-ben ---1 Rek1.feladat: Mely (x, y) várospárokra lehet egy vagy több átszállással eljutni x városból y városba? Ehhez hozzuk létre eljut(honnan,hova) táblát, DROP TABLE eljut; CREATE TABLE eljut( honnan VARCHAR2(10), hova VARCHAR2(10)); Írjunk egy olyan PL/SQL programot, ami feltölti az ELJUT táblát a sorait a járatok tábla alapján (ehhez ciklust szervezni, az insert több sor felvitele 2.alakja alkérdéssel járatok és eljut táblák alapján) Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 44

Eljut feladat PL/SQL-ben ---2 Az ELJUT feladat megoldása Oracle PL/SQL-ben A ciklus során ellenőrizni kell, hogy addig hajtsuk végre a ciklust, amíg növekszik az eredmény (Számláló) DECLARE RegiSzamlalo Integer; UjSzamlalo Integer; Deklarációs rész után BEGIN END; között az utasítások, először az eljut táblának kezdeti értéket adunk (a megvalósításnál az INSERT-nél figyelni, hogy ne legyenek ismétlődő sorok: select distinct) delete from eljut; insert into eljut (SELECT distinct honnan, hova FROM jaratok); Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 45

Eljut feladat PL/SQL-ben ---3 Szamlalo változóknak adunk kiindulási értéket: RegiSzamlalo := 0; select count(*) into UjSzamlalo from eljut; A ciklust addig kell végrehajtani, amíg növekszik az eredmény (Szamlalo) duplikátumokra figyelni! LOOP insert into eljut (lásd a köv.oldalon ) select count(*) into UjSzamlalo from eljut; EXIT WHEN UjSzamlalo = RegiSzamlalo; RegiSzamlalo := UjSzamlalo; END LOOP; commit; Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 46

Eljut feladat PL/SQL-ben ---4 Az eljut tábla növelése a ciklusban, figyelni kell a duplikátumokra, csak olyan várospárokat vegyünk az eredményhez, ami még nem volt! insert into eljut (select distinct eljut.honnan, jaratok.hova from eljut, jaratok --- *from (lineáris rekurzió) where eljut.hova = jaratok.honnan and (eljut.honnan,jaratok.hova) NOT IN (select * from eljut)); Megjegyzés: PSM-ben a nem-lineáris rekurzió is megengedett: from eljut e1, eljut e2 ---*from-ban Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 47

Eljut feladat PL/SQL-ben ---5 Rek2.feladat: Mely (x,y) város párokra hány darab átszállással és milyen költségekkel lehetséges egy vagy több átszállással eljutni x városból y városba? Ehhez készítsünk Eljut2(honnan, hova, atszallas, koltseg) táblát. Írjunk egy olyan PL/SQL programot, ami feltölti az ELJUT táblát. Rek3.feladat: 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, ami azt jelenti, hogy ha több járattal utazunk, akkor nézni kell átszálláskor az érkező járatnak legalább egy órával a rákövetkező indulás előtt meg kell érkeznie, és 6 óránál ne kelljen többet várnia. Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 48

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-9.előadás: Datalog és Rekurzió 49

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-9.előadás: Datalog és Rekurzió 50

Oracle megoldások 2.7.lecke Hierarchical Retrieval After completing this lesson, you should be able to do the following: Interpret the concept of a hierarchical query Create a tree-structured report Format hierarchical data Exclude branches from the tree structure Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 51

Sample Data from the EMPLOYEES Table Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 52

(Oracle) Natural Tree Structure MANAGER_ID = 100 (Child) EMPLOYEE_ID = 100 (Parent) King Kochhar De Haan Mourgos Zlotkey Hartstein Whalen Higgins Hunold Rajs Davies Matos Vargas Gietz Ernst Lorentz Abel Taylor Grant Fay Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 53

(Oracle) Hierarchical Queries SELECT [LEVEL], column, expr... FROM table [WHERE condition(s)] [START WITH condition(s)] [CONNECT BY PRIOR condition(s)] ; WHERE condition: expr comparison_operator expr Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 54

(Oracle) Walking the Tree Starting Point Specifies the condition that must be met Accepts any valid condition START WITH column1 = value Using the EMPLOYEES table, start with the employee whose last name is Kochhar....START WITH last_name = 'Kochhar' Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 55

(Oracle) Walking the Tree CONNECT BY PRIOR column1 = column2 Walk from the top down, using the EMPLOYEES table.... CONNECT BY PRIOR employee_id = manager_id Direction Top down Bottom up Column1 = Parent Key Column2 = Child Key Column1 = Child Key Column2 = Parent Key Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 56

(Oracle) Walking the Tree: From the Bottom Up SELECT employee_id, last_name, job_id, manager_id FROM employees START WITH employee_id = 101 CONNECT BY PRIOR manager_id = employee_id ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 57

(Oracle) Walking the Tree: From the Top Down SELECT last_name ' reports to ' PRIOR last_name "Walk Top Down" FROM employees START WITH last_name = 'King' CONNECT BY PRIOR employee_id = manager_id ; Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 58

(Oracle) Ranking Rows with the LEVEL Pseudocolumn Level 1 root/parent King Kochhar De Haan Mourgos Zlotkey Hartstein Whalen Higgins Hunold Rajs Davies Matos Vargas Level 3 parent/child /leaf Fay Gietz Ernst Lorentz Abel Taylor Grant Level 4 leaf Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 59

(Oracle) Formatting Hierarchical Reports Using LEVEL and LPAD Create a report displaying company management levels, beginning with the highest level and indenting each of the following levels. COLUMN org_chart FORMAT A12 SELECT LPAD(last_name, LENGTH(last_name)+(LEVEL*2)-2,'_') AS org_chart FROM employees START WITH last_name='king' CONNECT BY PRIOR employee_id=manager_id Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 60

(Oracle) Pruning Branches Use the WHERE clause to eliminate a node. Use the CONNECT BY clause to eliminate a branch. WHERE last_name!= 'Higgins' CONNECT BY PRIOR employee_id = manager_id AND last_name!= 'Higgins' Kochhar Kochhar Whalen Higgins Whalen Higgins Gietz Gietz Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 61

Kérdés/Válasz Köszönöm a figyelmet! Kérdés/Válasz? Vizsgára ismerni/ismertetni kell az Eljut feladatot és az SQL-99 szabvány WITH RECURSION utasítását, továbbá feladatok lesznek Datalog program átírására SELECT-re WITH RECURSION záradékkal (SQL-99) Házi feladat: Gyakorlás Oracle Példatár 3.fejezete tartalmaz hierarchikus lekérdezésekre feladatokat: http://people.inf.elte.hu/sila/eduab/feladatok.pdf Oracle gépes-megoldások nem lesznek a vizsgán, csak a gyakorlaton próbáljuk ki: az Eljut-feladathoz a Jaratok táblát létrehozó script: create_jaratok_tabla.txt Adatbázisok-1 (Hajas Csilla, ELTE IK) 8-9.előadás: Datalog és Rekurzió 62