Datenbanksysteme I - Institut für Informatik - Uni

Werbung
Universität Augsburg, Institut für Informatik
Dr. W.-T. Balke
M. Endres, A. Huhn, T. Preisinger
WS 2006/2007
18. Dez. 2006
Lösungsblatt 8
Datenbanksysteme I
Aufgabe 1: Rekursion mit JDBC
import java.sql.*;
public class Ancestor
{
private String USER="USER";
private String PWD="PWD";
private String URL="jdbc:oracle:thin:"
+"@info-dbis-srv1.informatik.uni-augsburg.de:1521:dbs1";
private Connection con;
private Statement stmt;
// Datenbanktreiber registrieren
static {
try {
DriverManager.registerDriver(
new oracle.jdbc.driver.OracleDriver());
} catch (SQLException e) {
System.out.println("Unable to register JDBC driver: "
+ e.getMessage());
}
}
// Verbindung zur Datenbank aufbauen
public void connect() {
try {
con = DriverManager.getConnection(URL,USER,PWD);
} catch (SQLException e) {
System.out.println("Unable to connect to database: "
+ e.getMessage());
}
}
// Beziehung zwischen Vor- und Nachfahre bestimmen
public void r() {
try {
// Fuege die Eltern-Kind-Beziehungen in Ancestor ein
stmt = con.createStatement();
stmt.executeUpdate("INSERT INTO Ancestor "
+ "(SELECT * FROM Parent)");
ResultSet rs;
1
// Berechne iterativ Vorfahren der naechsten
// Generation und speichere die
// neu hinzugekommenen in der Tabelle Ancestor
while(true) {
int vorher, nachher;
rs = stmt.executeQuery("SELECT count(*) "
+ "FROM Ancestor");
rs.next();
vorher = rs.getInt(1);
stmt.executeUpdate("INSERT INTO Ancestor ( " +
"SELECT a.anc, b.des FROM Ancestor a, Ancestor b "
+ "WHERE a.des = b.anc "
+ "MINUS (SELECT * FROM Ancestor))");
rs = stmt.executeQuery("SELECT count(*) "
+ "FROM Ancestor");
rs.next();
nachher = rs.getInt(1);
System.out.println(vorher);
System.out.println(nachher);
if(vorher==nachher) break;
}
// Aufraeumen
rs.close();
con.close();
} catch (SQLException e) {
// Fehler ausgeben
System.out.println("error: " + e.getMessage());
}
}
// main Methode
public static void main(String [] args) {
Ancestor ancestor = new Ancestor();
ancestor.connect();
ancestor.r();
}
}
Aufgabe 2: Vertauschung von Selektion und Natural Join
Zu zeigen war:
σr ∧ s (R ./ S) = σr (R) ./ σs (S)
Beweis:
σr∧s (R ./ S) = σr (σs (R ./ S)) = σr (R ./ σs (S)) = σr (R) ./ σs (S)
2
Aufgabe 3: Algebraische Query-Optimierung
Gegeben seien folgende Relationen:
R (a, b)
S (b, c, d)
T (a, c, e)
U (c, f)
Dabei entsprechen sich Attribute mit dem gleichen Buchstaben.
Optimieren Sie die folgenden Anfragen. Stellen Sie dazu den Ausgangs-Baum und den optimierten
Baum dar. Beschreiben Sie Ihr Vorgehen und gehen Sie auf Besonderheiten der Anfragen ein.
a) πa,d,e (σb<10 (T ./ σa>c (R ./ S)))
Augsgangsbaum
πa,d,e
optimierter Baum
πa,d,e
σb<10
./a,c
./a,c
t
t
DD
DD
DD
D
£
££
£
££
££
££
£
£
GG
GG
GG
G
σa>c
σa>c
r
y
yy
yy
y
y
(πa,c,d )
./b=
==
==
=
v
vv
vv
v
v
s
σb<10
./b H
HH
HH
HH
σb<10
r
s
Die Selektion b < 10 ist jeweils auf R und S anwendbar und wird deshalb ganz nach unten
geschoben. Nach dem Join auf R und S wird das Attribut b nicht mehr benötigt und deshalb
über eine zusätzliche Projektion eliminiert.
b) πa,b,f (σa=10 ∨ f =5 (R ./ (U ./ (T ./ S))))
3
Augsgangsbaum
πa,b,f
optimierter Baum
σa=10 ∨ f =5
σa=10 ∨ f =5
./a,b
R
v
vv
vv
v
vv
U
II
II
II
II
uu
uu
u
u
uu
./a,b
R
vv
vv
v
v
vv
πa,b,f
./c;
;;
;;
;
./c8
T
U
88
88
8
¤¤
¤¤
¤
¤
KKK
KKK
KK
r
rr
rr
r
r
rr
./c A
AA
AA
A
./c<
~~
~~
~
~
πa,c
S
<<
<<
<
πb,c
T
S
Die Selektion bezieht sich auf a, welches in R und T auftaucht. f ist nur in U zu finden, kann
aber wegen der Oder-Verknüpfung nicht nach unten verschoben werden. Die Attribute d und
e sind ohne Bedeutung und können deshalb ’ausgeblendet’ werden. Sobald S,T und U gejoint
wurden, ist auch C irreleveant.
c) πe,f (σf =14 ∧ c=27 (R ./ (T ./ U )))
Augsgangsbaum
πe,f
optimierter Baum
πe,f
σf =14 ∧ c=27
R
uu
uu
u
u
uu
./a E
./a J
JJ
JJ
JJ
J
T
tt
tt
tt
t
tt
r
EE
EE
EE
¢¢
¢¢
¢
¢
πa,e,f
./c9
y
yy
yy
y
y
99
99
9
σc=27
U
T
./c L
LLL
LLL
LL
σf =14 ∧ c=27
U
Da die Bedingungen in der Selektion durch ein Und verknüpft werden, können diese zerlegt
und nach unten geschoben werden. Nach dem Join ist das Attribut c nicht mehr notwendig,
eine Projektion eliminiert c.
Aufgabe 4: B*-Bäume: Einfügen und Löschen
Zeichnen Sie den folgenden B*-Baum (k = 2) jeweils
a) nach dem Einfügen von 15, 13 und 30
b) nach dem Einfügen von 23
4
c) nach dem Löschen von 42
einmal neu.
• 3
±±
±± ±
±±
±±¨ ±
•
•
20
²
²
1 2
3 6 11 18
20 25 28
a) Nach dem Einfügen von 15, 13 und 30
• 3
•
•
11
²²
²² ²
²²
²²¨ ²
²
1 2
3 6
• 3
1 2
3 6
11 13 15 18
33
33
33
33
3¼
•
20
²
tt
tt
tt
t
t
tt
tt
t
tt
ytt
• 11 • 9
99
99
99
99
99
¿
²
•3
37 42
37
•3
33
33
33
33
3¼
²
11 13 15 18
b) Nach dem Einfügen von 23
t•
¶
¶¶ ¶
¶¶
¶ª¶ ¶
37
37 42
20 25 28 30
20 • OOOO
OOO
OOO
OOO
OOO
OOO
OOO
'
•
• 25
³³
³³ ³
³³
³³¨ ³
20 23
37 •..
.
..
..
..
.º
²
25 28 30
37 42
c) Nach dem Löschen von 42
• 3
¶¶
¶¶ ¶
¶
¶ª¶ ¶
1 2
t•
tt
t
t
tt
tt
t
t
tt
tt
t
ytt
• 11 • 9
99
99
99
99
99
²
¿
3 6
11 13 15 18
20 • MMM
MMM
MMM
MMM
MMM
MMM
MM
• 25 & •
³³
³³ ³
³³
³³¨ ³
20 23
5
²
25 28
30 •..
.
..
..
..
.º
30 37
Herunterladen