PMG2224 1/DB Beleg/Gregor
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
=Datenbank-Beleg am Beispiel eines Juweliers=
== Ziel der Datenbank ==
Die Datenbank dient vordergründig der Speicherung von Informationen über ein Juweliergeschäft, welches Einkäufe tätigt und seine Produkte an Kunden weiterverkauft. Durch die strukturierte Organisation können Daten über den Juwelier, die Kunden und seine Ein- und Verkäufe effizient abgerufen und verwaltet werden. Außerdem erleichtert es die Analyse und Buchhaltung für den Geschäftsinhaber, aufgrund der vereinfachten Kontrolle von Beständen und Zahlungen. Durch eine Auswertung dieser Daten könnten gezielt Kundenpräferenzen erstellt werden. Dies hilft dem Juwelier wiederum bei der Geschäftsplanung und -optimierung.
== Modellierung in einem ERM==
[[Bild:Gregor_ERM_3.0.jpg]]
== Transformation in das Relationenmodell==
[[Bild:Gregor_Image2.jpg]]
== Erstellen der DB==
<code id="65bc9e747341c">
CREATE TABLE Edelsteine (
E_ID INT PRIMARY KEY,
Bezeichnung VARCHAR(25),
Preis_in_Euro DECIMAL(10,2),
V_ID INT,
FOREIGN KEY (V_ID) REFERENCES Juwelier(V_ID)
);
CREATE TABLE Juwelier (
V_ID INT PRIMARY KEY,
Name VARCHAR(25),
Adresse VARCHAR(50)
);
CREATE TABLE Ware (
W_ID INT PRIMARY KEY,
Bezeichnung VARCHAR(25),
Material VARCHAR(25),
Preis_in_Euro DECIMAL(10,2),
V_ID INT,
FOREIGN KEY (V_ID) REFERENCES Juwelier(V_ID)
);
CREATE TABLE Kunde (
K_ID INT PRIMARY KEY,
Name VARCHAR(25),
Email VARCHAR(25),
Adresse VARCHAR(50)
);
CREATE TABLE Bestellung (
K_ID INT,
W_ID INT,
PRIMARY KEY (K_ID, W_ID),
FOREIGN KEY (K_ID) REFERENCES Kunde(K_ID),
FOREIGN KEY (W_ID) REFERENCES Ware(W_ID)
);
CREATE TABLE Bezahlung (
K_ID INT,
V_ID INT,
PRIMARY KEY (K_ID, V_ID),
FOREIGN KEY (K_ID) REFERENCES Kunde(K_ID),
FOREIGN KEY (V_ID) REFERENCES Juwelier(V_ID)
);
</code>
<code id="65e9a22fd1e7c">
INSERT INTO Edelsteine VALUES (1, 'Mondstein', 1200.00, 1);
INSERT INTO Edelsteine VALUES (2, 'Larimar', 800.00, 1);
INSERT INTO Edelsteine VALUES (3, 'Moldavit', 1500.00, 1);
INSERT INTO Edelsteine VALUES (4, 'Lepidolith', 600.00, 1);
INSERT INTO Edelsteine VALUES (5, 'Labradorit', 700.00, 1);
INSERT INTO Juwelier VALUES (1, 'Woltärs Glitzerpalast','Besserverdienerstraße 3');
INSERT INTO Ware VALUES (1, 'Brosche', 'Bronze', 80.00, 1);
INSERT INTO Ware VALUES (2, 'Diadem', 'Silber', 200.00, 1);
INSERT INTO Ware VALUES (3, 'Haarnadel', 'Gold', 150.00, 1);
INSERT INTO Ware VALUES (4, 'Manschettenknöpfe', 'Platin', 300.00, 1);
INSERT INTO Ware VALUES (5, 'Krawattennadel', 'Titan', 100.00, 1);
INSERT INTO Kunde VALUES (1, 'Franka Freud', 'lustigeLustigkeit@roland.com', 'Spaßstraße 50, 53111 Bonn');
INSERT INTO Kunde VALUES (2, 'Annegret Knopf', 'Annegretchen@gmx.de', 'Mettigelstraße 24, 68165 Mannheim');
INSERT INTO Kunde VALUES (3, 'Knochen Trocken', 'Schwerverbrecher123@gmail.com', 'Am Hochsicherheitstrakt 3, 68165 Mannheim');
INSERT INTO Kunde VALUES (4, 'Wiltrud Schuchard', 'KrasivatschDance@pmg-bautzen.lernsax.de', 'Prager Straße 13, 10400 Prag');
INSERT INTO Kunde VALUES (5, 'Ruprecht Hintzen', 'NikolausKommtRaus@gmx.de', 'Weihnachtsstraße 2, 99705 Nordpol');
INSERT INTO Bestellung VALUES (1, 2);
INSERT INTO Bestellung VALUES (2, 3);
INSERT INTO Bestellung VALUES (3, 1);
INSERT INTO Bestellung VALUES (4, 5);
INSERT INTO Bestellung VALUES (5, 4);
INSERT INTO Bezahlung VALUES (1, 1);
INSERT INTO Bezahlung VALUES (2, 1);
INSERT INTO Bezahlung VALUES (3, 1);
INSERT INTO Bezahlung VALUES (4, 1);
INSERT INTO Bezahlung VALUES (5, 1);
</code>
== Erstellen von verschiedenen Abfragen==
'''Beispiel 1:'''
<run id="65bc9e747346d">
--alle Kundeninformationen
SELECT * FROM Kunde;
--alle Daten über den Juwelier
SELECT * FROM Juwelier;
--alle Waren bzw. Produkte
SELECT * FROM Ware;
</run>
'''Beispiel 2:'''
<run id="65ecbc82693d3">
--alle Waren von einem bestimmten Juwelier hergestellt (relevanter bei mehreren Juwelieren)
SELECT Bezeichnung, Material FROM Ware WHERE V_ID = 1;
--alle Bestellungen eines bestimmten Kunden
SELECT Ware.Bezeichnung, Ware.Material, Ware.Preis_in_Euro FROM Bestellung JOIN Ware ON Bestellung.W_ID = Ware.W_ID WHERE Bestellung.K_ID = 4;
</run>
'''Beispiel 3:'''
<run id="65ecbc8269429">
--alle Edelsteine, die teurer als 650 Euro sind
SELECT Bezeichnung, Preis_in_Euro FROM Edelsteine WHERE Preis_in_Euro > 650.00;
--Ware, welche genau 200 Euro kostet
SELECT Bezeichnung, Material, Preis_in_Euro FROM Ware WHERE Preis_in_Euro = 200.00;
--teuerster Edelstein
SELECT Bezeichnung, Preis_in_Euro FROM Edelsteine ORDER BY Preis_in_Euro DESC LIMIT 1;
</run>
== kritische Reflexion==
===Kardinalitäten===
'''Edelsteine und Juwelier (n:1)'''
Jeder Edelstein in der Tabelle Edelsteine ist einem Juwelier in der Tabelle Juwelier zugeordnet. Somit kann der Juwelier mehrere Edelsteine haben, aber jeder Edelstein ist, mit seinen differenzierten Eigenschaften, eindeutig einem Juwelier zugeordnet. Außerdem wird in diesem Beispiel lediglich ein Juwelier betrachtet, der keine unmittelbare Konkurrenz in der näheren Umgebung hat.
'''Juwelier und Ware (1-n)'''
Ähnlich wie bei den Edelsteinen ist auch jede Ware klar zugeordnet, da nur der Juwelier seine Ware bzw. die Schmuckstücke fertigt . Somit kann der Juwelier also mehrere Waren haben, aber jede Ware ist dem Juwelier eindeutig zugeordnet.
'''Bestellung / Kunde und Ware (n-m)'''
In der Tabelle Bestellung repräsentiert jede Zeile eine Bestellung, die von einem Kunden aufgegeben wurde und sich auf eine Ware bezieht. Ein Kunde kann somit also mehrere Waren bestellen und eine Ware kann von mehreren Kunden bestellt werden. Damit mehrere Kunden das gleiche Produkt bestellen können muss dabei natürlich vorrausgesetzt sein, dass dieses auch mehrfach im Lager vorrätig ist.
'''Bezahlung / Kunde und Juwelier (n-m)'''
Die Tabelle Bezahlung beinhaltet in jeder Zeile eine Zahlung, welche von einem Kunden an einen Juwelier getätigt wurde. Ein Kunde kann also bei mehreren Juwelieren einkaufen, aber der Juwelier kann ebenfalls Zahlungen von mehreren Kunden erhalten.
Würde man jedoch die Juwelierbranche in einem größeren Gebiet betrachten wollen, sollte man beachten, dass sich hierbei auch die Beziehungen von 1-n, zwischen den bereits bestehenden Tabellen, zu n-m-Beziehungen verändern. So betrachtet man also nicht mehr einen, sondern eine Vielzahl an Juwelieren, welche Edelsteine kaufen und daraus ihre Ware herstellen. Diese Ware muss jedoch nicht zwangsläufig von ausschließlich einem Juwelier hergestellt werden, weshalb die damit verbundene Beziehung ebenfalls zu einer n-m-Beziehung wird.
===ID´s und Redundanz===
In diesem Beispiel werden jeder Entität einstellige ID´s zugewiesen, welche für eine eindeutige Zuordnung der Daten dienen. Außerdem lassen sich somit Datensätze, aufgrund der Funktion als Primär bzw. Fremdschlüssel, vereinfacht miteinander verknüpfen. Bei größeren Datensäten und einer Vielzahl an Entitäten, sollte man jedoch auf mehrstellige ID´s zurückgreifen, um die Eindeutigkeit zu bewahren und Dopplungen zu vermeiden. Des Weiteren sollten überflüssige Informationen vermieden werden, um die Abfrage von Daten, als auch die Befüllung der Datensätze zu vereinfachen. Eine Optimierung für die dargestellte Datenbank wäre dabei beispielsweise eine größere Differenziertheit der ID´s.
== verwendete Quellen, Tools, etc.==
- [https://erdplus.com/ ERDPlus]
- [https://programmingwiki.de/Startseite Programming Wiki]
- [https://www.kraft-des-steines.de/ Edelsteine]