06.04.2014 Aufrufe

10. ¨Ubung - Datenbankprogrammierung - Datenbanken

10. ¨Ubung - Datenbankprogrammierung - Datenbanken

10. ¨Ubung - Datenbankprogrammierung - Datenbanken

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

Professur für <strong>Datenbanken</strong><br />

Fakultät Informatik<br />

Institut für Systemarchitektur<br />

<strong>10.</strong> Übung - <strong>Datenbankprogrammierung</strong><br />

XML und XQuery“<br />

”<br />

Ziel der Übung. Kenntnisse im Umgang mit XML-Daten und der Anfrageverarbeitung mit<br />

XQuery<br />

Aufgaben<br />

1. Aufgabe: Erstellen einer XML-Datenbank und Einfügen von Daten<br />

Hinweis:<br />

• Bei der Verwendung von db2 müssen alle “ und $ mit einem \ maskiert<br />

werden.<br />

1. Erstellen Sie die Datenbank XMLDB.<br />

2. Legen Sie eine Kundentabelle (CUSTOMER) mit den folgenden drei Spalten an:<br />

• cid – die Kunden-ID (INT)<br />

• status – der Status des Kunden (VARCHAR(10))<br />

• info – Kundeninformationen (XML)<br />

und importieren Sie Testdaten mithilfe des Befehls<br />

db2 -tf /home/dbprog/data/xmldb/xmldb import.sql.<br />

3. Machen Sie sich mit dem Schema für die Kundeninformationen vertraut. Die XML-<br />

Schema-Datei ist unter /home/dbprog/data/xmldb/customer.xsd zu finden.<br />

Registrieren Sie dieses Schema unter dem Namen CUSTOMER und der Schema-URI<br />

http://xmlsampledb.org.<br />

4. Folgender Eintrag soll in die Kundentabelle eingefügt werden:<br />

Kunden-ID: 5, Kundenstatus: silber (silver), Kundeninformationen:<br />

<br />

<br />

Larry<br />

Smith<br />

<br />

<br />

5 Rosewood<br />

Toronto<br />

Ontario<br />

M6W 1E6<br />

<br />

416-555-1358<br />

<br />

Bei genauerer Betrachtung der Kundeninformationen sollte auffallen, dass diese nicht<br />

konform zum registrierten Schema sind. Geben Sie den Befehl an, damit<br />

1


Professur für <strong>Datenbanken</strong><br />

Fakultät Informatik<br />

Institut für Systemarchitektur<br />

a) das Tupel trotzdem eingefügt wird. (Löschen Sie das Tupel anschließend wieder.)<br />

b) das Tupel mit der entsprechenden Fehlermeldung abgewiesen wird.<br />

2. Aufgabe: Anfrageverarbeitung mit XQuery und SQL<br />

Hinweise:<br />

• Bei Abfragen von Informationen eines XML-Dokumentes ist die Angabe des XML-<br />

Namensraums erforderlich, in dem sich die angefragten Elemente befinden. D.h. vor<br />

der XQuery-Anfrage (aber nach dem entsprechenden Schlüsselwort) muss declare<br />

default element namespace ‘‘ ’’; stehen. Durch das dafür erforderliche<br />

Semikolon muss außerdem das Anweisungsabschlusszeichen geändert werden.<br />

Die Ausführung mit neuem Anweisungsabschlusszeichens erfolgt durch db2<br />

-td -f .<br />

• Verwenden Sie die Einbettung von Anfragesprachen nur dann, wenn es erforderlich ist.<br />

• Ist nach einem XML-Element gefragt, können sowohl das komplette Element als auch<br />

nur dessen Inhalt zurückgeliefert werden, z. B. wird sowohl Kathy Smith als auch<br />

Kathy Smith als richtiges Ergebnis<br />

gewertet, wenn nach dem Namen eines Kunden gefragt wird.<br />

1. Geben Sie die Namen aller Kunden aus der Stadt Toronto an. Sortieren Sie die Ausgabe<br />

alphabetisch nach dem Namen.<br />

2. Gesucht sind die Namen und die Mobilfunknummern aller Kunden, für die eine Mobilfunknummer<br />

angegeben ist. Geben Sie die entsprechende Anfrage an. Das Ergebnis soll<br />

folgende Struktur haben:<br />

<br />

... <br />

... <br />

<br />

3. Geben Sie die Namen aller Gold-Kunden (Status = gold) an<br />

a) als SQL-Anfrage mit eingebettetem XQuery.<br />

b) als XQuery mit eingebettetem SQL.<br />

4. Geben Sie den Namen und den Status aller Kunden an, die ihre Privatnummer angegeben<br />

haben (Telefonnummerntyp = home).<br />

5. Geben Sie alle Kunden aus (ganzes Tupel), bei denen die Kunden-ID in der Spalte cid<br />

nicht mit der Kunden-ID im XML-Dokument übereinstimmt.<br />

Bonus: Geben Sie nur den Namen und die beiden widersprüchlichen Kunden-IDs der<br />

jeweiligen Kunden aus.<br />

3. Aufgabe: XML-Ausgabe relationaler Anfragen<br />

Für das Lösen der folgenden Aufgabe verbinden Sie sich bitte mit ihrer TPCH-Datenbank.<br />

2


Professur für <strong>Datenbanken</strong><br />

Fakultät Informatik<br />

Institut für Systemarchitektur<br />

1. Lassen Sie sich alle Nationen mit ihren Primärschlüsseln in XML ausgeben. Definieren<br />

Sie zudem den Namensraum http://exampledb.org für die Elemente. Das Ergebnis<br />

soll folgende Struktur haben:<br />

... <br />

Sortieren Sie das Ergebnis alphabetisch nach Nationen.<br />

2. Geben Sie die Namen aller Kunden aus Deutschland jeweils in einem XML-Element<br />

aus. Zusätzlich soll das Element ein Attribut numorders enthalten, das die Anzahl aller<br />

Bestellungen (ORDERS) des Kunden enthält. Geben sie auch hier den o.g. Namensraum<br />

an.<br />

3. Bonus: Geben Sie alle Nationen und die dazugehörigen Kunden aus. Dabei sollen alle<br />

Kunden hierarchisch unter der jeweiligen Nation aufgelistet werden. Zusätzlich soll die<br />

Anzahl der Kunden jeder Nation in dem Attribut custcount des Elementes nation<br />

ausgegeben werden. Das Ergebnis soll folgende Struktur haben:<br />

<br />

... <br />

...<br />

... <br />

<br />

...<br />

Tipp: Nutzen Sie Nested Table Expressions sowie die Funktion XMLAGG().<br />

4. Aufgabe: XML-Indizes<br />

Hinweis:<br />

• Auch bei der Angabe von XML-Mustern für Indizes muss der erste Hinweis der 2.<br />

Aufgabe beachtet werden.<br />

Verbinden Sie sich wieder mit der von Ihnen angelegten Datenbank XMLDB.<br />

1. Erstellen Sie einen Index, der die Eindeutigkeit des XML-Attributes cid sicherstellt.<br />

Überprüfen Sie die Funktionalität des Indexes durch das Einfügen des folgenden Tupels:<br />

Kunden-ID: 1006, Kundenstatus: silber (silver), Kundeninformationen:<br />

<br />

test<br />

<br />

5 Rosewood<br />

Toronto<br />

Ontario<br />

M6W 1E6<br />

<br />

<br />

Wie sieht die Fehlermeldung aus?<br />

3


Professur für <strong>Datenbanken</strong><br />

Fakultät Informatik<br />

Institut für Systemarchitektur<br />

2. Erstellen Sie einen Index, der alle Attribute (auch wenn es in diesem Szenario nur eins<br />

gibt) aller phone-Elemente indiziert.<br />

Hinweis: phone-Elemente treten in zwei verschiedenen Kontexten auf (siehe<br />

customer.xsd)<br />

Abgabe<br />

Bitte senden Sie alle Lösungen in Form eines einzigen SQL-Skripts bis zum Montag, den<br />

24.06.2013, an Martin Kettel (martin.kettel@mailbox.tu-dresden.de). Für Lösungen von<br />

Textaufgaben bitte Kommentare innerhalb des SQL-Skripts einfügen.<br />

Das Lesen der Tutorials ist eine wesentliche Voraussetzung zur erfolgreichen Absolvierung der<br />

Zertifizierung! Wir empfehlen daher, schrittweise während des Semesters diese entsprechend<br />

der aktuellen Vorlesungsthemen durchzugehen.<br />

4

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!