Prolog als Datenbanksprache - Idee

Ähnliche Dokumente
Grundlagen von Datenbanken

1. Datenbanksprachen Prolog als Datenbanksprache Datenbank-Prolog in Beispielen Selektion und Projektion

Übung 4. Tutorübung zu Grundlagen: Datenbanken (Gruppen Do-T24 / Do-T31 WS 2016/2017)

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

SQL. Ziele. Grundlagen von SQL. Beziehung zur relationalen Algebra SELECT, FROM, WHERE. Joins ORDER BY. Aggregatfunktionen. dbis.

Query Languages (QL) Relationale Abfragesprachen/Relational

GROUP BY, HAVING und Sichten

SQL (=Structured Query Language) ist eine Sprache mit 3 Arten von Befehlen:

Datenbanken Unit 4: Das Relationale Modell & Datenintegrität

Übung 6. Tutorübung zu Grundlagen: Datenbanken (Gruppen Do-T24 / Do-T31 WS 2016/2017)

Die Sprache QUEL. Beispiel für QUEL-Anfrage. Weitere Datenbanksprachen. Anfragen in QUEL. Welche Lieferanten liefern von Weiß bestellte Waren?

Das Relationale Modell

3.4 Die relationale Algebra

[ SQL] Wissen, das sich auszahlt

Grundlagen von SQL. Informatik 2, FS18. Dr. Hermann Lehner (Material von Dr. Markus Dahinden) Departement Informatik, ETH Zürich

5/14/18. Grundlagen von SQL. Grundlagen von SQL. Google, Facebook und Co. setzen auf SQL. Whatsapp

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Grundlagen von Datenbanken. Relationale Algebra und algebraische Optimierung

SQL. strukturierte Datenbankabfragesprache eine Datenbanksprache zur. Structured Query Language:

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Wirtschaftsinformatik 7a: Datenbanken. Hochschule für Wirtschaft und Recht SS 16 Dozent: R. Witte

Wirtschaftsinformatik 7a: Datenbanken. Dozent: R. Witte

Kapitel 4: Relationen-Kalkül

Wiederholung VU Datenmodellierung

SQL. DDL (Data Definition Language) Befehle und DML(Data Manipulation Language)

Relationenkalkül. Prof. Dr. T. Kudraß 1

ISU 1. Ue_08/02_Datenbanken/SQL. 08 Datenbanken. Übung. SQL Einführung. Eckbert Jankowski.

Entwicklungsumgebung für die Übung

Übungen zu Kognitive Systeme I

Wiederholung VU Datenmodellierung

Oracle 10g Einführung

Reihenfolge von Klauseln

Grundlagen von Datenbanken

Fortsetzung: Projektion Selektion. NULL Werte

Entity Relationship Modell

Webbasierte Informationssysteme

Grundlagen von Datenbanken

Software Entwicklung 1

Relationen-Algebra. Prof. Dr. T. Kudraß 1

CADSTAR MRP-Link. MRP-Link ist erstellt von:

Entwicklungsumgebung für die Laborübung

Kapitel 2: Grundlagen von Anfragesprachen

Kapitel DB:V (Fortsetzung)

4. Relationenalgebra. Einleitung. Selektion und Projektion Mengenoperatoren. Verbundoperationen (Join) Division Beispielanfragen

Universität Augsburg, Institut für Informatik WS 2005/2006 Prof. Dr. Werner Kießling 21. Nov M. Endres, A. Huhn, P. Preisinger Lösungsblatt 4

Objektorientierte Datenbanken

Komplexitätstheorie Datenbanken und Deskriptive Komplexität

Kapitel 4: Relationen-Kalkül

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

Kapitel 1: Einführung 1.1 Datenbanken?

Anfragebearbeitung. Logische Optimierung Physische Optimierung (Kostenmodelle Tuning ) Kapitel 8 1

Schemamerging und -mapping

Fragen zum Nachdenken: Wie könnte man das Fehlen eines Attribut-Wertes interpretieren?

TU München, Fakultät für Informatik Lehrstuhl III: Datenbanksysteme Prof. Alfons Kemper, Ph.D.

C++ Anwendungskurs Tag 4: Datenbanken Daniela Horn Institut für Neuroinformatik Real-time Computer Vision

Inhaltsverzeichnis. Lothar Piepmeyer. Grundkurs Datenbanksysteme. Von den Konzepten bis zur Anwendungsentwicklung ISBN:

SQL,Teil 2: SELECT. W. Spiegel. Übersicht SELECT. Mehrfache Werte vermeiden: SELECT DISTINCT. Ausgabe ordnen: ORDER BY. Projektion.

Rückblick: Relationale Normalisierung

Aggregatfunktionen in der Relationenalgebra?

4.5 Anfragen mit Mengenoperatoren

Cut und Negation. Heute: if-then-else. Negation. Programmierkurs Prolog p.1

Datenbanksysteme SS 2007

KLAUSURDECKBLATT Studienhalbjahr: 1. Semester. Datum: 5. März 2015 Bearbeitungszeit: 90 Minuten. Modul: TINF1002 Dozent: Jan Hladik

Entwicklungsumgebung für die Übung

Logik-Grundlagen. Syntax der Prädikatenlogik

Transkript:

Prolog als Datenbanksprache - Idee student Mnr Vorname Name Semester student( 1000, Anna, Arm, ti2 ). student( 1001, ita, eich, ti2 ). student( 1002, Peter, eich, ti2 ). student( 1003, Peter, Petersen, ti2 ). Tupel=Fakt =Datensatz kurs Semester Fach kurs( ti2, Mathe2 ). kurs( ti2, Physik2 ). Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 1 Prolog als Datenbanksprache - elation Prädikat =elation =Prozedur student( 1000, Anna, Arm, ti2 ). student( 1001, ita, eich, ti2 ). student( 1002, Peter, eich, ti2 ). student( 1003, Peter, Petersen, ti2 ). Tupel=Fakt =Datensatz kurs( ti2, Mathe2 ). kurs( ti2, Physik2 ). Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 2 1

Prolog als Datenbanksprache - Syntax Prädikat =elation =Prozedur Konstanten Integer Atom klein oder in student( 1000, Anna, Arm, ti2 ). student( 1001, ita, eich, ti2 ). student( 1002, Peter, eich, ti2 ). student( 1003, Peter, Petersen, ti2 ). Tupel=Fakt =Datensatz Keine Lücke! Goal = Subquery?- student( M, V, _, _ ). Variablen anonyme Variablen Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 3 Antworten durch Variablenbindung Konstanten Integer Atom student( 1000, Anna, Arm, ti2 ).?- student( M, Peter, _, _ ). student( 1002, Peter, eich, ti2 ). student( 1003, Peter, Petersen, ti2 ). Unifikation scheitert Unifikation bindet: M=1002 Anonoyme Variablen _ und _ können verschieden gebunden werden Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 4 2

Select-Project-Join-Queries Query: In welchem Semester S ist Anna Arm, und welche Fächer F muss man in Semester S hören? Goal = Subquery Subquery?- student( _, Anna, Arm, S ), kurs( S, F ). Projektion, Selektion Join Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 5 Join und kartesisches Produkt Query: Wer (ist in welchem Semester S und) muss (deshalb) welche Fächer F hören? Goal = Subquery Subquery?- student( M, V, N, S ), kurs( S, F ). Join Query: Wer könnte welche Fächer F hören??- student( M, V, N, S ), kurs( S2, F ). Kartesisches Produkt Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 6 3

Prologregeln - Syntax egel: Head = egelkopf = View Goal = Subquery Subquery?- pflichten( 1000, _, _, _, F ). Anfrage = Query Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 7 Deklarative Semantik Prolog: Prädikatenlogik pflichten( M, V, N, S, F ) student( M, V, N, S ) kurs( S, F ). falls und elationale Algebra pflichten( M, V, N, S, F ) := student X kurs 4 = 1 SQL Create view Pflichten as select * from student S, kurs K where S. S = K. S Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 8 4

Select-Project-Join-Queries (Übung) 1. Welche Fächer sind im AM geplant? 2. Welche Semester hören eine Veranstaltung im AM? 3. Welche Semester hören Mo14-16 eine Veranstaltung im AM? 4. In welchen äumen muss Anna Arm Fächer hören? 5. Welche weiteren Queries können damit beantwortet werden? Gegeben: % student( Mnr,Vorname, Name, Semester). student( 1000, Anna, Arm, ti2 ). % kurs(semester, Fach). kurs( ti2, Mathe2 ). % plan( Fach, aum, Zeit ). plan( Mathe2, AM, Mo14-16 ). Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 9 egel: Prozedurale Semantik: Datenfluss Head = egelkopf = View Goal = Subquery Subquery?- pflichten( 1000, _, _, _, F ). Variablenbindung für Ein- und Ausgabeparameter Transport der Variablenbindung innerhalb einer egel Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 10 5

Schnitt, Vereinigung, Differenz Gegeben sind: grundkurs(s,f) und kompaktkurs(s,f) Schnitt: kompakte Grundkurse:?- grundkurs(s,f), kompaktkurs(s,f). Als egel: kompaktergrundkurs(s,f) :- grundkurs(s,f), kompaktkurs(s,f). Vereinigung: Grund- oder Kompaktkurse grundoderkompaktkurs(s,f) :- grundkurs(s,f). grundoderkompaktkurs(s,f) :- kompaktkurs(s,f). Differenz: Grundkurse ohne Kompaktkurse gohnekkurs(s,f) :- grundkurs(s,f), \+ kompaktkurs(s,f). Negationsoperator (NOT) Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 11 Negation as failure?- \+ student(1000, Anna, Arm,_). liefert no, weil?- student(1000, Anna, Arm,_). yes liefert.?- \+ student(123, Anna, Arm,_). liefert yes, weil?- student(123, Anna, Arm,_). Fehlschlägt (no liefert). Negation as failure.?- \+ student(m,v,n,s). liefert no, weil?- student(m,v,n,s). Ergebnisse liefert. Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 12 6

Sichere Anfragen(1) Ist Anna Arm mit keiner Mnr als Studentin eingetragen und was ist Ihre Mnr??- \+ student( Mnr, Anna, Arm,_ ). ist unsicher, denn Mnr ist ungebunden. Was ist Mnr? Ist Anna Arm nicht Studentin??- \+ student( _, Anna, Arm,_ ). ist sicher, weil keine ungebundene Variable vorkommt. Unsichere Anfragen sind in den relationalen Kalkülen verboten! In Prolog gibt es ungebundene Variablen (_x123) als Antworten Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 13 Sichere Anfragen(2) Welche Kurse muss Anna Arm nicht hören??- kurs( S, F ), \+ student( _, Anna, Arm,S ). ist sicher, weil die Variable S im negierten Prädikat (\+student()) vorher in einem nicht-negierten Prädikat gebunden wurde. Ist Anna Arm in keinem Semester Studentin und welche Kurse müsste man in diesem Semester hören??- \+ student( _, Anna, Arm,S ), kurs( S, F ). Ist nicht sicher, weil die Variable S im negierten Prädikat (\+student()) noch nicht gebunden ist. In Prolog: eihenfolge beachten! (prozedurale Semantik) Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 14 7

Prozedurale Semantik : 4 Port-Modell?- pflichten( M, V, N, S, F ). C C C C E E E F F F F C=Call E=Exit =edo F=Fail Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 15 Prozedurale Semantik : 4 Port-Modell?- pflichten( M, V, N, S, F ).?- pflichten( M, V, N, S, F ) C C?- student( M, V, N, S ) C?- kurs( ti2, F ) C E E E 1000, Anna, Arm, ti2 1007, Nobi, Neu, ti7 ti2, Mathe2 ti2, Physik2 F F F F M=1000, V= Anna, N= Arm, S= ti2 F= Mathe2 C=Call E=Exit =edo F=Fail Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 16 8

Prozedurale Semantik : 4 Port-Modell?- pflichten( M, V, N, S, F ).?- pflichten( M, V, N, S, F ) C C?- student( M, V, N, S ) C?- kurs( ti2, F ) C E E E 1000, Anna, Arm, ti2 1007, Nobi, Neu, ti7 ti2, Mathe2 ti2, Physik2 F F F F M=1000, V= Anna, N= Arm, S= ti2 F= Physik2 C=Call E=Exit =edo F=Fail Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 17 Prozedurale Semantik : 4 Port-Modell?- pflichten( M, V, N, S, F ).?- pflichten( M, V, N, S, F ) C C?- student( M, V, N, S ) C?- kurs( ti7, F ) C E E E 1000, Anna, Arm, ti2 1007, Nobi, Neu, ti7 F F F F C=Call E=Exit =edo F=Fail Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 18 9

Prozedurale Semantik : 4 Port-Modell?- pflichten( M, V, N, S, F ).?- pflichten( M, V, N, S, F ) C C?- student( M, V, N, S ) C?- kurs( ti7, F ) C E E E 1000, Anna, Arm, ti2 1007, Nobi, Neu, ti7 ti7, pdv2 F F F F M=1000, V= Nobi, N= Neu, S= ti7 F= pdv2 C=Call E=Exit =edo F=Fail Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 19 Prozedurale Semantik : 4 Port-Modell?- pflichten( M, V, N, S, F ).?- pflichten( M, V, N, S, F ) C C C C E E E F F F F no (more answers) C=Call E=Exit =edo F=Fail Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 20 10

void pflichten( M, V, N, S, F ) { // call-port von Student AS = student. liesalle( M, V, N, S ) ; while ( student(m,v,n,s) = AS. next( ) ) { // exit-port von Student und call-port von Kurs AK = kurs. liesalle( S, F ) ; while ( kurs(s,f) = AK. next( ) ) { // exit-port von Kurs und call-port von Ausgabe Ausgabe( M, V, N, S, F ) ; // fail-port von Ausgabe und redo-port von Kurs } // fail-port von Kurs und redo-port von Student } // fail-port von Student } Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 21 Cut im 4 Port-Modell pflichten( M, V, N, S, F ) :- student( M, V, N, S ),!, kurs( S, F ).?- pflichten( M, V, N, S, F ). C C C C C E E E E! F F F F F Cut verlässt auf dem ückweg die Prozedur-Aufruf-Box (=return) C=Call E=Exit =edo F=Fail Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 22 11

Jede Lösung nur einmal sehen Beispiel: Welche Studenten hören mehrere Kurse? Test-Implementierung : hörtmehrerekurse( M ) :- hört( M, K1 ), hört( M, K2 ), \+ K1=K2,!. 0 oder 1 Antwort pro M wegen Cut am Ende Generate-And-Test-egel : studenthörtmehrerekurse( M, V, N, S ) :- student( M, V, N, S ), hörtmehrerekurse( M ). Generator Test (generiert jeden Student genau 1x) ( wählt oder wählt nicht ) Anfrage:?- studenthörtmehrerekurse( M, V, N, S ). Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 23 x (p(x)) ersetzen durch not x (not p(x)) Beispiel: Welche Studenten hören alle für ti2 angebotenen Kurse? { (M,V,N,S) Student ( ti2,f) Kurs ( hört(m,f) ) } { (M,V,N,S) Student not ( ti2,f) Kurs ( not hört(m,f) ) } Generate-And-Test-egel : studenthörtalleti2kurse( M, V, N, S ) :- student( M, V, N, S ), \+ hörtmindestens1ti2kursnicht( M ). Generator Test (generiert jeden Student genau 1x) ( wählt oder wählt nicht ) Test-Implementierung : hörtmindestens1ti2kursnicht( M ) :- kurs( ti2, K ), \+ hört( M, K ),!. Anfrage:?- studenthörtalleti2kurse( M, V, N, S ). Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 24 12

All-quantifizierte Queries (Übung) 1. Welche Studenten hören mindestens einen Kurs nicht? 2. Welche Studenten hören alle Kurse? 3. Welche Kurse werden von mindestens einem Student nicht gehört? 4. Welche ti2 -Kurse werden von allen Studenten gehört? 5. Welche Kurse werden von allen ti2 -Studenten gehört? 6. Welche weiteren Queries können damit beantwortet werden? Gegeben: % student( Mnr,Vorname, Name, Semester). student( 1000, Anna, Arm, ti2 ). % hört( Mnr, Fach ). hört( 1000, Mathe2 ). % kurs( Semester, Fach ). kurs( ti2, Mathe2 ). Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 25 Maximum ersetzen durch alle Beispiel: Welcher Student hat die größte Matrikelnummer? { (M,V,N,S) Student M = max( { M2 (M2,V2,N2,S2) Student } ) } { (M,V,N,S) Student (M2,V2,N2,S2) Student ( M M2 ) } { (M,V,N,S) Student not (M2,V2,N2,S2) Student ( M < M2) } Generate-And-Test-egel : studenthatgrößtematrikelnummer( M, V, N, S ) :- student( M, V, N, S ), \+ jemandhatgrößerematrikelnummerals( M ). Generator Test (generiert jeden Student genau 1x) ( wählt oder wählt nicht ) Test-Implementierung : jemandhatgrößerematrikelnummerals ( M ) :- student(m2, _, _, _), M2 > M. Anfrage:?- studenthatgrößtematrikelnummer( M, V, N, S ). Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 26 13

1. Fenster (Editor) für Datenbank Das Prolog-System Editor student( 1000, Anna, Arm, ti2 ). Fakten und egeln!! pflichten( M, V, N, S, F ) :-. aufgabe1( X ) :-. aufgabe2( Y, Z ) :-. 2. Fenster (Prolog) für Compiler-Anweisungen und Queries DOS_Pfad> bp_w95c uebung1.pl?- [uebung1].?- aufgabe1( X ).?- aufgabe2( Y, Z ). Datenbanken und Informationssysteme 1 - WS 2004 / 05 - Prof. Dr. Böttcher - S. Prolog / 27 14