Adatbázis-technológia 8. előadás Deduktív adatbázisok
Az előadás célja megmutatni a navigációs és deklaratív lekérdezés közötti különbséget; bemutatni a logikai adatbázisok kialakulásának indokait; bemutatni a logikai programozás és a Prolog nyelv legfontosabb tulajdonságait; ismertetni a deduktív adatbázisok felépítését; vázolni az új ismeretek előállításának módját deklaratív adatbázisokban.
Az előadás vázlata Logikai programozás és logikai adatbázisok. Deduktív adatbázisok. Deduktív adatbázisok felépítése. Szabályok értelmezése.
Eredet és háttér Az 1980-as évek alatt alakultak ki a relációs adatbá-zisok és a logikai programozás kapcsolatából. Cél: relációs lekérdező nyelvek továbbfejlesztése; rekurzív lekérdezések kezelése. Elméleti háttér: logikai programozás; relációs adatbázisok; automatizált tételbizonyítás; matematikai logika.
Lekérdezések típusai Navigációs lekérdezés: a lekérdezés explicit módon leírja, hogy a lekérdezés szempontjából fontos adatok milyen úton érhetők el. Deklaratív lekérdezés: a lekérdezés azt írja le, hogy milyen feltételekkel rendelkező adatokra van szükség. Deklaratív nyelv: szigorú szemantikai szabályok-kal rendelkező nyelv deklaratív lekérdezések definiálására.
Deklaratív nyelvek A logikai programozás legelterjedtebb nyelve a Prolog, amely a deduktív adatbázisok kialakításá-nak is alapja volt. A Prolog nyelv része a Datalog, amely szabályok deklaratív megfogalmazására használható egy létező relációhalmazon. Bár a Datalog nyelvi szerkezete megfelel a Prolognak, működésének módja nyitott.
Megjegyzés Az előadásban a Prolog szerkezetét és jelölés-rendszerét fogjuk használni. Az előadás példái a Prolog keretén belül maradnak, így min-denki kipróbálhatja valamilyen Prolog implementációval.
Logikai adatbázisok Logikai adatbázisokban az adatok logikai formulákkal vannak leírva. A logikai formulák gyakran az elsőrendű logika egy korlátozott részhalmazát képezik. A logikai formulák a valós világnak az adatbázis-alkalmazással kapcsolatban lévő részét írják le, azaz a valós világ logikai reprezentációját adják. A logikai adatbázisok szemantikája a matematikai logikán alapszik.
Deduktív adatbázisok Nincs pontos definíciójuk. Szűkebb értelemben egy deduktív adatbázis olyan elsőrendű logikai adatbázis, amely speciális for-májú állításokból áll és a levezetésen (dedukción) alapszik. Tágabb értelemben minden logikai adatbázis tekinthető deduktív adatbázisnak.
Deduktív adatbázisok kialakulása Az első logikai adatbázisok tulajdonképpen logikai programok voltak, amelyeket integritási feltételek-kel egészítettek ki. Később kiderült, hogy az adatbázisok részéről továb-bi követelmények fogalmazhatók meg: összetett objektumok kezelése; relációk összesítése; nem teljes és inkonzisztens információk kezelése.
Deduktív adatbázisok létrehozása Egy logikai nyelv bővítése adatbázis-szolgáltatá-sokkal, úgymint az adatelérés szabályozása, tranzakció-kezelés, adatbázis-frissítési szabályok. Ezzel lehetővé válik az adatbázisokra jellemző többfelhasználós környezet és a nagy adathalmaz. Hagyományos adatbázis-rendszerek kiegészítése logikai nyelvi konstrukciókkal - például egy ma-gas szintű szabályspecifikációs nyelvvel, - vagy egy olyan logikai nyelvvel, amely az adadefiniálás és -kezelés funkcióit is szolgáltatja.
Deduktív adatbázis felépítése intenzionális adatbázis Szabályok extenzionális adatbázis Tények
Tények A tényeket hasonlóképpen írjuk le, mint a reláció-kat, azzal a különbséggel, hogy a tulajdonság-típusoknak nem kell feltétlenül nevet adni. Egy tény egy olyan reláció-előfordulás, ahol a tulajdonság-előfordulások vannak felsorolva. Deduktív adatbázisban a tulajdonság-előfordulá-sok sorrendje kötött. A tulajdonságtípust a sorrendben elfoglalt helye azonosítja.
Szabályok A szabályok a relációs nézetekhez hasonlíthatók. Virtuális relációkat definiálnak, amelyek eredeti-leg nincsenek az adatbázisban, de a tényekből le-vezethetők egy következtetési mechanizmus alap-ján. A fő különbség a nézetek és a szabályok között, hogy a szabályok tartalmazhatnak rekurziót, ame-lyet a szokásos relációs nézetekkel nem lehet defi-niálni. A szabályokkal új ismereteket lehet előállítani.
Prolog jelölés Prologban a tények és szabályok kifejezésére egyedi elnevezésű predikátumokat használunk. Egy predikátumnak sajátos jelentése van, amelyet a neve hordoz, és rögzített számú argumentuma. Ha az összes argumentum konstans, a predikátum egy tényt fejez ki. Ha egy vagy több argumentum változó, akkor a predikátum lehet lekérdezés; szabály része; feltétel.
A példa A deduktív adatbázisok-ról és a logikai progra-mozásról szóló iroda-lom szinte csak két példát ismer. Az egyik a szervezeti hi-erarchia, a másik a ro-koni kapcsolatok leírá-sa. Mi az utóbbit választjuk.
1. részlet a példából szem(m001,”Molnár Ferenc”,1905,f). Az m001 azonosítójú személy neve Molnár Ferenc, 1905-ben született és férfi. szem(t001,”Tóth Ildikó”,1907,n). A t001 azonosítójú személy neve Tóth Ildikó, 1907-ben született és nő. szem(m002,”Molnár Mihály”,1938,f). szem(m003,”Molnár Sándor”,1931,f). szem(m004,”Molnár Lilla”,1935,n).
2. részlet a példából gyereke(m001,m002). Az m001 azonosítójú személy (Molnár Ferenc) gye-reke az m002 azonosítójú személy (Molnár Mihály). gyereke(m001,m003). gyereke(m001,m004). gyereke(t001,m002). gyereke(t001,m003). gyereke(t001,m004). Molnár Ferenc és Tóth Ildikó gyerekeinek, azaz a Molnár családnak a definiálása
Szabályok definiálása Egy szabály alakja: fej:- törzs. ahol a fej egyetlen predikátum, amelyet gyakran a szabály következményének neveznek; a törzs egy vagy több, egymástól vesszővel elválasztott predikátum, amelyet a szabály premisszáinak nevezünk. A szabály azt fogalmazza meg, hogy mindazon ese-tekre, amelyekre a törzs minden premisszája igaz, a következmény is igaz.
Megjegyzés A törzsben szereplő pre-dikátumokat a logikai “és” művelet kapcsolja össze. Egy predikátum több sza-bály fejében szerepel-het. Két (vagy több) azonos fejű szabály törzsei között a logikai “vagy” művelet érvényes.
3. részlet a példából apja(X,Y):-gyereke(Y,X),szem(Y,_,_,f). Az “apja” kapcsolat (X apja Y) definiálása két személy között. X,Y két változó. Prologban a változók nagybetűvel, a szimbólumok kis-betűvel kezdődnek. Szimbólumban nem lehet szóköz. Az aláhúzás ( _ ) karakter a szabály megfogalma-zásában érdektelen argumentumok helyén szere-pel. anyja(X,Y):-gyereke(Y,X),szem(Y,_,_,n).
Beépített predikátumok A Prolog számos beépített predikátumot tartalmaz, amelyek implementációnként változnak. Minden Prolog implementáció tartalmazza az összehasonlító operátorokat (=, <, <=, >, >=, <>). =(X,Y) helyett X=Y írható. A Prologban az aritmetikai műveletek (+, -, *, /) predikátumok argumentumaiban használhatók. Datalogban ez nem megengedett; ez a legjelentősebb különbség a prolog és a Datalog között.
4. részlet a példából utodja(X,Y):-gyereke(X,Y). utodja(X,Y):-gyereke(X,Z),utodja(Z,Y). Az “utódja” kapcsolat (X utódja Y) definiálásakor kettő szabályt fogalmazunk meg: egy személy gyereke egyben az utódja; egy személy gyerekének az utódja a személynek is utódja. A második szabály példa rekurzív kapcsolatra is.
Lekérdezések A lekérdezés egy predikátum egy vagy több változóval. A lekérdezés eredménye azok az igaz predikátu-mok, ahol a lekérdezésben szereplő argumentu-mok konstansok, és a konstansok minden lehetsé-ges kombinációja előfordul.
Példák lekérdezésekre utodja(m001,X)? m001 (Molnár Ferenc) utódjai. utodja(X,k004)? Kiknek az utódja k004 (Kovács Izabella) - azaz, kik az elődei. apja(k004,X),szem(X,Y,_,_)? Ki az apja k004-nek, és az apja nevére is kíváncsiak vagyunk.
Szabályok értelmezése I. Bizonyításelméleti értelmezés: az adatbázis n-esei tények; a szabályok axiómák, amelyek alapján az ismert tényekből újabb tényeket állíthatunk elő; minden új tény csak úgy állítható elő, hogy a jobb oldalon adott vagy bizonyított tényekkel helyette-sítünk és a bal oldalon lesz az új tény; ez csak akkor igaz, ha nincs tagadás a szabályokban vagy a tényekben; a tagadások nemvárt eredkményeket adhatnak.
Bizonyításelméleti értelmezés 1. utodja(X,Y):-gyereke(X,Y). (1. szabály) 2. utodja(X,Y):-gyereke(X,Z),utodja(Z,Y). (2. szabály) 3. gyereke(m004,s004). (axióma, adott) 4. gyereke(m001,m004). (axióma, adott) 5. utodja(m004,s004). (1. szabály alkalmazása 3-ra) 6. utodja(m001,s004):- gyereke(m001,m004), utodja(m004,s004). (2. szabály alkalmazása 4-re és 5-re)
Szabályok értelmezése II. Modellelméleti értelmezés: a szabályok lehetséges világokat definiálnak; az adatbázis egy predikátum igaz előfordulásai ugyanazzal a névvel mint a tábláé; az adatbázis egy értéktartománynak csak egyes értékeit tartalmazza, nem az összes előfordulást; egy modell igaz hozzárendelések halmaza (azaz egy értelmezés) amely az összes szabályt igazzá teszi attól függetlenül, hogy hogyan rendeljük hozzá az értékeket a változókhoz.
Szabályok kiértékelése I. A Prolog a szabályokat visszafelé láncolással (backward chaining) értékeli. Ez egy felülről-lefelé-haladó (top-down) megkö-zelítés, amely a szabályokból kiindulva halad a tárolt tények felé. A szabály-törzs minden predikátumát ellenőrzi úgy, hogy párosításokat keres a lekérdezés válto-zói és a más szabályoból származó tények között. Ez a módszer nem igazán jó nagyméretű adatbázi-sok esetén.
Szabályok kiértékelése II. A másik megközelítés az előre láncolás (forward chaining) amely egy alulról-felfelé-haladó (bottom-up) módszer. A szabályok alkalmazásával a létező tényekből új tényeket állít elő. Minden új tényt ellenőriz, hogy megfelel a célnak. A módszer fő hátránya, hogy az adatbázis összes következtetését előállítja, amelyek közül a legtöbb nem felel meg a célnak, hacsak nem adunk vala-milyen módszert arra, hogy csak a lekérdezés szempontjából fontos tényeket állítsa elő.