Aufgaben

Werbung
Praktikum zur Vorlesung Datenbanken
BAI, Komedia, ISE CSCE/CE,
Mathematik/Technomathematik und Lehramt
Informatik
Dipl.-Inform. Vu Tran,
Ioannis Karatassis, B.Sc.,
Matthias Brzezinksi
Wintersemester 2014/2015
Datum
Team (Account)
Passwort
Aktuelle Informationen, Ansprechpartner, Materialien und Uploads unter:
http://www.is.inf.uni-due.de/courses/db_ws14/
v1.41
1
Inhaltsverzeichnis
0 Block 0: Einführung in Linux
3
1 Block 1: Modellierung einer Datenbank für ein Soziales Netzwerk
4
2 Block 2: SQL mit DB2
5
3 Block 3: Implementierung eines Sozialen Netzwerks
als Webanwendung
8
4 Beschreibung der Geodatenbank
9
2
0
Block 0: Einführung in Linux
keine Abgabe
1: Einrichten der Arbeitsumgebung (0 Punkte) Bereitet zunächst Eure
Arbeitsumgebung vor, so dass Ihr in den nächsten Wochen damit komfortabel arbeiten könnt. Die meisten Einstellungen können direkt über das Menü in
der rechten oberen Ecke (eine Sprechblase mit Eurem Login-Namen) und dann
Systemeinstellungen vorgenommen werden.
Abgabe:
• Keine.
2: Linux-Umgebung (0 Punkte) Zur Eingewöhnung in die Arbeitsumgebung werden einige vom Praktikumsleiter vorgegebene, einfache Aufgaben bearbeitet.
Am Ende der Aufgabe solltet Ihr in der Lage sein, mit der Linux-Shell Verzeichnisse zu navigieren, Verzeichnisse anzuzeigen und Dateien anzusehen. Ihr solltet
wissen, wo Ihr einen Text-Editor, Dateibrowser oder Webbrowser aufrufen könnt
und wie Ihr aus einer Textdatei ein PDF erzeugt.
Abgabe:
• Keine.
3
1
Block 1: Modellierung einer Datenbank für ein
Soziales Netzwerk
Abgabe bis 1.12.2014, 7.59 Uhr
3: Datenbank-Modellierung (6 Punkte) In diesem Semester soll ein soziales Netzwerk entwickelt werden. Dazu sollte als erstes die entsprechende Datenbank modelliert werden.
Zentral in unserem Modell sind dabei die Benutzer, die einen Vor- und einen
Nachnamen haben, ein Profil-Bild, ein Passwort, eine Selbstbeschreibung und
eine E-Mail-Adresse. Benutzer können einer Datenschutzerklärung zugestimmt
haben.
Der Login-Name eines Benutzers soll änderbar sein (wie bei Twitter).
Benutzer können Freunde von beliebig vielen anderen Benutzern sein.
Freundschftsbeziehungen sind dabei nicht unbedingt symmetrisch – Wenn Benutzer A also „Freund“ von B ist, muss B nicht automatisch Freund von A sein.
Benutzer können Status-Nachrichten veröffentlichen, deren komplette Historie zusammen mit dem Zeitpunkt des Veröffentlichens gespeichert wird. Diese
Status-Nachrichten sind für alle Freunde bestimmt.
Direkt-Nachrichten können von einem Benutzer an einen anderen Benutzer gesendet werden. Direkt-Nachrichten bestehen aus einem Text, einem Betreff und
einem Datum.
Benutzer haben eine „Wall“, auf die andere Benutzer Mitteilungen setzen können.
Benutzer können Gruppen gründen, die einen Namen haben und eine Beschreibung. Bereits existierenden Gruppen können Benutzer beitreten.
Benutzer können Dinge mögen, die einen Namen haben und evtl. eine URL.
Abgabe:
• ER-Diagramm
4: CREATE TABLE-Statements (4 Punkte) Gebt für die in Aufgabe 3
entworfene Datenbank entsprechende CREATE TABLE-Statements an, die die
Datenbank-Tabellen in der DB2 anlegen, incl. Integritätsbedingungen und einem
Trigger, der bei Aktualisierung eines Profilbildes automatisch ein Statusupdate
für den entsprechenden Benutzer erstellt.
Abgabe:
• CREATE TABLE-Statements
4
2
Block 2: SQL mit DB2
Abgabe bis 2.2.2015, 7.59 Uhr
Für die folgenden Aufgaben steht eine Beschreibung der verwendeten Datenbank
im Anhang 4 zur Verfügung.
5: Katalogisieren (1 Punkt) In diesem Praktikum werden wir die DB2 aus
der Kommandozeile heraus ansprechen. Es gibt auch grafische, Java-basierte
Werkzeuge, auf die wir jedoch hier verzichten.
Macht Euch kurz mit den unterschiedlichen Modi vertraut, die in den Unterlagen
beschrieben werden. Katalogisiert dann die Instanz dbmaster auf dem Rechner
bijou.is.inf.uni-due.de mit Server-Port 50005.
Katalogisiert die Datenbank mondial lokal unter einem Alias.
Lasst Euch das Node Directory und das Database Directory anzeigen.
Abgabe:
• Einträge für Instanz und Datenbank
6: Sichten (1 Punkt)
(a) Erstellt eine Sicht dbpXX1 .landmarks aller Landmarken (Berge und Ästuare) mit ihrem Typ (mountain, estuary) und den Ländern, in denen sie
sich befinden. Die Sicht soll die drei Attribute name, type und country
enthalten. Dabei soll in name der Name der Landmarke und in country
der Name des Landes (nicht das Kürzel!) enthalten sein.
(b) Erstellt aus der Tabelle borders eine Sicht, die eine symmetrische Grenzrelation enthält. D.h. zu Ländern A und B, die aneinander grenzen, soll
die Tabelle zwei Tupel (A,B,Länge) und (B,A,Länge) enthalten. A und B
sind dabei die Kürzel (Schlüssel) der Länder.
Abgabe:
• SQL-Befehle
7: Verwendung von Sichten (2 Punkte)
(a) Benutzt die Sicht dbpXX.landmarks, um zu jedem Land die Anzahl von
Landmarken auszugeben.
(b) Benutzt die Sicht dbpXX.borders, um für alle Länder die Gesamtlänge
ihrer Grenzen auszugeben.
Abgabe:
• SQL-Befehle
1 Dabei
steht „XX“ für Eure Gruppenummer
5
8: SQL-Anfragen (8 Punkte) Formuliert folgende Anfragen in SQL:
(a) Ermittelt zu allen Meeren die Gesamtfläche aller Inseln, die in jeweils
einem Meer liegen.
(b) Ermittelt zu jedem Land die dort am häufigsten gesprochene Sprache und
gebt Landesname (nicht Kürzel!), Sprache und Prozentanteil der Sprache
aus.
(c) Ermittelt alle Organisationen, in denen alle Länder mit Wüsten Mitglied
sind (nicht: alle Mitgliedsländer Wüsten haben).
(d) Ermittelt alle Paare von Ländern mit mindestens 10 Provinzen, die die
gleiche Zahl von Provinzen haben. Jedes Länderpaar soll nur einmal ausgegeben werden.
(e) Ermittelt zu jedem Land in Europa den längsten Fluss, der durch das
Land fließt (wenn es überhaupt einen solchen Fluss gibt). Die Ausgabe
soll nach Länge des Flusses sortiert werden.
(f) Berechnet den prozentualen Anteil der Angehörigen jeder ethnischen
Gruppe an der Weltbevölkerung.
Tip: Wenn man zwei Ganzzahlen (Integer) durcheinander teilt, so erhält
man als Ergebnis eine Ganzzahl, daher sollten die Operanden für die Berechnung von Prozentanteilen zunächst in einen anderen Datentyp gewandelt werden.
Tip: Beim Aufsummieren oder Durchschnittbilden von großen Ganzzahlen
kann es leicht zum Überlauf kommen. Daher gegebenfalls vorher in einen
anderen Datentyp wandeln.
(g) Die in der Datenbank aufgeführten Städte seien alle existierenden Städte.
Berechnet den Anteil der städtischen Bevölkerung an der Gesamtbevölkerung für die Länder Europas.
(h) Bestimme alle Organisationen, die auf jedem Kontinent mindestens ein
Mitgliedsland besitzen (die Art der Mitgliedschaft soll keine Rolle spielen).
Abgabe:
• SQL-Befehle
9: rekursive Anfragen (1 Punkt)
(a) Ermittelt mit Hilfe einer rekursiven Anfrage alle Zuflüsse des Rheins direkte und indirekte) und berechnet die Gesamtlänge des Flussnetzes. Gesucht
ist also eine einzige SQL-Abfrage, die die Gesamtlänge des Flussnetzes wie
oben beschrieben ausgibt.
Abgabe:
• SQL-Befehl
(Bitte umblättern)
6
10: Trigger (2 Punkte) Erstellt und füllt zunächst eine Tabelle
dbpXX.orgacount (ersetzt XX wieder durch Eure Gruppennummer):
CREATE TABLE dbpXX.orgacount (
orga VARCHAR(20),
countrycount INTEGER
)
INSERT INTO dbpXX.orgacount
SELECT o.abbreviation, COUNT(m.organization)
FROM organization o JOIN ismember m
ON o.abbreviation=m.organization
GROUP BY o.abbreviation
Schreibt nun zwei Trigger mit dem
dbpXX.trigger2, die folgendes leisten:
Namen
dbpXX.trigger1
und
• wenn neue Mitgliedschaften in die Tabelle dbpXX.ismember eingefügt werden, soll das Attribut countrycount für entsprechenden Organisationen
erhöht werden
• wenn Mitgliedschaften aus der Tabelle dbpXX.ismember gelöscht werden,
soll das Attribut countrycount für die entsprechenden Organisationen
gesenkt werden
Hinweis: Die Tabellen dbpXX.city und dbpXX.ismember müssen vorher aus dem
Schema dbmaster in das eigene Schema kopiert werden.
Abgabe:
• SQL-Befehle
7
3
Block 3: Implementierung eines Sozialen Netzwerks
als Webanwendung
Abnahme im Zeitraum 2.2.2014 bis 6.2.2014
11: Korrektur des Entwurfs (0 Punkte) Wenn Ihr die Korrekturen zu
eurem ER-Modell erhalten habt, überarbeitet euren Entwurf und beseitigt evtl.
Fehler und Probleme. Alternativ könnt ihr auch die Musterlösung benutzen, die
auf der Veranstaltungs-Webseite veröffentlicht wird.
Abgabe:
• Keine.
12: Implementierung (20 Punkte) Wenn Ihr ggf. euer ER-Modell korrigiert habt, entwickelt eine Web-Anwendung (z.B. in Java), die die folgenden
Anforderungen umsetzt:
• Einfaches Hinzufügen von Nutzern über eine Registrierungs-Seite ohne
E-Mail-Bestätigung etc. (1 Punkt)
• Benutzer können sich einloggen und gelangen dann auf ihre Profilseite (1
Punkt)
• Benutzer-Profilseite incl. (9 Punkte)
– Profildaten (Name, Vorname, Selbstbeschreibung)
– letztes eigenes Status-Update
– navigierbare Liste der Freunde des Benutzers (ein Klick auf einen
Freund führt zur Profilseite des Freundes)
– navigierbare Liste der Gruppen, in der der Benutzer Mitglied ist (ein
Klick auf eine Gruppe führt auf eine navigierbare Seite mit den Mitgliedern der Gruppe)
– Sachen, die der Benutzer mag
– Liste der letzten 10 Status-Updates der Freunde des Benutzers
• Navigierbare Liste der Mitglieder einer Gruppe (2 Punkte)
• Veröffentlichen von Status-Updates (2 Punkte)
Auf korrekte Verwendung von Transaktionen, das Schließen von DB-Resourcen
und die Verhinderung von SQL-Injection ist zu achten.
Von folgenden Features sollen zwei implementiert werden (5 Punkte):
• Hochladen eines Profil-Bildes
• Versenden von Direkt-Nachrichten an einen Freund
• Änderung des Login-Namens
8
• Eine Wall. Die Wall soll eine Möglichkeit für andere Benutzer sein, öffentliche Mitteilungen an diesen Benutzer zu veröffentlichen. Die Wall enthält
also eine Liste dieser Mitteilungen und eine Möglichkeit zum Hinzufügen
einer neuen Mitteilung.
• Möglichkeit für den Benutzer, Dinge einzugeben, die er mag
Folgende Anforderungen sind dabei zu beachten:
• Verwendung der DB22
• korrekte Verwendung von Transaktionen
• Schließen von DB-Ressourcen an sinnvollen Stellen
• Verhinderung von SQL-Injection
Abgabe:
• Keine. Die Webapp wird bei einem separaten Abnahme-Termin zusammen
mit den Veranstaltern vorgestellt und überprüft (s.u.)
Beim Abnahmetermin gibt es zwei Möglichkeiten:
(a) Ihr könnt Eure Lösung abnehmen lassen, indem Ihr sie auf Eurem eigenen Laptop etc. vorführt. Dazu bringt Ihr das Gerät zum Termin mit und
denkt bitte an Netzteil und/oder an genug Akkuladung. Testet die Vorführung bitte vorher – u.U. ist es in unserem Büro schwierig, eine Netzwerkverbindung zu bekommen. Falls Ihr definitiv eine benötigt, schickt
uns bitte vor dem Termin die Kabel-MAC-Adresse Eures Rechners per
Mail.
(b) Ihr könnt Eure Lösung auch auf einem Rechner im Pool vorführen. In
diesem Fall treffen wir uns zur Abnahme auch in unserem Büro im Erdgeschoss, aber verbinden uns per Internet auf den Rechner im Pool.
In beiden Fällen werden wir uns sowohl die Funktionalität des Programms angucken als auch den Quellcode!
4
Beschreibung der Geodatenbank
Für die SQL-Aufgaben ist eine Beispieldatenbank mit geographischen Daten
vorgegeben. Diese Datenbank mondial solltet Ihr in der ersten Woche unter
einem lokalen Alias katalogisiert haben.
Der relevante Ausschnitt des Schemas der Datenbank ist im Anschluss beschrieben. Ihr könnt den Aufbau der Tabellen auch direkt von der Datenbank erfragen.
Die Daten der Tabellen geben teilweise kein vollständiges Bild der Welt wieder,
sollen aber für unsere Zwecke genügen.
Country: Länder
name: der Name des Landes
2 Mit
anderen Worten: andere Datenbanken, die nicht die IBM DB2 sind, sind nicht zugelassen und führen bei Verwendung zum Nichtbestehen.
9
code: der Ländercode (Kfz) des Landes
capital: der Name der Hauptstadt
province: der Name der Hauptstadt-Provinz
area: die Fläche des Landes
population: die Bevölkerungszahl
Economy: Wirtschaftsdaten
country: der Ländercode (Kfz) des Landes
gdp: Bruttoinlandsprodukt in Mio. US-Dollar
Language: gesprochene Sprachen
country: der Ländercode
name: Name einer im Land gesprochenen Sprache
percentage: Anteil der Sprache als Muttersprache im Land
Religion: ausgeübte Religionen
country: der Ländercode
name: Name einer im Land ausgeübten Religion
percentage: Anteil der Religion an der Bevölkerung des Landes
borders: in dieser Beziehung ist für ein Paar benachbarter Länder A und B
nur ein Tupel angegeben, die Relation ist nicht symmetrisch
country1: der Ländercode des ersten Landes
country2: der Ländercode des angrenzenden Landes
length: Länge der Grenze zwischen country1 und country2
Continent: Kontinente
name: der Name des Kontinents
area: die Gesamtfläche des Kontinents
encompasses: Lage von Ländern
country: der Ländercode
continent: der Name des Kontinents, auf dem das Land liegt
percentage: wie viel Prozent der Landesfläche auf dem Kontinent liegt
City: Städte
name: der Name der Stadt
country: der Ländercode des Landes, in dem die Stadt liegt
province: die Provinz, in der die Stadt liegt
population: Bevölkerung der Stadt
longitude: geographischer Längengrad
10
latitude: geographischer Breitengrad
Organization: internationale Organisationen
name: der Name der internationalen Organisation
abbreviation: das Kürzel der Organisation
city: der Sitz der Organisation
country: der Ländercode des Landes, in dem der Sitz liegt
province: die Provinz, in der der Sitz liegt
established: Gründungsdatum
ismember: Mitgliedschaften
organization: das Kürzel der Organisation
country: der Ländercode des Mitgliedslandes
type: die Art der Mitgliedschaft
Mountain: Berge
name: der Name des Bergs
mountains: der Name des Gebirges, in dem der Berg liegt
height: die Höhe des Bergs
type: die Art des Bergs
longitude: geographischer Längengrad
latitude: geographischer Breitengrad
Lake: Seen
name: der Name des Sees
area: die Fläche des Sees
River: Flüsse
name: der Name des Flusses
length: die Länge des Flusses
river: der Name des Flusses, in den der Fluss mündet
lake: der Name des Sees, in den der Fluss mündet
sea: der Name des Meeres, in den der Fluss mündet
Sea: Meere
name: der Name des Meeres
depth: die maximale Tiefe des Meeres
located: Lage von Städten (einzelne der Attribute sind in dieser Tabelle oft
NULL, wenn eine Stadt z.B. nicht an einem Fluss liegt)
city: Name der Stadt, die an dem Gewässer liegt
11
country: Name des Landes, in dem die Stadt liegt
province: Name der Provinz, in der die Stadt liegt
river: Name des Flusses, an dem die Stadt liegt
lake: Name des Sees, an dem die Stadt liegt
sea: Name des Meeres, an dem die Stadt liegt
geo_sea, geo_lake, geo_river: Lage von Meeren, Seen und Flüssen
sea, lake, river: Name des Gewässers
country: Name des Landes, an den das Gewässer grenzt
province: Name der Provinz, an die das Gewässer grenzt
geo_mountain: Lage von Bergen
mountain: Name des Bergs
country: Name des Landes, in dem der Berg liegt
province: Name der Provinz, in dem der Berg liegt
12
Herunterladen