Prolog als Datenbanksprache - Syntax Prädikat =Relation =Prozedur student( student( student( student( Konstanten Integer 1000 1001 1002 1003 , , , , ‘Anna‘ ‘Rita‘ ‘Peter‘ ‘Peter‘ klein oder in ‘ ‘ Atom , ‘Arm‘ , ‘ti2‘ , ‘Reich‘ , ‘ti2‘ , ‘Reich‘ , ‘ti2‘ , ‘Petersen‘ , ‘ti2‘ ). ). ). ). Tupel=Fakt =Datensatz Goal = Subquery Keine Lücke ! ?- student( M, V, _, _ ) . Variablen anonyme Variablen Datenbanken und Informationssysteme 1 - WS 2002 / 03 - Prof. Dr. Böttcher - S. Prolog / 1 Antworten durch Variablenbindung Konstanten Integer Atom student( 1000 , ‘Anna‘ , ‘Arm‘ , ?- student( M , ‘Peter‘ , _ ‘ti2‘ ) . , _ Unifikation scheitert ) . student( 1002 , ‘Peter‘ , ‘Reich‘ , ‘ti2‘ ) . student( 1003 , ‘Peter‘ , ‘Petersen‘ , ‘ti2‘ ) . Unifikation bindet: M=1002 … Anonoyme Variablen _ und _ können verschieden gebunden werden Datenbanken und Informationssysteme 1 - WS 2002 / 03 - Prof. Dr. Böttcher - S. Prolog / 2 Prolog als Datenbanksprache - Syntax Regel: Head = Regelkopf = View Goal = Subquery Subquery pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . ?- pflichten( 1000 , _ , _ , _ , F ) . Anfrage = Query Datenbanken und Informationssysteme 1 - WS 2002 / 03 - Prof. Dr. Böttcher - S. Prolog / 3 Prolog als Datenbanksprache - Syntax Regel: Head = Regelkopf = View Goal = Subquery Subquery pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . ?- pflichten( 1000 , _ , _ , _ , F ) . Variablenbindung für Ein- und Ausgabeparameter Transport der Variablenbindung innerhalb einer Regel Datenbanken und Informationssysteme 1 - WS 2002 / 03 - Prof. Dr. Böttcher - S. Prolog / 4 Deklarative und prozedurale Semantik Prolog: pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . Prädikatenlogik pflichten( M, V, N, S, F ) <= student( M, V, N, S ) Λ kurs( S, F ) . falls und Relationale 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 2002 / 03 - Prof. Dr. Böttcher - S. Prolog / 5 Prozedurale Semantik : 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 F C E E E R R R F C=Call C F E=Exit R=Redo Datenbanken und Informationssysteme 1 F F=Fail - WS 2002 / 03 - Prof. Dr. Böttcher - S. Prolog / 6 pflichten( M, V, N, S, F ) :- student( M, V, N, S ) , kurs( S, F ) . void pflichten( M, V, N, S, F ) { // call-Port von Student AS = student . liesAlle( M, V, N, S ) ; while ( Student1 = AS. next( ) ) { // exit-Port von Student und call-Port von Kurs AK = kurs . liesAlle( S, F ) ; while ( Kurs1 = 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 2002 / 03 - Prof. Dr. Böttcher - S. Prolog / 7