DCV 2022 09/datenbank: Unterschied zwischen den Versionen

Aus CCWiki
Zur Navigation springen Zur Suche springen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 203: Zeile 203:
* Ein Konto kann mehrere Kunden haben, diese haben dann eine unterschiedliche Rolle (Besitzer, Zeichnungsberechtigt, etc...)
* Ein Konto kann mehrere Kunden haben, diese haben dann eine unterschiedliche Rolle (Besitzer, Zeichnungsberechtigt, etc...)
* Eine Transaktion muss ein Quell- und ein Zielkonto haben
* Eine Transaktion muss ein Quell- und ein Zielkonto haben
[[Datei:BankDatenbank.png|200px|mini|ohne]]


==== Aufgabe: Anlegen der Datenbank in MySQL ====
==== Aufgabe: Anlegen der Datenbank in MySQL ====

Aktuelle Version vom 29. November 2022, 14:26 Uhr

Im folgenden finden sich Übungen für das Thema Datenbanken. Weiters soll direkt ein Überblick über die Themen erfolgen. Als DatenBankManagement System wird MySQL[1] verwendet

Überblick

Ein grundlegendes Verständnis folgender Begriffe soll erlangt werden. Diese sind nicht chronologisch geordnet.

  • Entity Relation Diagramme erstellen (Chen Notation)
  • Implementieren des ER Diagramms in MySQL
  • Primär- und Fremdschlüssel
    • Erstellen von Fremdschlüssel Constraints
  • SQL Queries
    • Daten Abfragen
USE mondial;
SELECT * from City limit 5;

-- Zeigt alle Spalten, alle Zeilen aus den country Tabelle
SELECT * FROM mondial.country;

-- Konstant als Text
SELECT 'Hello World!' Greeting;

-- Zeigt alle Spalten, erste 5 Zeilen aus den country Tabelle
SELECT * FROM mondial.country limit 5;

-- Zeigt die Spalten Name und Capital der erste 5 Zeilen aus den country Tabelle
SELECT Name, Capital FROM mondial.country limit 5;

-- Zeigt die Spalten Name und Capital mit eigenen Namen
SELECT Name Land, Capital Hauptstadt FROM mondial.country limit 5;

-- Abfrage mit Filter auf Name
SELECT Name, Capital FROM mondial.country WHERE Name = 'Austria';

-- Abfrage mit Filter auf Population
SELECT Name, Capital FROM mondial.country WHERE Population < 1000000;

-- Abfrage mit Filter auf Population
SELECT Name, Capital, Population FROM mondial.country WHERE Population BETWEEN 1000000 AND 2000000;

-- Abfrage mit Filter auf Name beginnend mit A
SELECT Name, Capital, Population FROM mondial.country WHERE Name LIKE 'A%';

-- Abfrage mit Filter auf Name am Ende mit A
SELECT Name, Capital, Population FROM mondial.country WHERE Name LIKE '%A';

-- Abfrage mit Filter mit NOT Operator
SELECT Name, Capital, Population FROM mondial.country WHERE Name NOT LIKE 'A%';

-- Abfrage mit Filter mit OR Operator
SELECT Name, Capital, Population FROM mondial.country WHERE Name LIKE 'A%' OR Population < 1000000;

-- Abfrage mit Filter mit AND Operator
SELECT Name, Capital, Population FROM mondial.country WHERE Name LIKE 'A%' AND Population < 1000000;
    • Tabellen verknüpfen mit WHERE und INNER JOIN
    • Unterschied zwischen INNER JOIN und LEFT OUTER JOIN und RIGHT OUTER JOIN
    • Einfügen mittels INSERT
    • Löschen mittels DELETE
    • Aktualisieren mittels UPDATE
  • Anbindung an die Datenbank mittels JDBC in Java
    • Verbindung zur Datenbank herstellen
    • Daten anlegen
    • Daten abrufen
    • Daten löschen

Übungen

Als Voraussetzung wird eine funktionierende MySQL installation mit MySQL Workbench vorausgesetzt. MySQL Workbench ist ein grafisches Tool um mit MySQL zu arbeiten.

Der Download für beide Tools findet sich hier.

  • Add Product
  • MySQL Server hinzufügen
  • MySQL Workbench hinzufügen

Für den Bereich Structured Query Language wird weiters vorausgesetzt dass eine Datenbank mit folgenden Inhalten existiert:

Ein großer Dank geht an die Uni Göttingen für die Bereitstellung der Mondial[1] Datenbank
  1. Zuerst MySQL Workbench öffnen, mit dem DBMS verbinden.
  2. File -> Open Sql Script -> Schema auswählen (zuerst das zip entpacken)
  3. Mit dem Blitz ausführen
    1. Tritt ein Fehler auf >>,ORACLE<< aus der ersten Zeile entfernen
  4. File -> Open Sql Script -> Input auswählen (zuerst das zip entpacken)
  5. Mit dem Blitz ausführen
  6. Nun sollte die Datenbank Mondial existieren und es geht weiter mit den übungen zu SQL Abfragen

SQL Abfragen

Verschiedene Abfragen um Tabellen zu verbinden. Verwende für die Abfragen die Mondial Datenbank.

Mondial ER Diagramm[2]
Mondial Abhängigkeiten[1]

Aufgabe SQL Queries

Wie viele Einwohner hat Österreich?
Wie viele Einwohner hat der Kontinent Europa?
Welche Flüsse fließen durch Österreich?
Welche Flüsse fließen durch Europa (nur den Flussnamen)?
Wie viel Prozent der Menschen leben im Kontinent Europa?
Alle Länder die mit einem A anfangen
Alle Länder die mit einem A anfangen und deren Bundesländer mit Einwohnerzahl, sortiert nach Einwohnerzahl
Alle Flüsse die durch Europa fließen (nur Flüsse und deren Länge), sortiert nach Länge
Alle Inseln im Pazifik mit >50% islamischem Bekenntnis
Alle 3000er, welche in einem Land sind, welches zu mindestens 60% römisch Katholisch ist
Alle Länder mit mindestens einem See mit mindestens 100 Meter Tiefe und mindestens einem Berg mit mindestens 1500 Höhenmeter
Einwohnerzahl pro Religion
Alle Länder, nur die Namen und die Meere dazu (keine Null Werte)
Alle Länder, nur die Namen, und wenn sie haben, das Meer dazu
Das Unabhängigkeitsdatum von Ländern die eine Wüste haben und die ethnische Gruppe African

Hier nicht klicken

Aufgabe SQL Queries

Welche Länder haben genau 3 Städte? Welche sind sie?
Welche sind die 3 größte Städte von Amerika als Kontinent?
Was ist der größte Berg von Österreich? Wie hoch ist es?
Was ist der größte Berg von Europa? Wie hoch ist es?
Was ist der größte Berg pro Kontinent? Wie hoch sind sie?
Welche Land hat am meisten anerkannten Religionen? Wie viel?
Welche Organisationen haben deren Hauptsitz in Österreich? Wie viel Mitglieder haben diese Organisationen?
Was sind die Top 10 Sprachen? Wie viele native Speaker sprechen diese Sprache?

ER Entwurf

Für den Entwurf von Entity Relationship Modellen gibt es mehrere Möglichkeiten. Soll von einem bestehenden Datenbestand (in unnormalisierter Form) ein Datenbankmodell abgeleitet werden, so können die Normalformen angewandt werden, auf diese werden wir hier jedoch nicht eingehen. Wird ein ER-Modell direkt anhand einer Problemstellung entworfen, so ist diese bei korrektem Entwurf, inhärent normalisiert.

Für die ER-Modellierung gibt es verschiedene Notationen:

Für die folgenden ER-Modelle soll die Chen Notation angewendet werden, diese ist am einfachsten und am wenigsten fehleranfällig. Nach der ER-Modellierung kann direkt ein logischer Entwurf abgeleitet werden, welcher dann "direkt" in die Datenbank übertragen werden kann.

Als Zeichenprogramm zum Datenbank Entwurf eignet sich Dia

Beispiele

Im folgenden finden sich einige Beispiele zur Übung des ER-Entwurfs. Es ist dabei sehr wichtig aus der textuellen Problemstellung herauszufinden was Teil des ER-Entwurfs ist, und was zum logischen Teil der Anwendung gehört und somit nichts mit dem Entwurf zu tun hat. Weiters ist es sehr wichtig, etwaige Lücken in der Problemstellung zu erkennen und auszufüllen.

Für jedes Beispiel gilt:

  • ER-Entwurf erstellen (inklusive aller wichtigen Attribute)
  • Logischer Entwurf (Entweder in textueller oder tabellarischer Form)

Übungsfirma

Eine Firma hat mehrere Mitarbeiter, diese arbeiten in einer Abteilung. Ein Mitarbeiter hat einen Vorgesetzten, dieser ist selbst wieder ein Mitarbeiter. Weiters gibt es Projekte an denen mehrere Mitarbeiter beteiligt sind, Mitarbeiter selbst können auch an mehreren Projekten mitarbeiten.

Übungsfirma2

Ergänze den Entwurf aus dem vorhergehenden Beispiel so, dass Mitarbeiter in einem gewissen Zeitraum an einem Projekt arbeiten können.

Datei:Uebungsfirma all.zip Enthält ER-Entwurf, logischer Entwurf, SQL Statements
ER-Diagramm Übungsfirma

Zoo

Mehrere in ganz Deutschland verteilte Zoos sollen mittels einer Datenbank verwaltet werden. Die Tiere werden von Pflegern gepflegt und befinden sich in Gehegen. Außerdem bekommen die Tiere eine spezielle Futtermischung, welche von Lieferanten geliefert wird.

Datei:Zoo all.zip

Zoo ER-Diagramm

Druckerproduzent

Eine Firma, die Drucker herstellt, benötigt eine Datenbank zur Verwaltung ihrer Geschäftsprozesse. Die Firma hat mehrere Abteilungen, wie zum Beispiel Lager, Fertigung, Vertrieb. Zur Herstellung der Drucker werden Zukaufteile benötigt, die also nicht in der Fertigung selbst hergestellt werden. Der Fabrikleiter möchte auch einen Überblick über die Mitarbeiter mit allen relevanten Daten haben.

Restaurant

Sie besitzen ein Restaurant, natürlich haben Sie Angestellte die entweder Koch, Kellner oder Lieferant sein können, überlegen Sie sich die nötigen Attribute selbst. Kunden können bei Ihnen im Restaurant bestellen und dort essen, Sie bieten aber auch das Angebot die Bestellung nach Hause zu liefern. Der Kellner ist für die Bearbeitung der Bestellung zuständig und teilt die Kunden zu den jeweiligen Tischen ein.

Ferienhausverwaltung

Eine Ferienhausvermietung braucht ein Datenbanksystem für die Verwaltung der Buchungen. Zwischen zwei Buchungen muss immer eine Reinigungskraft das gesamte Haus reinigen und auf Schäden kontrollieren. Für diese Reinigung und Kontrolle braucht die Reinigungskraft zwischen 3-6 Stunden, je nach Größe / Kategorie bzw. Nächtigungspreis des Hauses. Die Ferienhäuser werden demnach in drei Klassen unterteilt.

  • < 150 € / Nacht (Reinigung & Kontrolle: 3 Stunden)
  • < 500 € / Nacht (Reinigung & Kontrolle: 5 Stunden)
  • > 500 € / Nacht (Reinigung & Kontrolle: 6 Stunden)

Bei Schäden muss das Haus für die Zeit, bis der Schaden repariert wurde, gesperrt werden. Die Ferienhäuser haben zwischen ein und vier Stockwerke (inkl. Keller), sowie unterschiedliche Ausstattungen (Bsp. Garten, WLAN, Balkon, ...). Fügen Sie weitere Attribute (Bsp. Quadratmeter) hinzu, welche Sie für wichtig erachten.

Datenbank Anwendung

Im folgenden soll in mehreren Schritten eine Datenbank Anwendung modelliert und erstellt werden. Diese Anwendung soll ein einfaches Zahlungssystem mit Überweisung und Bankomat beeinhalten.

  • Kunden sollen angelegt werden
  • Es sollen Konten angelegt werden
  • Konten sollen Geld überweisen/einzahlen und überweisen können
  • Jede Transaktion soll gespeichert werden mit Betrag, Quelle, Ziel und Datum
  • Der Kontostand soll aufgrund aller vorhergehenden Transaktion berechnet werden

Aufgabe: Entity Relation (ER) Diagramm erstellen

Entwirf ein korrektes ER Diagramm für die Datenbankanwendung, zumindest sollen die Tabellen Kunde, Konto und Transaktion enthalten sein. Achte auf die korrekte Beziehung zwischen den Tabellen.

  • Ein Kunde kann mehrere Konten haben
  • Ein Konto kann mehrere Kunden haben, diese haben dann eine unterschiedliche Rolle (Besitzer, Zeichnungsberechtigt, etc...)
  • Eine Transaktion muss ein Quell- und ein Zielkonto haben

Aufgabe: Anlegen der Datenbank in MySQL

Implementiere das erstellte ER Diagramm in MySQL. Achte auf das Anlegen von korrekten Primär- und Fremdschlüsseln.

Aufgabe: Verbinden der Datenbank (JDBC) in Java

Verbinde dich über die JDBC Schnittstelle in Java mit der angelegten Datenbank. Das Anlegen einer Testdatenbank kann sehr hilfreich sein um Tests zu schreiben.

Aufgabe: Kunden/Konten und Transaktionen in Java anlegen und abrufen

Erstelle die Modelle für deine Tabellen in Java und ermögliche über Methoden das Erstellen, Aktualisieren, Lesen und Löschen.

Create Read Update Delete

Aufgabe: (Kommandozeilenanwendung) für den Bankomat erstellen

Erstelle ein Userinterface für die Bankomat Anwendung.

  • Der Benutzer soll authentifiziert werden
  • Es soll eine entsprechende Auswahl an Konten angezeigt werden
  • Einzahlen/Auszahlen soll möglich sein
  • Überweisung an anderes Konto

Quellen