Florians Übung

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SQL</language>
=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.

=ERM=
[[Bild:Flo_Bu_ERM.png |1000px]]
===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.

=RM=
==Variante 1 in Tabellenform==
[[Bild:Flo Bu_RM.jpg |1000px]]



==Variante 2 in Zeilenform==
<br>
'''Beckentabelle'''  ('''Becken_ID'''; Wasserart; Volumen)

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

'''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 (BeckenID) in der Tabelle Fischart dargestellt. Die n:m-Beziehung wird durch die Zwischentabelle Kauft realisiert, die die Fremdschlüssel KundenID und FischID enthält. Zusätzlich sorgt eine BestellID als Primärschlüssel für die eindeutige Identifikation jeder Bestellung.

<br><br>
=Datenbank=

<code id="698307c1cd1e6">

DROP TABLE IF EXISTS Becken;
CREATE TABLE Becken (
    Becken_ID INT,
    Wasserart VARCHAR(30),
    Volumen INT,
    primary key (Becken_ID)
);

DROP TABLE IF EXISTS Fischart;
CREATE TABLE Fischart (
    Fisch_ID INT,
    Name VARCHAR(50),
    Preis DECIMAL(5,2),
    Bestand INT,
    Becken_ID INT,
    primary key (Fisch_ID),
    foreign key (Becken_ID) references Becken(Becken_ID)
);

DROP TABLE IF EXISTS Kunde;
CREATE TABLE Kunde (
    Kunden_ID INT,
    Name VARCHAR(50),
    Strasse VARCHAR(50),
    Hausnummer VARCHAR(10),
    Postleitzahl VARCHAR(10),
    primary key (Kunden_ID)
);
DROP TABLE IF EXISTS Kauft;
CREATE TABLE Kauft (
    Bestellnummer INT,
    Kunden_ID INT,
    Fisch_ID INT,
    Kaufdatum VARCHAR(30),
    Anzahl INT,
    Gesamtpreis DECIMAL(7,2),  
    primary key (Bestellnummer),  
    foreign key (Fisch_ID) references Fischart (Fisch_ID),
    foreign key (Kunden_ID) references Kunde (Kunden_ID)
);

INSERT INTO Becken VALUES ('1', 'Süßwasser', '100');
INSERT INTO Becken VALUES ('2', 'Süßwasser', '60');
INSERT INTO Becken VALUES ('3', 'Meerwasser', '200');

INSERT INTO Fischart VALUES ('1', 'Guppy', 2.50, '30', '1');
INSERT INTO Fischart VALUES ('2', 'Neonsalmler', 1.80, '50', '1');
INSERT INTO Fischart VALUES ('3', 'Kugelfisch', 15.00, '5', '2');
INSERT INTO Fischart VALUES ('4', 'Clownfisch', 25.00, '8', '3');

INSERT INTO Kunde VALUES ('1', 'Max Müller', 'Hauptstraße', '12', '12345');
INSERT INTO Kunde VALUES ('2', 'Laura Schmidt', 'Bahnhofstraße', '7A', '54321');
INSERT INTO Kunde VALUES ('3', 'Tim Wagner', 'Gartenweg', '3', '11111');

INSERT INTO Kauft VALUES ('1', '1', '1', '2026-02-01', '5', 12.50);
INSERT INTO Kauft VALUES ('2', '1', '2', '2026-02-01', '10', 18.00);
INSERT INTO Kauft VALUES ('3', '2', '4', '2026-02-02', '2', 50.00);
INSERT INTO Kauft VALUES ('4', '3', '3', '2026-02-02', '1', 15.00);


</code>

=Abfragen=

<run id="698307c1cd27c">
select * 
from Kunde;
</run>

=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.
=Quellen und Tools=
->ERDPlus [https://erdplus.com]– für die Erstellung des ER-Modells

->Programming Wiki – für die Umsetzung in SQL und Tests der Tabellen

->Learning View [https://learningview.org/]