Florian

Aus ProgrammingWiki

Inhaltsverzeichnis

Aquariengeschäft – Datenbankprojekt

Ziel der Datenbank

Die Datenbank dient dazu, die Becken und Fische eines Aquariengeschäfts sowie die Käufe der Kunden zu verwalten. Dabei soll abgebildet werden, welche Fische in welchen Becken sind und welche Kunden welche Fische kaufen. Damit kann auch der Jahresumsatz und die Nachfrage ermittelt werden.

ER-Modell

Flo_Bu_ERM.png

Erläuterung des Modells

Das ER-Modell beschreibt die Daten eines Aquariengeschäfts mit den Entitäten Becken, Fischart und Kunde. Ein Becken kann mehrere Fischarten enthalten, daher besteht zwischen Becken und Fischart eine 1:n-Beziehung. Zwischen Kunde und Fischart liegt eine n:m-Beziehung, da ein Kunde mehrere Fischarten kaufen kann und eine Fischart von mehreren Kunden gekauft werden kann. Diese Beziehung wird durch kauft mit den Attributen Kaufdatum, Anzahl und Gesamtpreis ergänzt. Die Attribute "Namen" sind nicht eindeutig, da es "Max Müller" mehrmals geben könnte. Deshalb kommen die "ID's" ins Spiel für die Eindeutigkeit.

Relationales Modell

Variante 1 in Tabellenform

Flo Bu_RM.jpg

In diesem Modell liegt leider ein Fehler vor, da der Primärschlüssel Fisch_ID in der Beckentabelle als Fremdschlüssel auftaucht. Dies ist bei der 1:n Beziehung nicht richtig, aber mir ist es leider erst nachher aufgefallen.

Variante 2 in Zeilenform


Beckentabelle (Becken_ID; Wasserart; Volumen)

Fischarttabelle (Fisch_ID; Name; Preis; Bestand; Becken_ID)

Kundentabelle (Kunden_ID; Name; Straße; Hausnummer; Postleitzahl)

Kauftabelle (Bestellnummer; Kaufdatum; Anzahl; Gesamtpreis; Fisch_ID; Kunden_ID)

Erläuterung des Modells

Im relationalen Modell werden die Entitäten als Tabellen umgesetzt. Die 1:n-Beziehung wird durch einen Fremdschlüssel (Becken_ID) in der Tabelle Fischart dargestellt. Die n:m-Beziehung wird durch die Zwischentabelle Kauf realisiert, die die Fremdschlüssel Kunden_ID und Fisch_ID enthält. Zusätzlich sorgt eine Bestellnummer als Primärschlüssel für die eindeutige Identifikation jeder Bestellung, weil ein Kunde an einem tag die gleiche Bestellung mehrmals machen kann. Man könnte stattdessen auch eine Version ohne Primärschlüssel machen, wenn man eine Uhrzeit einfügt als Attribut. Diese kann ja an dem selben Tag nur schwer zwei mal vorkommen. Die Adresse wurde bei der Kundentabelle ausgeführt, damit die Attribute atomar (unteilbar) sind.



SQL-Implementierung

Beispielabfragen

kritische Reflexion zu Modellierung und Umsetzung

Die Modellierung der Datenbank zeigt, dass die Abbildung von Beziehungen zwischen Becken, Fischarten und Kunden nicht immer trivial ist. Besonders die n:m-Beziehung zwischen Kunde und Fischart erfordert eine Zwischentabelle, um Käufe korrekt zu speichern, was die Komplexität erhöht. Auch die Entscheidung, die Adresse aufzuteilen und die Anzahl der Fische pro Kauf zu erfassen, verdeutlicht, dass praktische Anforderungen an die Datenbank zu Anpassungen im Modell führen. Kritisch ist, dass bestimmte Informationen, wie z. B. die genaue Anzahl einzelner Fische in verschiedenen Becken, nur schwer eindeutig dargestellt werden können. Dies zeigt, dass bei der Modellierung Abwägungen zwischen Genauigkeit, Übersichtlichkeit und Umsetzbarkeit notwendig sind. Schwierig war es beim SQL darauf zu achten, dass wenn man Zahlen als INT, Datum als DATE und Buchstaben als VARCHAR haben möchte, sehr stark auf die Einhaltung achten muss. Es bringt aber den Vorteil, dass zum Beispiel keine Namen in der Zeile Datum landet. Man könnte ebenfalls den Befehl "NOT NULL" hinter die jeweiligen Zeilen machen, damit die Datensätze nicht leer sind. Man hätte den Gesamtpreis auf der Rechnung außerdem nicht als Attribut verwenden sollen, sondern wie in Abfrage 3 aus Preis und Anzahl jeweils errechnen.

Quellen und Tools

  • Programming Wiki – für die Umsetzung in SQL und Tests der Tabellen
  • ChatGPT - für die Erstellung der Datensätze, um Zeit zu sparen