10. ¨Ubung - Datenbankprogrammierung - Datenbanken
10. ¨Ubung - Datenbankprogrammierung - Datenbanken
10. ¨Ubung - Datenbankprogrammierung - Datenbanken
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