You are on page 1of 4

Einführung in Datenbanksysteme, Datenbanken für die Bioinformatik Sommersemester

2012
8. Übungsblatt
(Testatwoche: 12. - 14. Juni 2012)

Einführung in Datenbanksysteme
Datenbanken für die Bioinformatik
Agnes Voisard, Sebastian Müller

Aufgabe 1 (JDBC) 10 Punkte

In der Vorlesung haben Sie bereits Statements und PreparedStatements


kennengelernt. Gegeben Sei folgende Datenbank:
DROP TABLE IF EXISTS Employee CASCADE;
DROP TABLE IF EXISTS Department CASCADE;
DROP TABLE IF EXISTS Resp_for CASCADE;
DROP TABLE IF EXISTS Customer CASCADE;
DROP TABLE IF EXISTS Product CASCADE;
DROP TABLE IF EXISTS "order" CASCADE;
DROP TABLE IF EXISTS Ordered CASCADE;
CREATE TABLE Department ( deptno INTEGER, name VARCHAR(20), location VARCHAR(40), PRIMARY
KEY(deptno));
INSERT INTO Department VALUES (10,'ACCOUNTING','NEW YORK');
INSERT INTO Department VALUES (20,'RESEARCH','DALLAS');
INSERT INTO Department VALUES (30,'SALES','CHICAGO');
INSERT INTO Department VALUES (40,'OPERATIONS','BOSTON');
CREATE TABLE Employee (empno INTEGER NOT NULL, name VARCHAR(40) NOT NULL, position VARCHAR(40)
NOT NULL, mngrno INTEGER NOT NULL, hire_date DATE NOT NULL, salary NUMERIC(10,2) NOT NULL,
commission REAL, deptno INTEGER NOT NULL, PRIMARY KEY (empno), CONSTRAINT emp_dept_fk FOREIGN
KEY (deptno) REFERENCES Department, CONSTRAINT emp_emp_fk FOREIGN KEY (mngrno) REFERENCES
Employee);
INSERT INTO Employee VALUES (7839,'KING','PRESIDENT',7839,'1981-11-17',5000,NULL,10);
INSERT INTO Employee VALUES (7698,'BLAKE','MANAGER',7839,'1981-05-01',2850,NULL,30);
INSERT INTO Employee VALUES (7782,'CLARK','MANAGER',7839,'1981-06-09',2450,NULL,10);
INSERT INTO Employee VALUES (7566,'JONES','MANAGER',7839,'1981-04-02',2975,NULL,20);
INSERT INTO Employee VALUES (7654,'MARTIN','SALESMAN',7698,'1981-09-28',1250,0.1,30);
INSERT INTO Employee VALUES (7499,'ALLEN','SALESMAN',7698,'1981-02-20',1600,0.12,30);
INSERT INTO Employee VALUES (7844,'TURNER','SALESMAN',7698,'1981-09-08',1500,0,30);
INSERT INTO Employee VALUES (7900,'JAMES','CLERK',7698,'1981-12-03',950,NULL,30);
INSERT INTO Employee VALUES (7521,'WARD','SALESMAN',7698,'1981-02-22',1250,0.5,30);
INSERT INTO Employee VALUES (7902,'FORD','ANALYST',7566,'1981-12-03',3000,NULL,20);
INSERT INTO Employee VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800,NULL,20);
INSERT INTO Employee VALUES (7788,'SCOTT','ANALYST',7566,'1982-12-09',3000,NULL,20);
INSERT INTO Employee VALUES (7876,'ADAMS','CLERK',7788,'1983-01-12',1100,NULL,20);
INSERT INTO Employee VALUES (7934,'MILLER','CLERK',7782,'1982-01-23',1300,NULL,10);
CREATE TABLE Customer (custno INTEGER, name VARCHAR(50) NOT NULL, address VARCHAR(40), phone
VARCHAR(12) NOT NULL, comments TEXT, cred_lim NUMERIC(10,2), CONSTRAINT cust_pk PRIMARY KEY
(custno));
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim, ADDRESS, COMMENTS) VALUES ('415-598-
6609','JOCKSPORTS', '100', '5000', '345 VIEWRIDGE, 96711 BELMONT, CA', 'Very friendly people
to work with sales rep likes to be called Mike.');
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim, ADDRESS, COMMENTS) VALUES ('415-368-
1223', 'TKB SPORT SHOP', '101', '10000', '490 BOLI RD., 94061 REDWOOD CITY, CA','Rep called
5/8 about change in order - contact shipping.');
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim, ADDRESS, COMMENTS) VALUES ('415-644-
3341','VOLLYRITE', '102', '7000','9722 HAMILTON, 95133 BURLINGAME, CA','Company doing heavy
promotion beginning 10/89. Prepare for large orders during winter.');
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim, ADDRESS, COMMENTS) VALUES ('415-677-
9312','JUST TENNIS', '103', '3000', 'HILLVIEW MALL, 97544 BURLINGAME, CA', 'Contact rep about
new line of tennis rackets.');
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim, ADDRESS, COMMENTS) VALUES ('408-996-
2323', 'EVERY MOUNTAIN', '104', '10000', '574 SUYYYYY RD., 93301 CUPERTINO, CA', 'Customer
with high market share (23%) due to aggressive advertising.');
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim, ADDRESS, COMMENTS) VALUES ('408-376-
9966', 'K + T SPORTS', '105', '5000', '3476 EL PASEO, 91003 SANTA CLARA, CA','Tends to order
large amounts of merchandise at once. Accounting is considering raising their credit limit.
Usually pays on time.');
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim,
ADDRESS, COMMENTS) VALUES ('415-364-9777', 'SHAPE UP', '106', '6000', '908 SEQUOIA, 94301 PALO
ALTO, CA', 'Support intensive. Orders small amounts (< 800) of merchandise at a time.');

Ausgabe 07.06.2012
Einführung in Datenbanksysteme, Datenbanken für die Bioinformatik Sommersemester
2012
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim, ADDRESS, COMMENTS) VALUES ('408-967-
4398', 'WOMENS SPORTS', '107', '10000', 'VALCO VILLAGE, 93301 SUNNYVALE, CA','First sporting
goods store geared exclusively towards women. Unusual promotional style and very willing to
take chances towards new products!');
INSERT INTO CUSTOMER (PHONE, NAME, custno, cred_lim, ADDRESS, COMMENTS)
VALUES ('612-566-9123', 'NORTH WOODS HEALTH AND FITNESS SUPPLY CENTER','108', '8000','98 LONE
PINE WAY, 55649 HIBBING, CA','');
CREATE TABLE resp_for (empno INTEGER NOT NULL, custno INTEGER NOT NULL, PRIMARY KEY
(empno,custno), CONSTRAINT resp_emp_fk FOREIGN KEY (empno) REFERENCES Employee ON UPDATE
CASCADE ON DELETE CASCADE, CONSTRAINT resp_cust_fk FOREIGN KEY (custno) REFERENCES Customer ON
DELETE CASCADE ON UPDATE CASCADE);
INSERT INTO resp_for VALUES (7654,100);
INSERT INTO resp_for VALUES (7654,105);
INSERT INTO resp_for VALUES (7654,102);
INSERT INTO resp_for VALUES (7654,104);
INSERT INTO resp_for VALUES (7654,106);
INSERT INTO resp_for VALUES (7499,101);
INSERT INTO resp_for VALUES (7499,103);
INSERT INTO resp_for VALUES (7499,105);
INSERT INTO resp_for VALUES (7521,108);
INSERT INTO resp_for VALUES (7521,107);
INSERT INTO resp_for VALUES (7521,104);
CREATE TABLE Product (prod_id INTEGER, name VARCHAR(40), descr TEXT, amount INTEGER,
CONSTRAINT prod_id_pk PRIMARY KEY (prod_id));
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('100860', 'ACE TENNIS RACKET I',
'Good for beginners', 301);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('100861', 'ACE TENNIS RACKET II',
'Good for advanced player', 215);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('100870', 'ACE TENNIS BALLS-3
PACK', 'A professional variant', 16);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('100871', 'ACE TENNIS BALLS-6
PACK', NULL, 387);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('100890', 'ACE TENNIS NET', NULL,
19);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('101860', 'SP TENNIS RACKET', NULL,
65);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('101863', 'SP JUNIOR RACKET',
'Junior variant', 17);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('102130', 'RH: "GUIDE TO TENNIS"',
NULL, 0);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('200376', 'SB ENERGY BAR-6 PACK',
NULL, 97);
INSERT INTO PRODUCT (PROD_ID, NAME, DESCR, AMOUNT) VALUES ('200380', 'SB VITA SNACK-6 PACK',
NULL, 0);
CREATE TABLE "order" (shipdate DATE, date DATE, ord_id INTEGER, custno INTEGER NOT NULL,
CONSTRAINT order_pk PRIMARY KEY (ord_id), CONSTRAINT customer_fk FOREIGN KEY (custno)
REFERENCES Customer ON DELETE CASCADE ON UPDATE CASCADE);
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-01-08', '610', '1987-01-
07', '101');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-01-11', '611', '1987-01-
11', '102');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-01-20', '612', '1987-01-
15', '104');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-05-30', '601', '1986-05-
01', '106');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-06-20', '602', '1986-06-
05', '102');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-06-30', '604', '1986-06-
15', '106');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-07-30', '605', '1986-07-
14', '106');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-07-30', '606', '1986-07-
14', '100');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-08-15', '609', '1986-08-
01', '100');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-07-18', '607', '1986-07-
18', '104');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-07-25', '608', '1986-07-
25', '104');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1986-06-05', '603', '1986-06-
05', '102');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-03-12', '620', '1987-03-
12', '100');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-02-01', '613', '1987-02-
01', '108');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-02-05', '614', '1987-02-
01', '102');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-02-10', '616', '1987-02-
03', '103');

Ausgabe 07.06.2012
Einführung in Datenbanksysteme, Datenbanken für die Bioinformatik Sommersemester
2012
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-02-04', '619', '1987-02-
22', '104');
INSERT INTO "order" (SHIPDATE, ord_id, date, custno) VALUES ('1987-03-03', '617', '1987-02-
05', '105');
CREATE TABLE ordered (price NUMERIC(10,2), quantity INTEGER, prod_id INTEGER, ord_id INTEGER,
CONSTRAINT order_item_pk PRIMARY KEY (prod_id, ord_id), CONSTRAINT prod_fk FOREIGN KEY
(prod_id) REFERENCES Product ON UPDATE CASCADE ON DELETE CASCADE, CONSTRAINT ord_id FOREIGN
KEY (ord_id) REFERENCES "order" ON UPDATE CASCADE ON DELETE CASCADE);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100860,610,32,20);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100861,610,2.20,10);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100870,610,3,13);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100860,601,30,200);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100861,601,1.10,100);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100870,601,3,13);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (200380,602,18,53);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (102130,602,21,10);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100870,603,1,10);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (200380,603,17,50);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (200376,604,21,10);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100890,604,10,10);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100871,605,132,14);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (101860,605,23,11);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100870,606,13,180);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100860,607,30,200);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100861,607,1.10,100);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (200376,608,4,13);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (200380,609,1,43);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (102130,611,2,13);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100870,612,1,10);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (200380,613,17,50);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (200376,614,41,10);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100860,614,20,9);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100871,617,12,14);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (101860,617,203,12);
INSERT INTO ordered (prod_id,ord_id,price,quantity) VALUES (100870,616,10,10);

Implementieren Sie folgende Abfrage unter Verwendung von Statement


und PreparedStatement und messen Sie die Performance:

Geben Sie alle Kunden ↔ Mitarbeiter Beziehungen aus (Kundenname,


Mitarbeitername, Abteilungsname) und schränken Sie dabei auf die
Kunden-ID und Mitarbeiter-ID ein. Schränken Sie für jeden Eintrag einmal
ein:
INSERT INTO resp_for VALUES (7654,100);
INSERT INTO resp_for VALUES (7654,105);
INSERT INTO resp_for VALUES (7654,102);
INSERT INTO resp_for VALUES (7654,104);
INSERT INTO resp_for VALUES (7654,106);
INSERT INTO resp_for VALUES (7499,101);
INSERT INTO resp_for VALUES (7499,103);
INSERT INTO resp_for VALUES (7499,105);
INSERT INTO resp_for VALUES (7521,108);
INSERT INTO resp_for VALUES (7521,107);
INSERT INTO resp_for VALUES (7521,104);

Sie haben also 11 verschiedene Statements. Führen Sie diese 100 mal
hintereinander durch und geben Sie die durchschnittliche Antwortzeit aus.
Um welchen Faktor untescheiden sich Statement und PreparedStatement?

Achtung!!! Im Testat werden Implementierungsdetails abgefragt, mit


welchen Sie in jedem Fall konfrontiert wurden. Es gibt keine 1:1 Abfrage
im Testat.

Ausgabe 07.06.2012
Einführung in Datenbanksysteme, Datenbanken für die Bioinformatik Sommersemester
2012
Aufgabe 2 (Indexstrukturen, B+-Bäume) 3+1+1+2 Punkte

a) Erstellen Sie einen B+-Baum mit maximaler Füllgröße N=4.

Fügen Sie nacheinander in den anfänglich leeren Baum Elemente


mit den folgenden Schlüsseln in der angegebenen Reihenfolge ein:
2, 3, 5, 7, 11, 17, 19, 23, 29, 31. Stellen Sie den resultierenden
Baum grafisch dar.
b) Ist der von Ihnen erstellte B +-Baum der einzig mögliche für die
enthaltenen Schlüsselwerte? Begründen Sie Ihre Antwort.
c) Das Einfügen wie vieler Elemente in den Baum führt dazu, dass sich
die Höhe um eins erhöht? Begründen Sie ihre Antwort. Geben Sie
ein untere Schranke für die Anzahl der Elemente an.
d) Löschen Sie das Element mit dem Schlüsselwert 3 aus dem Baum,
den sie in Teilaufgabe a) erstellt haben. Geben Sie den
resultierenden Baum an.

Ausgabe 07.06.2012

You might also like