Praktikum zur Vorlesung Datenbanken BAI, Komedia, ISE CSCE/CE, Mathematik/Technomathematik und Lehramt Informatik Michael Rist, M.Sc. Darina Benikova, M.A. Nikolas Gur, B.Sc. Wintersemester 2016/2017 Datum Team (Account) Passwort Aktuelle Informationen, Ansprechpartner, Materialien und Uploads unter: http://www.is.inf.uni-due.de/courses/db_ws15/ v1.1 1 Inhaltsverzeichnis 0 Block 0: Einführung in Linux 3 1 Block 1: Modellierung einer Datenbank für eine Game of Thrones-Informations-Website (10 Punkte) 4 2 Block 2: SQL mit DB2 (15 Punkte) 5 3 Block 3: Implementierung einer GoT-Informations-Website (20 Punkte) 8 A Spezikation der Website 9 A.1 Beschreibung der Mini-Welt . . . . . . . . . . . . . . . . . . . . . A.2 Beschreibung der zu erstellenden Website 9 . . . . . . . . . . . . . 10 . . . . . . . . . . . . . . . . . . . . . . . . 10 A.2.1 Die Hauptseite A.2.2 Detailseite für Personen A.2.3 Detailseite für Tiere A.2.4 Detailseite für Häuser A.2.5 Detailseite für Orte . . . . . . . . . . . . . . . . . . . . . . 16 A.2.6 Detailseite für Episoden . . . . . . . . . . . . . . . . . . . 17 A.2.7 Detailseite für Staeln . . . . . . . . . . . . . . . . . . . . 17 A.2.8 Bewertungen für Detailseiten . . . . . . . . . . . . . . . . 19 A.2.9 Komplette Listen . . . . . . . . . . . . . . . . . . . . . . . 19 A.2.10 Playlist . . . . . . . . . . . . . . . . . . . 12 . . . . . . . . . . . . . . . . . . . . . 12 . . . . . . . . . . . . . . . . . . . . 15 . . . . . . . . . . . . . . . . . . . . . . . . . . . . A.2.11 Neue Playlist anlegen . . . . . . . . . . . . . . . . . . . . B Beschreibung der Geodatenbank 19 19 24 B.1 Auistung sämtlicher Tabellen B.2 Relationales Schema der Datenbank . . . . . . . . . . . . . . . . 29 B.3 Darstellung von Verknüpfungen zwischen einzelnen Tabellen . . . 31 2 . . . . . . . . . . . . . . . . . . . 24 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 Arbeitsumge- bung 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 eine Game of Thrones-Informations-Website (10 Punkte) Abgabe bis 01.12.2016, 23:59 Uhr 3: Datenbank-Modellierung (6 Punkte) In diesem Semester soll eine Website für Informationen zu der Serie Game of Thrones entwickelt werden. Dazu sollte als erstes die entsprechende Datenbank modelliert werden. Im Anhang dieses Dokuments (siehe Anhang A.1 auf Seite 9) wird die generelle Funktionsweise der zu erstellenden Website vorgestellt. Es ist dringend anzuraten, vor dem Entwurf neben der Beschreibung der Miniwelt auch die vollständige Spezikation (siehe Anhang A.2 auf Seite 10) zu lesen und zu verstehen. Abgabe: ER-Diagramm 4: CREATE TABLE- und Trigger-Statements (4 Punkte) Aufgabe 3 entworfene Datenbank entsprechende Gebt für die in CREATE TABLE-Statements an, die die Datenbank-Tabellen in der DB2 anlegen. Enthalten sein sollen darin sinnvolle Integritätsbedingungen für alle Attribute ein Trigger, der bei Anlegen einer neuen Playlist automatisch alle Trailer in die Playlist hinzufügt. Also alle Episoden mit der Nummer 0. Abgabe: CREATE TABLE-Statements und Trigger-Statement 4 als txt-Datei 2 Block 2: SQL mit DB2 (15 Punkte) Abgabe bis 23.12.2016, 11.59 Uhr Für die folgenden Aufgaben steht eine Beschreibung der verwendeten Datenbank im Anhang B zur Verfügung. 5: Katalogisieren (1 Punkt) In diesem Praktikum werden wir die DB2 aus der Kommandozeile heraus ansprechen. Es gibt auch grasche, Java-basierte Werkzeuge, auf die wir jedoch hier verzichten. Die Datenbank mit der wir arbeiten werden bendet sich auf einem entfernten Rechner und muss daher in Eurem Rechner importiert werden. Macht Euch kurz mit den unterschiedlichen Modi vertraut, die in den Unterlagen be- dbmaster 50005. schrieben werden. Katalogisiert dann die Instanz bijou.is.inf.uni-due.de Katalogisiert die Datenbank mit Server-Port mondial auf dem Rechner lokal unter einem Alias. Lasst Euch das Node Directory und das Database Directory anzeigen. Abgabe: Einträge für Instanz (node) und Datenbank (database) 6: Sichten (1 Punkt) dbpXXX1 .waters aller Gewässer (Seen und Flüsse) mit ihrem Typ (sea, river) und den Ländern, in denen sie sich benden. Die Sicht soll die drei Attribute name, type und country enthalten. Dabei soll in name der Name des Gewässers und in country der Name des Landes (a) Erstellt eine Sicht (nicht das Kürzel!) enthalten sein. (b) Erstellt aus der Tabelle borders eine Sicht, die eine symmetrische Grenz- relation 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 dbpXXX.waters, um zu jedem Land die Anzahl der Ge- wässer auszugeben. (b) Benutzt die Sicht dbpXXX.borders, ihrer Grenzen auszugeben. Abgabe: SQL-Befehle 1 Dabei steht XXX für Eure Gruppenummer 5 um für alle Länder die Gesamtlänge 8: SQL-Anfragen (8 Punkte) Formuliert folgende Anfragen in SQL: (a) Ermittelt zu allen Provinzen die durchschnittliche Höhe aller Berge, die in der jeweiligen Provinz liegen. (b) Ermittelt zu jedem Land die dort am häugsten vertretene Religion und gebt Landesname (nicht Kürzel!), Religion und Prozentanteil der Religion aus. (c) Ermittelt alle Länder, in denen alle Hauptstädte der Provinzen des Landes an einem Fluss liegen. (d) Ermittelt alle Paare von Ländern, die die gleiche Anzahl an Nachbarländer haben, also Grenzen zu anderen Ländern. Ermittelt nur die Länderpaare die mindestens 7 Nachbarländer haben. Jedes Länderpaar soll nur einmal ausgegeben werden und keine Sichten verwendet werden. (e) Ermittelt zu jedem Land in Europa die ächenmäÿig gröÿte Insel des Landes (wenn überhaupt eine Insel existiert/vermerkt ist). Die Ausgabe soll nach Fläche der Insel sortiert werden. (f ) Berechnet für jede Sprache wie viel Prozent der Weltbevölkerung diese sprechen. 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) Angenommen die Datenbank enthält alle Städte eines Landes. Berechnet den Anteil der städtischen Bevölkerung an der Gesamtbevölkerung des jeweiligen Landes, für alle Länder in Asien. (h) Bestimme alle Sprachen, die auf jedem Kontinent in mindestens einem Land gesprochen wird. Der prozentuelle Anteil der Sprache in den Ländern spielt keine Rolle. Abgabe: SQL-Befehle 9: rekursive Anfragen (1 Punkt) (a) Ermittelt mit Hilfe einer rekursiven Anfrage die Gesamtlänge der Zufüsse und deren Zuüsse in das Kaspische Meer. Gesucht ist also eine einzige SQL-Abfrage, die die Gesamtlänge des Flussnetzes wie oben beschrieben ausgibt. Hinweis: Das Kaspische Meer ist kein Ozean/Meer. Abgabe: SQL-Befehl 6 10: Trigger (2 Punkte) dbpXXX.orgacount Erstellt und füllt zunächst eine Tabelle (ersetzt XXX wieder durch Eure Gruppennummer): CREATE TABLE dbpXXX.orgacount ( orga VARCHAR(20), countrycount INTEGER ) INSERT INTO dbpXXX.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 dbpXXX.trigger2, Trigger mit dem Namen dbpXXX.trigger1 und die folgendes leisten: wenn neue Mitgliedschaften in die Tabelle werden, soll das Attribut countrycount dbpXXX.ismember eingefügt für entsprechenden Organisatio- nen erhöht werden wenn Mitgliedschaften aus der Tabelle soll das Attribut countrycount dbpXXX.ismember gelöscht werden, für die entsprechenden Organisationen gesenkt werden Hinweis: Die Tabellen dbpXXX.city und dbpXXX.ismember müssen vorher aus dem Schema dbmaster in das eigene Schema kopiert werden. Abgabe: SQL-Befehle 7 3 Block 3: Implementierung einer Informations-Website (20 Punkte) GoT- Fertigstellung bis zum Abnahmetermin (7.2.2017 10.2.2017) 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 Bijou bereitgestellt wurde. Abgabe: Keine. 12: Implementierung (20 Punkte) Wenn Ihr ggf. Euer ER-Modell kor- rigiert habt, entwickelt eine Web-Anwendung (Website) in Java, die die beschriebenen Anforderungen (siehe Beschreibung A.2 im Anhang A) umsetzt. Die Struktur der Daten (und eventuelle Integritätsbedingungen) ist bereits aus der Beschreibung der Miniwelt (siehe Anhang A.1) bekannt. Folgende Anforderungen sind dabei zu beachten: Verwendung der DB2 2 Korrekte Verwendung von Transaktionen Schlieÿen von DB-Ressourcen an sinnvollen Stellen Verhinderung von SQL-Injection Befüllen relevanter Tabellen mit einigen Beispieldaten, um die Website testen zu können Abgabe: Keine. Die Web-Anwendung wird bei einem separaten Abnahmetermin zusammen mit den Veranstaltern vorgestellt und überprüft. 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. Zur Not sollte sich im Workspace Eures dbp-Accounts eine Kopie Eures Endprojekts benden. (b) Ihr könnt Eure Lösung auch auf einem Rechner im Computerpool vorführen. Dazu sollte sich die Endversion Eures Projekts im Workspace Eures dbp-Accounts benden. In beiden Fällen werden wir uns sowohl die Funktionalität des Programms als auch den Quellcode anschauen! Für jedes Feature, was korrekt implementiert wurde, werden Teilpunkte vergeben. Daher lohnt sich eine Anmeldung für die Abnahme in jedem Fall. 8 Anhang A Spezikation der Website A.1 Beschreibung der Mini-Welt Alle Figuren haben einen Namen und Herkunftsort. Alle Figuren sind entweder Personen oder Tiere. Für Personen kann der Titel und eine Biograe hinterlegt werden. Personen können einem oder mehrern Häusern angehören. (Durch Heirat etc.) Personen können in einem Zeitraum (von Episoden x . . . bis Episoden y) Mitglied eines Hauses sein. Eine Person die nicht mehr Mitglied eines Hauses ist kann diesem nicht wieder angehören. Zudem ist es nicht ver- pichtend eine Realtion zu der Tabelle Episoden zu erstellen; der Zeitraum kann als einfaches Attribut gesehen werden ohne direkte Verbindung zu einer Episode. Figuren Personen können in Beziehung zueinander Stehen z.B. Schwester, Ehemann, Feind, etc. Häuser haben einen Name, Motto, Wappen und einen Sitz (Burg). Häuser haben mehrere Orte für einen gewissen Zeitraum (von Episoden x . . . bis Episoden y) unter ihrer Herrschaft. Alle Burgen haben einen Namen und einen Standort. Es kann nicht sein das ein Ort der Standort für mehrere Burgen ist. Burgen können von verschiedenen Häusern als Sitz angesehen werden. Ein Herkunfts- oder Standort hat einen Namen. Es wird keine Unterscheidung gemacht zwischen einem Stand-, Herkunfts- oder Handlungsort. Jedes Tier kann maximal einen Besitzer (Person) haben. Episoden haben einen Titel, Nummer, Erstausstrahlungsdatum und eine Inhaltsangabe. Jede Episode hat Figuren, die in ihr vorkommen. Jede Episode hat Handlungsorte, die in ihr vorkommen. Jede Episode muss zu einer Stael gehören. Eine Stael hat mehrere Episoden. Jede Stael hat eine Nummer, Startdatum und Episodenanzahl. Für jede Stael gibt es einen Trailer der als Episode 0 gespeichert wird. Playlisten enthalten Episoden. Benutzer haben einen Namen, eine Login-Kennung und ein Passwort. 9 Benutzer können Bewertungen/Notizen schreiben zu Episoden, Staeln, Figuren und Häusern. Bewertungen enthalten einen Text und ein numerisches Rating (im Bereich von 0 bis 5). Playlisten sind an Benutzer gebunden; eine Playlist gehört genau einem Benutzer. Playlisten haben die gleiche Reihenfolge wie in den Staeln. A.2 Beschreibung der zu erstellenden Website Zu erstellen ist also eine Website für Game of Thrones-Metainformationen. In den hier aufgeführten Mockups (Wireframes) ist das Rechteck oben im jeweiligen Mockup das Seiten-Logo, das wir Euch im Eclipse-Workspace mitliefern. Hinweis: Zum Testen der Website sowie für die Abnahme, sollten einige Bei- spieldaten in die Tabellen eingefügt werden. An einigen Stellen im Programmcode sind DB-Transaktionen erforderlich, um eventuelle Anomalien zu vermeiden. Identiziert sinnvolle Stellen und implementiert anschlieÿend das Konzept an diesen Stellen. Die zu erstellende Website soll folgendermaÿen aufgebaut sein: A.2.1 Die Hauptseite Der Einstieg soll über die Hauptseite (siehe Abbildung 1) beginnen, die eine Übersicht über die verfügbaren Daten liefert. Bei den anzuzeigenden Playlisten handelt es sich um diejenigen, die dem aktuell angemeldeten Benutzer gehören. Aus der Beschreibung geht hervor, daÿ eine Playlist genau einem Benutzer gehört. Hinweis: Eine Anmeldefunktion (Login) ist nicht notwendig! Im Programmcode soll ein Standardbenutzer fest vorgegeben (hartkodiert) sein. Alle benutzerspezischen Lese- und Schreiboperationen auf der Datenbank (z.B. das Anlegen einer Playlist) sollen mit diesem Benutzer durchgeführt werden. Zu den Haupt-Informationstypen sollen jeweils maximal fünf gelistet werden wir schlagen vor, die letzten eingefügten Einträge aufzulisten. Ein Klick auf einen Eintrag soll zur jeweiligen Detailseite führen. Da eine Figur entweder eine Person oder Tier sein kann, sollen die Links bei einer Person auf die jeweilige Detailseite führen. Es soll möglich sein, Figuren anhand ihres Namens, Hauses und Titels suchen zu können. Dazu sollte das LIKE-Prädikat verwendet werden. Die Ergebniÿeite der Suche kann jeweils genau so dargestellt werden, wie die Liste aller entsprechenden Einträge (siehe Abbildung 1), nur, daÿ eben die angezeigten Elemente der Suche entsprechen müÿen. Um die Usability der Website zu verbeÿern, sollte auf jeder Unterseite ein Link auftauchen, der auf die Hauptseite führt. 10 max. 5 Figuren Zur Personen- oder Tier-Seite Figur A Tier B ... Alle Suchen Zur Ergebnisseite Zur Liste aller Figuren max. 5 Häuser Name Haus 1 Name Haus 2 ... Zu den Häusern Alle Suchen Zur Liste aller Häuser max. 5 Staffeln Zur Staffel Titel Staffeln X Titel Staffeln Y ... Alle Suchen alle Playlisten Zur Liste aller Staffeln Zur Playlist Titel Playliste 1 Titel Playliste 2 ... Titel Playliste n Neue Playlist Zu "Neue Playlist" Abbildung 1: Die Hauptseite 11 A.2.2 Detailseite für Personen Hier (siehe Abbildung 2) soll neben dem Namen, Herkunftsort und der Biographie angezeigt werden, welchem/n Haus/Häusern eine Person angegehört, welche Beziehungen sie hat und, falls vorhanden, welche Tiere zu ihr gehören. Die Verlinkungen sind angegeben. A.2.3 Detailseite für Tiere Tiere haben keine Biographie, Beziehungen oder Häuser. Es soll lediglich der Herkunftsort und der Besitzer angegeben werden 3). Der Namen des Besitzers soll auf die jeweilige Personen-Seiten verlinken. 12 Abbildung 2: Die Personen-Detailseite 13 Ghost Herkunftsort: Winterfell Zum Ort Besitzer: Ghost Zur Tierseite Abbildung 3: Die Tier-Detailseite 14 A.2.4 Detailseite für Häuser Auf der Haus-Detailseite (siehe Abbildung 4) sollen der Name des Hauses sowie deren Sitz angegeben werden. Darüber hinaus soll aufgelistet werden welche Personen zum Haus gehören und welche Orte im Besitz des Hauses sind. Die Verlinkungen sind angegeben. Stark Sitz: Burg(Ort) Personen: Arya Stark John Snow ... Besitzt: (Ort) Winterfell Hornwood ... Zum Ort Zur Person Zum Ort Abbildung 4: Die Detailseite für ein Haus 15 A.2.5 Detailseite für Orte Auf der Ort-Detailseite (siehe Abbildung 5) steht zu welchem Haus der Ort aktuell gehört und wenn eine Burg existiert wird diese angegeben. Des Weiteren wird aufgelistet welche Figuren dort herkommen und welche Episoden dort spielen. Winterfell aktuell in Besitz von: Stark Burg: Winterfell Personen: (Herkunfsort) Zur Person Arya Stark John Snow ... Episoden: (Handlungsort) Zur Episode S01E02 S06E05 ... Abbildung 5: Die Detailseite für ein Ort 16 Zum Haus Episode (Titel - Nummer) Staffel Zur Staffel Handlung Figuren: Arya Stark Zur Person/Tier Orte: Winterfell Zum Ort Abbildung 6: Detailseite für eine Episode A.2.6 Detailseite für Episoden Die Details für eine Episode sollen aufgeführt werden wie in Abbildung 6 gezeigt wird. Neben Titel, Nummer, Stael und Handlung sollen auch die Figuren und Orte aufgelistet werden, die in dieser Episode vorkommen. A.2.7 Detailseite für Staeln Staeln (siehe Abbildung 7) haben eine Nummer und es werden alle Episoden der Stael angezeigt. Jede Episode führt zu ihrer jeweiligen Detailseite. 17 Staffel 1 Titel Titel ... 1 2 Zur Episode 1.2.2015 8.2.2015 Abbildung 7: Detailseite für eine Kollektion 18 A.2.8 Bewertungen für Detailseiten Benutzer können Bewertungen schreiben zu Figuren, Häusern, Staeln und Episoden. Diese bestehen aus einem numerischen Rating (im Bereich von 0 5) und einem Text. Auf den entsprechenden Detailseiten (zu Figur, Haus, Stael und Episode) soll im unteren Bereich der Seite das Bewertungÿystem eingebaut werden (siehe Abbildung 8). Ein Benutzer kann über den Button Bewerten pro Eintrag maximal eine Bewertung abgeben. Dies soll im Programmcode explizit überprüft werden. Bewertet der Benutzer einen Eintrag erneut, obwohl er diesen bereits bewertet hat, soll die alte Bewertung gelöscht und die neue Bewertung übernommen werden. Anschlieÿend soll die Detailseite aktualisiert werden. Die Durchschnittsbewertung für einen Eintrag setzt sich aus dem arithmetischen Mittel über alle Bewertungen zusammen. Darüber hinaus sollen sämtliche Bewertungen (jeweils Benutzername, Rating und Text) für diesen Eintrag angezeigt werden. A.2.9 Komplette Listen Einige Seiten (siehe Abbildungen 9) sollen alle Entitäten eines Typs auisten: alle Figuren, Häuser oder Staeln. Auch hier führen die Einträge wieder zu den entsprechenden Detailseiten. A.2.10 Playlist Eine Playlist-Seite (siehe Abbildung 10) soll die Episodem der jeweiligen Playlist auisten (sortiert anhand der Reihenfolge der Staeln). Pro Episode soll ein Link zur Detailseite der Episode angegeben werden. A.2.11 Neue Playlist anlegen Das Anlegen einer neuen Playlist (siehe Abbildung 11) ist sehr einfach gehalten: der Name soll in die Textbox eingegeben werden und nach Klick auf Anlegen soll die Liste angelegt und der Benutzer auf die (aktualisierte) Hauptseite geleitet werden. Wenn eine Playlist schon existiert, soll dieser Fehler still ignoriert werden. 19 Abbildung 8: Bewertungen für Detailseiten 20 Alle [Figuren, Häuser, Staffeln] Name Name ... Zum/zur [Figur, Haus, Staffel] Abbildung 9: Auistungÿeiten 21 Diverse 1. S01E01 2. S03E04 ... Zur Episode Play Play Anzahl: 2 Abbildung 10: Die Detailseite für eine Playlist 22 Abbildung 11: Erstellen einer neuen Playlist 23 B 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. B.1 Auistung sämtlicher Tabellen 24 The relational schema of the Mondial database Country: the countries (and similar areas) of the world with some data. name: the country name code: the car code capital: the name of the capital province: the province where the capital belongs to area: the total area population: the population number Economy: economical information about the countries. country: the country code GDP: gross domestic product (in million $) agriculture: percentage of agriculture of the GDP service: percentage of services of the GDP industry: percentage of industry of the GDP inflation: inflation rate (per annum) Population: information about the population of the countries. country: the country code population growth: population growth rate (per annum) infant mortality: infant mortality (per thousand) Politics: political information about the countries. country: the country code independence: date of independence (if independent) wasdependent: the plotical body where the area was dependent of; usually a country (but not always). dependent: the country code where the area belongs to government: type of government Language: infomation about the languages spoken in a country country: the country code name: name of the languange percentage: percentage of the language in this country Religion: information about the religions in a country country: the country code name: name of the religion percentage: percentage of the language in this country EthnicGroup: information about the ethnic groups in a country country: the country code name: name of the religion percentage: percentage of the language in this country borders: informations about neighboring countries. Note that in this relation, for every pair of neighboring countries (A,B), only one tuple is given – thus, the relation is not symmetric. country1: a country code country2: a country code length: length of the border between country1 and country2 Continent: Information about continents. name: name of the continent area: total area of the continent encompasses: information to which continents a country belongs. country: the country code continent: the continent name percentage: percentage, how much of the area of a country belongs to the continent City: information about cities. name: the name of the city country: the country code where it belongs to province: the name of the province where it belongs to population: population of the city elevation: the elevation (above sea level) of the city longitude: geographic longitude latitude: geographic latitude Province: information about administrative divisions. name: the name of the administrative division country: the country code where it belongs to area: the total area of the province population: the population of the province capital: the name of the capital capprov: the name of the province where the capital belongs to note that capprov is not necessarily equal to name. E.g., the municipality of Bogota (Columbia) is a province of its own, and Bogota is the capital of the surrounding province Cudinamarca. Organization: information about political and economical organizations. name: the full name of the organization abbreviation: its abbreviation city: the city where the headquarter is located country: the country code where the headquarter is located province: the province where the headquarter is located established: date of establishment isMember: memberships in political and economical organizations. organization: the abbreviation of the organization country: the code of the member country type: the type of membership Lake: information about lakes. name: the name of the lake area: the total area of the lake depth: the depth of the lake elevation: the elevation (above sea level) of the lake river: the river that flows out of the lake (may be null) type: the type of the lake, e.g., salt, caldera, ... coordinates: its geographical coordinates as (longitude, latitude) Sea: information about seas. name: the name of the sea depth: the maximal depth of the sea River: information about rivers. name: the name of the river length: the length of the river river: the river where it finally flows to lake: the lake where it finally flows to 2 sea: the sea where it finally flows to; (note that at most one out of {river,lake,sea} can be non-null) source: the coordinates of its source sourceElevation: the elevation (above sea level) of its source mountains: the montains where its source is located estuary: the coordinates of its estuary RiverThrough: information about rivers flowing through lakes. river: the name of the river lake: the lake where it flows through Mountain: information about mountains name: the name of the mountain mountains: the montains where the it belongs to elevation: the maximal elevation of the summit of the mountain type: the type of the mountain, e.g. volcanic, (active) volcano, ... coordinates: its geographical coordinates as (longitude, latitude) Island: information about islands name: the name of the island islands: the group of islands where it belongs to area: the area of the island elevation: the maximal elevation of the island type: the type of the island, e.g. volcanic, coral, atoll, ... coordinates: its geographical coordinates as (longitude, latitude) Desert: information about deserts. name: the name of the desert area: the total area of the desert coordinates: its geographical coordinates as (longitude, latitude) geo Mountain: geographical information about mountains mountain: the name of the mountain country: the country code where it is located province: the province of this country Note that for a country there can be several provinces where the mountain is located in. analogous for geo island, geo desert, geo river, geo lake, geo sea. Analogously, there are also geo source and geo estuary. mergesWith: information about neighboring seas. Note that in this relation, for every pair of neighboring seas (A,B), only one tuple is given – thus, the relation is not symmetric. sea1: a sea sea2: a sea located: information about cities located at rivers, lakes, and seas. city: the name of the city country: the country code where the city belongs to province: the province where the city belongs to river: the river where it is located at lake: the lake where it is located at sea: the sea where it is located at Note that for a given city, there can be several lakes/seas/rivers where it is located at. locatedOn: information about cities located in islands. city: the name of the city 3 country: the country code where the city belongs to province: the province where the city belongs to island: the island it is (maybe only partially) located on Note that for a given city, there can be several islands where it is located on. islandIn: information the waters where the islands are located in. island: the name of the island sea: the sea where the island is located in lake: the sea where the island is located in river: the sea where the island is located in Note that an island can have coasts to several seas. MountainOnIsland: information which mountains are located in islands. mountain: the name of the mountain island: the name of the island Incrementally extended version: Mondial-II, 2012 4 B.2 Relationales Schema der Datenbank 29 ER-Diagram of the Mondial Database area name name name elevation pop. at City Language abbrev name depth elevation type elevation establ. out at speak at capital coordinates has to River length Estuary has is member name coordinates percent on to name Ethnic Grp pop belong area code Country pop.grw depth length name inf.mort borders merges Sea in name believe Religion gdp infl. governm. percent territory from dependent capital in percent Continent longitude coordinates name name coordinates name ↑on mountains Mountain elevation coordinates Province pop. latitude in elevation type type wasdependent coordinates: Island of in island in islands name area in territory from encompasses in gdp.agr gdp.serv gdp.ind in island in in island in indep.date area mountains name percent type Source to coordinates headq Organization coordinates Lake area in name area Desert coordinates Mondial-II, 2012 B.3 Darstellung von Verknüpfungen zwischen einzelnen Tabellen 31 Referential Dependencies of the Mondial Database Organization name ✄ abbreviation city ✄ country ✄ province ✄ established City ✄ name ✄ country ✄ province population elevation longitude latitude isMember ✁ organization ✁ country type Country name ✄ code capital province area population Province name ✁ country ✁ area population ✁ capital ✁ capprov ✄ ✄ ✄ Continent name area borders ✁ country1 ✁ country2 length Population ✁ country population growth infant mortality Politics ✁ country ✁ dependent independence ✁ wasdependent government • ✁ City Language ✁ country name percentage Religion ✁ country name percentage ✁ City EthnicGroup ✁ country name percentage Transitive dependencies are omitted. Incrementally extended version: Mondial-II, 2012 • geo river river ✁ country ✁ province ✁ ✁ • geo source river ✁ country ✁ province geo estuary river ✁ country ✁ province Lake ✄ name area depth elevation ✁ river type coordinates ✄ • ✄ • • ✄ • • • ✄ ✁ encompasses continent ✄ ✁ country percentage ✁ Country.code Economy ✁ country GDP agriculture service industry inflation ✄ ✄ geo lake lake ✁ country ✁ province geo sea sea ✁ country ✁ province located ✁ city ✁ country ✁ province river lake sea geo island island ✁ country ✁ province locatedOn ✁ city ✁ country ✁ province island mergesWith ✁ sea1 ✁ sea2 • • islandIn ✁ island ✁ sea • Island ✄ name islands area elevation type coordinates ✄ ✄ River ✄ name ✁ river ✁ lake ✁ sea length source mountains elevation estuary Sea ✄ name depth ✄ ✄ ✄ ✄ riverThrough ✁ river ✁ lake • mountainOnIsl. ✁ island ✁ mountain geo mountain mountain ✄ ✁ country ✁ province Mountain ✄ name mountains elevation type coordinates geo desert desert ✁ country ✁ province Desert ✄ name area coordinates ✄