Informationssysteme IS-K WS 2001/2002 ¨Ubung 4 Beispiell ¨osung

Werbung
Institut für Informationssysteme
Prof. Dr. H.-J. Schek
F. Akal, K. Jauslin, K. Haller
M. Mlivoncic, M. Schmidt, C. Schuler
Eidgenössische Technische Hochschule Zürich
Swiss Federal Institute of Technology Zurich
Informationssysteme IS-K WS 2001/2002
Übung 4
Beispiellösung
Aufgabe 1: Datalog, Views und Relationale Algebra
Gegeben seien folgende Regeln
ledig(X)
ledig(Y)
verwandt(X,Y)
verwandt(X,Z)
:- mann(X), \+ ehepaar(X,Y).
:- frau(Y), \+ ehepaar(X,Y).
:- verwandt(Y,X).
:- verwandt(X,Y), verwandt(Y,Z).
a) Formulieren Sie obige Regeln über den entsprechenden Relationen durch äquivalente
Ausdrücke der Relationenalgebra
Verwenden Sie dazu die Relationen
Elternteil(Elternteil, Kind)
Frau(Frau)
Mann(Mann)
Ehepaar(Partner1, Partner2)
Geschwister(Geschwister1,Geschwister2)
Ledig(L) := (F rau[L] − π[L]Ehepaar[X, L]) ∪ (M ann[L] − π[L]Ehepaar[L, Y ])
Die Verwandt-Beziehung lässt sich mittels relationaler Algebra nicht ausdrücken, da sie rekursiv de£niert ist. Dazu bräuchten wir einen Fixpunkt-Operator ähnlich wie in Aufgabe 3.
Formulieren Sie die folgenden Anfragen jeweils mittels Datalog-Ausdrücken sowie mittels relationenalgebraischen Ausdrücken.
b) Wer ist der Vater von Cecilia?
1. Datalog:
? − elternteil(X, cecilia), mann(X).
2. Relationenalgebra:
π[V ]σ[K = Cecilia ](Elternteil[V, K] 1 M ann[V ])
c) Wer sind die Schwager von Charly? Formulieren Sie zunächst die Regel für Schwager
in Datalog.
• Datalog:
schwager(X, Y ) : −ehepaar(Y, A), geschwister(A, X), mann(X).
schwager(X, Y ) : −geschwister(Y, A), ehepaar(A, X), mann(X).
? − schwager(X, charly)
1
• Relationale Algebra:
π[X]σ[Y = Charly ](Schwager[X, Y ]) =
π[X]σ[Y = Charly ](Ehepaar[Y, A] 1 Geschwister[A, X] 1 M ann[X]
∪Geschwister[Y, A] 1 Ehepaar[A, X] 1 M ann[X])
Betrachten sie die die Regel:
geschwister(Y,Z) :- elternteil(X,Y), elternteil(X,Z) Y\ ==Z.
d) Welchen logischen Zweck erfüllt der Ausdruck Y\ ==Z ?
Sonst ist man sich selbst Geschwister.
e) Datalog Regeln können nur einen Teil der Wirklichkeit abbilden. Welche zusätzliche
Bedingung muss, laut obiger Regel, für Geschwister in unserem Modell gelten?
Mindestens ein Elternteil muss in der Datenbank gespeichert sein. Durch die closed world
assumption und die De£nition von Geschwister als zwei Fakten mit einem gemeinsamen
Elternteil.
2
Aufgabe 2: Modellierung durch Fakten und Regeln
>
B
?
C
=
@
A
Gegeben sei der dargestellte gerichtete Graph mit 7 Knoten und 8 Kanten.
a) Modellieren Sie den Graphen durch Fakten.
knoten(a)
knoten(e)
kante(a,b)
kante(d,e)
knoten(b)
knoten(f)
kante(a,d)
kante(e,f)
knoten(c)
knoten(g)
kante(c,a)
kante(f,g)
knoten(d)
kante(c,d)
kante(g,e)
b) Geben Sie Regeln an, mit denen abgeleitet werden kann, ob von einem beliebigen Knoten X aus über einen gerichteten Pfad ein anderer Knoten Y erreicht werden kann.
Welches mathematische Konzept wird damit beschrieben?
Wie können diese Ausdrücke mittels relationenalgebraischer Ausdrücke formuliert
werden und wo bestehen hier Schwierigkeiten?
pfad(X,Y) :- kante(X,Y).
pfad(X,Y) :- kante(X,Z), pfad(Z,Y).
Hier wird der transitive Abschluss modelliert. Dieser ist weder mit relationaler Algebra noch
mittels SQL ausdrückbar, da hier keine rekursiven Strukturen existieren. Die Modellierung
von Hüllen ist aber oft praxisrelevant, was die Bedeutung deduktiver Datenbanken durchaus
stärkt. Beispiel für transitive Abschlüsse sind auch die Flugverbindungen aus der Vorlesung.
c) Erweitern sie ihre Lösung für ungerichtete Graphen (mit nur einer zusätzlichen Regel).
Dies ist wie bisher zu realisieren mit einer zusätzlichen Regel:
kante(X,Y) :- kante(Y,X).
Dies führt aber unter Umständen bei der Auswertung zu Problemen, da die Termination nicht
garantiert werden kann.
3
Aufgabe 3: Fixpunkt
Gegeben sei eine relationale Datenbank mit den Relationen
Elternteil (Eltern Nr, Kind Nr)
Person (P Nr, Name, Vorname, Alter, Geschlecht)
Formulieren Sie zu den beiden folgenden rekursiven Anfragen die Fixpunktgleichung der
Relationenalgebra.
a) Gesucht sind alle Personen – Vorfahren Paare, die den gleichen Vornamen tragen. Es
quali£zieren sich also alle Personen, die irgendeinen Vorfahren mit gleichem Vornamen haben.
Zunächst wird der Fixpunkt für alle Vorfahren berechnet:
vorfahr(ENr,KNr) :- elternteil(ENr,KNr).
vorfahr(ENr,KNr) :- elternteil(ENr,Y), vorfahr(Y,KNr).
Danach die Anfrage nach gleichem Namen gestellt:
?- vorfahr(X,Y), person(X, ,VN, , ), person(Y, ,VN, , ).
Das ganze in Relationenalgebra mit H = G(F ) ∪ H
F
F
:= Elternteil[EN r, KN r]
H
:= V orf ahr[EN r, KN r]
G(F
:= F
)
H
F := π[EN r, KN r](H[EN r, Z] 1 F [Z, KN r])
Aus dem durch H = G(F ) ∪ H
F bestimmten Fixpunkt H erhält man schliesslich die
Lösung:
π[EN r, Knr, V orname] H[EN r, KN r] 1 P erson(EN r, EN ame, V orname, EA, EG]
1 P erson(KN r, KN ame, V orname, KA, KG]
4
b) Gesucht sind Vorfahrenreihen, die über eine oder mehrere Generationen in Folge den
gleichen Vornamen getragen haben.
Hier muss die Bedingung für den gleichen Namen in die Rekursion hineingezogen werden.
Zunächst wieder zuerst Datalog:
vorfahrgn(ENr,KNr,VN) :- elternteil(ENr,KNr),
person(ENr, ,VN, , ), person(KNr, ,VN, , ).
vorfahrgn(ENr,KNr,VN) :- elternteil(ENr,Y),
person(ENr, ,VN, , ), vorfahrgn(Y,KNr,VN).
Danach die Anfrage nach gleichem Namen gestellt:
?- vorfahrgn(X,Y,Vorname).
In Relationenalgebra mit H = G(F ) ∪ H
F
:= π[EN r, KN r, V orname](Elternteil[EN r, KN r]
1 P erson(EN r, EN ame, V orname, EA, EG]
1 P erson(KN r, KN ame, V orname, KA, KG])
H
:= V orf ahrGN [EN r, KN r, V orname]
G(F
)
:= F
H
F := π[EN r, KN r, V orname](H[EN r, Z, V orname] 1 F [Z, KN r, V orname])
Aus dem durch H = G(F ) ∪ H
F bestimmten Fixpunkt H erhält man die Lösung:
F
H[EN r, KN r, V orname]
Aufgabe 4: Optimieren der seminaiven Iteration
In der Vorlesung wurde eine Möglichkeit vorgestellt, die seminaive Iteration mittels Datenbanktabellen zu implementieren. Im vorgestellten Script werden die Zwischenergebnisse nach jedem Schritt von der Tabelle new in die Tabelle delta umkopiert. Durch eine alternierende Verwendung dieser zwei Tabellen lässt sich dieses Kopieren vermeiden. Dabei
übernimmt delta die ∆i bei geradem i, die ursprüngliche Tebelle new die ∆i bei ungeradem
i. Modi£zieren Sie das in der Vorlesung besprochene Oracle PL/SQL Script entsprechend
(Um den Überblick zu bewahren, können Sie die Tabellen zu even und odd umbenennen.
Das Original £nden Sie auf der Webseite der Vorlesung http://www.dbs.ethz.ch/isk01/. Testen Sie Ihre Lösung auf Ihrem ISK–Oracle Account.
Durch ein Unroll der Schleife erhält mal die Lösung:
CREATE TABLE FV_even(
von
VARCHAR2(20),
nach VARCHAR2(20)
);
CREATE TABLE FV_odd(
von
VARCHAR2(20),
5
nach
VARCHAR2(20)
);
CREATE OR REPLACE VIEW FV_sn_nrec(von,nach) AS
SELECT abflug,ziel FROM Flug;
CREATE OR REPLACE VIEW FV_sn_rec_even(von,nach) AS
SELECT a.von,b.ziel
FROM FV_even a, Flug b
WHERE a.nach=b.abflug;
CREATE OR REPLACE VIEW FV_sn_rec_odd(von,nach) AS
SELECT a.von,b.ziel
FROM FV_odd a, Flug b
WHERE a.nach=b.abflug;
DECLARE
n INTEGER;
BEGIN
DELETE FROM FlugVerbindung;
DELETE FROM FV_even;
INSERT INTO FV_even SELECT * FROM FV_sn_nrec;
LOOP
INSERT INTO FlugVerbindung SELECT * FROM FV_even;
DELETE FROM FV_odd;
INSERT INTO FV_odd
SELECT * FROM FV_sn_rec_even MINUS SELECT * FROM FlugVerbindung;
SELECT COUNT(*) INTO n FROM FV_odd;
EXIT WHEN n=0;
INSERT INTO FlugVerbindung SELECT * FROM FV_odd;
DELETE FROM FV_even;
INSERT INTO FV_even
SELECT * FROM FV_sn_rec_odd MINUS SELECT * FROM FlugVerbindung;
SELECT COUNT(*) INTO n FROM FV_even;
EXIT WHEN n=0;
END LOOP;
END;
/
show errors;
SELECT * FROM FlugVerbindung;
6
Herunterladen