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

Hasonló dokumentumok
Datalog: logikai alapú lekérdezı nyelv

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

Datalog: logikai alapú lekérdezı nyelv

Rekurzió a Datalogban és az SQL3-ban

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

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

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

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

SQL/PSM kurzorok rész

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

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

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

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

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

5.3. Logika a relációkhoz

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

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

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

Tankönyv példák kidolgozása

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

Bevezetés: az SQL-be

Bevezetés: Relációs adatmodell

Adatbázisok-1 előadás

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

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

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

SQL DDL-2 (aktív elemek) triggerek

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

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

Az SQL adatbázisnyelv: DML

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

Bevezetés: Relációs adatmodell

SQL/PSM tárolt modulok rész

Relációs algebra 1.rész

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

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

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

Relációs algebra 2.rész

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: Táblák, megszorítások (constraints), triggerek, nézettáblák

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

Az adatbázisrendszerek világa

On The Number Of Slim Semimodular Lattices

BGF. 4. Mi tartozik az adatmodellek szerkezeti elemei

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

Bevezetés: Relációs adatmodell

Relációs adatbázisok tervezése ---2

Több táblára vonatkozó lekérdezések Relációs algebra és SQL SELECT

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

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

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

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

INDEXSTRUKTÚRÁK III.

Sor és oszlopkalkulus

Adatbázis használat I. 2. gyakorlat

ACTA ACADEMIAE PAEDAGOGICAE AGRIENSIS

Mapping Sequencing Reads to a Reference Genome

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

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

Példák átírásokra: Relációs algebrai kifejezések, a kiértékelı fák átírása SQL lekérdezésekre

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

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

Bevezetés: Relációs adatmodell

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

Using the CW-Net in a user defined IP network

Construction of a cube given with its centre and a sideline

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

TSIMMIS egy lekérdezés centrikus megközelítés. TSIMMIS célok, technikák, megoldások TSIMMIS korlátai További lehetségek

Széchenyi István Egyetem

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

Lekérdezések optimalizálása

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

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

Cloud computing. Cloud computing. Dr. Bakonyi Péter.

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

Cloud computing Dr. Bakonyi Péter.

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

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

Word and Polygon List for Obtuse Triangular Billiards II

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

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

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

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

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

Miskolci Egyetem Gazdaságtudományi Kar Üzleti Információgazdálkodási és Módszertani Intézet Factor Analysis

Dependency preservation

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.

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

Angol Középfokú Nyelvvizsgázók Bibliája: Nyelvtani összefoglalás, 30 kidolgozott szóbeli tétel, esszé és minta levelek + rendhagyó igék jelentéssel

Komputeralgebra Rendszerek

Csima Judit április 9.

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

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

ABR ( Adatbázisrendszerek) 1. Előadás : Műveletek a relációs medellben

Adatbázisrendszerek Tervezése Közgazdászoknak Munkapéldány

ANGOL NYELV Helyi tanterv

ADATBÁZISOK I. Az esetleges hibákat kérlek a csongor@csongorbokay.com címen jelezd! Utolsó módosítás: március 20.

Statistical Dependence

Adatok szűrése, rendezése

Adatbázis, adatbázis-kezelő

Átírás:

Logikai lekérdezı nyelv: Datalog Rekurzió a Datalogban és az SQL-ben Tankönyv: Ullman-Widom: Adatbázisrendszerek Alapvetés Második, átdolgozott kiadás, Panem, 2009 5.3. Logika a relációkhoz: Datalog 5.4. Relációs algebra és nem-rekurzív biztonságos Datalog kifejező erejének összehasonlítása 10.2. Az Eljut-feladat megoldása: (monoton és lineáris) rekurzió a Datalogban és az SQL-ben: with recursion 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 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. Ez a nyelv: a Datalog (Tankönyv 5.3-5.4) Rekurzió (Tankönyv 10.2) 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 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) 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 4

Logika, mint lekérdezı nyelv Abstract Query Languages: Relational Algebra (procedural optimization) Logical QL: Datalog, Rel.Calculus (declarative) Datalog = Data - Database, log - logic,prolog Logikai alapú nyelv, szabály alapú nyelv. If-then logical rules have been used in many systems. Nonrecursive rules are equivalent to the core relational algebra. Recursive rules extend relational algebra and appear in SQL-99. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 5

Datalog szabályok és lekérdezések Datalog: logikai alapú, 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 az output tábla sorait eredményezze Our first example of a rule uses the relations Frequents(drinker, bar), Likes(drinker, beer), Sells(bar, beer, price). The rule is a query asking for happy drinkers --- those that frequent a bar that serves a beer that they like. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 6

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 7

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 8

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 ) 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 9

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 10

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 11

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 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 12

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 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 13

Milyen problémák merülnek fel? (erre visszatérünk a biztonságosságnál) Relations are finite sets. We want rule evaluations to be finite and lead to finite results. Unsafe rules like P(x) Q(y) have infinite results, even if Q is finite. Even P(x) Q(x) requires examining an infinity of x-values. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 14

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 15

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 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 16

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) 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 17

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 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 18

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 19

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 20

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 21

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 22

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) 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 23

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 24

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 25

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 26

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 ) 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 27

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 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 28

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 29

Kérdés/Válasz --- 1 Kérdés/Válasz? Gyakorlás: Tk. Termékek és Csatahajók feladatainak megoldásában szereplő relációs algebrai kifejezések átírása Datalog programokká és SQL SELECT-re. Házi feladat: Oracle Példatár 3.fejezet feladatai, összekapcsolások és alkérdések használatával: http://people.inf.elte.hu/sila/eduab/feladatok.pdf Következik: Rekurzió Datalogban és SQL SELECT-ben WITH RECURSION záradék 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 30

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: 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 31

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 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 32

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. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 33

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 ; 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 34

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> 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 35

Egy másik példa rekurzióra EDB: Par(c,p) = p is a parent of c. Generalized cousins: people with common ancestors one or more generations back: Sib(x,y) Cousin(x,y) Sib(x,y) Par(x,p) AND Par(y,p) AND x<>y Cousin(x,y) Par(x,xp) AND Par(y,yp) AND Cousin(xp,yp) Feladat: Datalog program átírása SQL-99 szabvány SELECT utasításra WITH RECURSIVE záradékkal: 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 36

Példa: átírás rekurzív lekérdezésre ---1 Find Sally s cousins, using SQL like the recursive Datalog example. Par(child,parent) is the EDB. Megoldás (két oldalon fért el) WITH Sib(x,y) AS --- ez itt az (1) SELECT p1.child x, p2.child y FROM Par p1, Par p2 WHERE p1.parent = p2.parent AND p1.child <> p2.child; Like Sib(x,y) Par(x,p) AND Par(y,p) AND x <> y RECURSIVE Cousin(x,y) AS --- itt jön a (2) --- SELECT köv.oldalon SELECT y FROM Cousin WHERE x = Sally ; 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 37

Példa: átírás rekurzív lekérdezésre ---2 WITH Sib(x,y) AS --- előző oldalon (1) RECURSIVE Cousin(x,y) AS (SELECT * FROM Sib) UNION Required Cousin is recursive (SELECT p1.child x, p2.child y FROM Par p1, Par p2, Cousin WHERE p1.parent = Cousin.x AND p2.parent = Cousin.y) Reflects Cousin(x,y) Sib(x,y) Reflects Cousin(x,y) Par(x,xp) AND Par(y,yp) AND Cousin(xp,yp) SELECT y FROM Cousin WHERE x = Sally ; 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 38

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 gépes-megoldásait is megnézzük, ami nem lesz majd vizsgán, csak a gyakorlaton próbáljuk ki. 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 39

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; 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 40

Oracle megoldások: connect by Oracle sokkal korábban bevezette a hierarchikus lekérdezéseket, és ezt bővítette ki a rekurzióra is: SELECT DISTINCT hova FROM jaratok WHERE HOVA <> 'DAL' START WITH honnan = 'DAL' CONNECT BY NOCYCLE PRIOR hova = honnan; Oracle-ben további hasznos függvények is használhatók: 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; 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 41

Kérdés/Válasz Köszönöm a figyelmet! Kérdés/Válasz? Vizsgára csak az Eljut feladatot kell ismerni és az SQL-99 szabvány WITH RECURSION utasítását, de csak papíron. Feladat: Datalog program átírása 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 06ea_Datalog // Adatbázisok-1 elıadás // Ullman-Widom (Stanford) tananyaga alapján // Hajas Csilla (ELTE IK) 42