PMG/Kurs 1214/DB Beleg/Jakob
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
= Datenbank - Beleg_Jakob =
== DB Beleg ==
=== Aufgabe ===
'''Anforderungen an das Datenbank-Projekt'''
Bearbeiten Sie ein Datenbank-Projekt zu einem Thema Ihrer Wahl.
Dazu gehören:
* Ziel der Datenbank ("Begründung" der Themenwahl)
* Modellierung in einem ERM
* Transformation in das Relationenmodell
* Erstellen der DB (Struktur/notwendige Datensätze)
* Erstellen von verschiedenen Abfragen (unterschiedlicher „Schwierigkeit“)
'''Das Projekt ist komplett im PWiki zu bearbeiten.'''
Dabei arbeitet jeder auf einer eigenen Seite (siehe namentliche ''Links'' unten). <br>
Bilder sind als ''jpg'' hochzuladen.
Programmiersprache ist mit ''SQL'' auszuwählen.
Für den Programmcode die Codebox verwenden, für die Abfragen die Runbox.
''Alle Übungsseiten des PWiki stehen zur Verfügung (incl. Hilfeseiten)''
Wichtige Merkmale der Modelle (Kardinalität, Normalform, ...) sind zu erläutern.<br>
Das ERM ist als Bild (erzeugt mit dem Tool "Dia") einzufügen.
Bearbeitung des Projekts ''selbstständig'' während der Unterrichtsstunden ("Fernwartung" der Eingabeboxen und Seiten möglich).
vorgesehener Zeitraum: (20.) 27.01.2014 - 10.02.2014 (Abgabe)
(Quelle: [http://programmingwiki.de/PMG/Kurs_1214/DB_Beleg Aufgabe])
=== Grundlagen ===
Datenbasis: ''Datenmaterial, strukturierte Daten''
Datenbankmanagementsystem (DBMS): ''dient der Sortierung und Verwaltung von Daten''
Datenbank: ''Datenbasis und Datenbankmanagementsystem (DBMS) in Verbindung''
'''Beziehungen im ER-Modell (Kardinalitäten):'''
1:1-Beziehung: ''Jeder Entität der Entitymenge A wird genau eine Entität der Entitymenge B zugeordnet und umgekehrt.''
1:n-Beziehung: ''Jeder Entität der Entitymenge A können mehrere Entitäten der Entitymenge B zugeordnet werden, umgekehrt kann jedoch jeder Entität der Menge B nur genau eine Entität der Menge A zugeordnet werden.''
m:n-Beziehung: ''Jeder Entität der Entitymenge A können mehrere Entitäten der Entitymenge B zugeordnet werden und umgekehrt.''
'''Normalformen (ENF, ZNF):'''
ENF - Erste Normalform: ''jeder Spalte wird nur eine Information zugeordnet''
ZNF - Zweite Normalform: ''simultane Aufteilung der Entitäten und Entitymengen in Tabellen''
= Thema =
Mein Thema ist der Versandhandel, weil es sich da um einen ünerschaubaren Sachverhalt handelt.
<language>SQL</language>
== ER-Modelle ==
=== Bestellung ===
Bei der Bestellung ist wie bei einem üblichen Vesandhandel. Der Kunde (Kundennummer) bestellt einen Artikel (Artikelnummer) bei dem Händler. Da es sich hier bei um eine m:n Beziheung handelt muss im Relatonen-Modell eine neue Tabelle (Bestellungsnummer) entstehen.
[[Bild:Jakiboi_Diagrammartikel.jpeg]]
=== Bestelleingang ===
Die Bestellung, wird nun vom spezifischen Programm registriert und geht ins nächst gelegene Lager ein. Dort wird der Bestand geprüft und die Bestellung anschließend zu einem zuständigen Mitarbeiter geschickt. Dieser beliebige Mitarbeiter geht nun zu dem speziellen Regal, wo sich genau dieser Aritkel befindet. Dies ist also eine 1:1 Beziehung.
[[Bild:Jakiboi_Diagrammlager.jpeg]]
=== Versandvorgang ===
Nachdem die Bestellung verpackt wurde, kann sie von mehreren Anbietern verschickt werden (z.B. "DHL" oder "Hermes". Dabei wird eine Versandgebühr von 4.99 € fällig, für alle Bestellungen, die unter 70.00 € sind.
[[Bild:Jakiboi_Diagrammversand.jpeg]]
=== Zusammenfassung ===
[[Bild:Jakiboi_Alles.jpeg]]
== Relationenmodell ==
=== Bestellung ===
'''kundentabelle''' (KUNDENNR;Vorname;Name;Alter;Ort;plz;Straße;Hausnr)
'''artikeltabelle''' (ARTIKELNR;Art;Bestand;Name;Preis)
'''bestelltabelle''' (BESTELLNR;''Kundenr;Artikelnr'';Gesamtpreis)
=== Bestelleingang ===
'''regaltabelle''' (REGALNR)
'''artikeltabelle''' (ARTIKELNR;Preis;Art;Bestand;''Regalnummer'')
=== Versandvorgang ===
'''versandtabelle''' (VERSANDID;Name;''Bestellnr'')
'''bestelltabelle''' (BESTELLNR;''Kundenr;Artikelnr'';Gesamtpreis)
FOREIGN KEY (BESTELLNR); REFERENCES Verlag(BESTELLNR); BSTELLNR NOT NULL;
=== Alle Modelle zusammen ===
'''kundentabelle''' (KUNDENNR;Vorname;Name;Alter;Ort;plz;Straße;Hausnr)
'''artikeltabelle''' (ARTIKELNR;Preis;;Name;Art;Bestand;''Regalnr'')
'''bestelltabelle''' (BESTELLNR;''Kundenr;Artikelnr'';Gesamtpreis)
'''regaltabelle''' (REGALNR)
'''versandtabelle''' (VERSANDID;Firmenname;''Bestellnr'')
= Datenbank =
<code id="52ee371cbf1bf">
DROP TABLE IF EXISTS kundentabelle
Create TABLE kundentabelle (
KUNDENNR integer AUTO_INCREMENT,
vorname varchar (20),
name varchar (20),
old varchar (6),
ort varchar (20),
plz varchar (6),
strasse varchar (255),
hausnr varchar (6),
PRIMARY KEY (KUNDENNR)
);
DROP TABLE IF EXISTS regaltabelle
Create TABLE regaltabelle (
REGALNR varchar (6),
PRIMARY KEY (REGALNR)
);
DROP TABLE IF EXISTS artikeltabelle
Create TABLE artikeltabelle (
ARTIKELNR integer AUTO_INCREMENT,
Name varchar (255),
Preis varchar (20),
Bestand varchar (255),
Art varchar (255),
REGALNR varchar (6),
PRIMARY KEY (ARTIKELNR)
FOREIGN KEY (REGALNR) REFERENCES regaltabelle (REGALNR)
);
DROP TABLE IF EXISTS bestelltabelle
Create TABLE bestelltabelle (
BESTELLNR integer AUTO_INCREMENT,
KUNDENNR integer,
ARTIKELNR integer,
PRIMARY KEY (BESTELLLNR)
FOREIGN KEY (KUNDENNR) REFERENCES kundentabelle (KUNDENNR)
FOREIGN KEY (ARTIKELNR) REFERENCES artikeltabelle (ARTIKELNR)
);
DROP TABLE IF EXISTS versandtabelle
Create TABLE versandtabelle (
VERSANDID integer AUTO_INCREMENT,
Firmanname varchar (20),
BESTELLNR integer,
PRIMARY KEY (VERSANDID)
FOREIGN KEY (BESTELLNR) REFERENCES bestelltabelle (BESTELLNR)
);
INSERT INTO kundentabelle (KUNDENNR,vorname,name,geburtstag,ort,plz,strasse,hausnr)VALUES
('12345','Tom','Zieschank','24.08.1995','Kalix','02694','Baumstraße','69')
INSERT INTO kundentabelle (KUNDENNR,vorname,name,geburtstag,ort,plz,strasse,hausnr)VALUES
('23451','Paul','Schlosser','14.1.1996','Kleinwumpe','26894','Gechtelstraße','7')
INSERT INTO kundentabelle (KUNDENNR,vorname,name,geburtstag,ort,plz,strasse,hausnr) VALUES
('34512','Alexander','Rudel','01.03.1996','Bozen','48842','Nymphenweg','0')
INSERT INTO kundentabelle (KUNDENNR,vorname,name,geburtstag,ort,plz,strasse,hausnr) VALUES
('45123','Georg','Hennersdorf','08.05.1996','Tiefkapelle','00815','Georgsallee','18')
INSERT INTO kundentabelle (KUNDENNR,vorname,name,geburtstag,ort,plz,strasse,hausnr) VALUES
('51234','Lucas','Pufe','14.07.1995','Bozen','48842','Sittichweg','69')
INSERT INTO regaltabelle (REGALNR)VALUES
('7')
INSERT INTO regaltabelle (REGALNR)VALUES
('8')
INSERT INTO regaltabelle (REGALNR)VALUES
('487')
INSERT INTO regaltabelle (REGALNR)VALUES
('465')
INSERT INTO regaltabelle (REGALNR)VALUES
('654')
INSERT INTO regaltabelle (REGALNR)VALUES
('794')
INSERT INTO regaltabelle (REGALNR)VALUES
('651')
INSERT INTO regaltabelle (REGALNR)VALUES
('666')
INSERT INTO regaltabelle (REGALNR)VALUES
('169')
INSERT INTO regaltabelle (REGALNR)VALUES
('76')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('123456','Prinzessinen Diadem "DIEANA"','149,99 €','3','Bekleidung','7')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('234561','Prinzessinen Diadem "SOPHIA"','129,99 €','1','Bekleidung','8')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('978451','Faust - 1.Teil','2.99 €','250 ','Literatur','487')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('872358','Der Prozess','3.29 €','120','Literatur','465')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('351475','Shisha-Tabak "Blue Moon" - 100g','12.99€','Konsumgüter','654')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('984685','Shisha-Tabak "Rising Sun" - 100g','10.99€','Konsummgüter','794')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('204658','86´Carbanet-Sauvignon - 0.75 l','39.90€','Luxusgüter','651')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('544546','Stroh 80 - 0.5 l','29.90€','Luxusgüter','666')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('111111','"Geilon"- MC FITTI','12.99€','CD-Alben','169')
INSERT INTO artikeltabelle (ARTIKELNR,Name,Preis,Bestand,Art,Regal)VALUES
('158498','"Weekend - Am Wochenende Rapper"','9.90€','CD-Alben','76'
INSERT INTO bestelltabelle (BESTELLNR,KUNDENNR,ARTIKELNR,Gesamtpreis)VALUES
('1','51234','111111','12.99€')
INSERT INTO bestelltabelle (BESTELLNR,KUNDENNR,ARTIKELNR,Gesamtpreis)VALUES
('2','45123','204658','39.90€')
INSERT INTO bestelltabelle (BESTELLNR,KUNDENNR,ARTIKELNR,Gesamtpreis)VALUES
('3','34512','123456','149.99€')
INSERT INTO bestelltabelle (BESTELLNR,KUNDENNR,ARTIKELNR,Gesamtpreis)VALUES
('4','23451','872358','3.29€')
INSERT INTO bestelltabelle (BESTELLNR,KUNDENNR,ARTIKELNR,Gesamtpreis)VALUES
('5','12345','351475','12.99€')
INSERT INTO versandtabelle (VERSANDID,Firmenname,BESTELLNR)
('44','Mercurius','1')
INSERT INTO versandtabelle (VERSANDID,Firmenname,BESTELLNR)
('40','Ante','2')
INSERT INTO versandtabelle (VERSANDID,Firmenname,BESTELLNR)
('77','LHD','4')
INSERT INTO versandtabelle (VERSANDID,Firmenname,BESTELLNR)
('44','Mercurius','3')
INSERT INTO versandtabelle (VERSANDID,Firmenname,BESTELLNR)
('40','Ante','5')
</code>
= Abfragen =
== Leichte Aufgaben ==
'''Wie viele Kunden leben in Bozen?'''
<run id="52ef54edeb37c"></run>
'''Welches ist das teuerste Produkt im Handel?'''
<run id="52ef9e241b8ef"></run>
== Mittelschwere Aufgaben ==
'''Wie viele Regale sind für CD-Alben ausgelegt?'''
<run id="52ef9e241b971"></run>
'''Wie viele der Kunden dürfen "Stroh 80" kaufen (Nach Jugendschutzgesetz der BRD)'''
<run id="52ef9e241b9ea"></run>
== Schwere Aufgaben ==
'''Welcher Lieferant ist nur für Bozen zuständig?'''
<run id="52ef9e241ba62"></run>
==Fazit==
Die Datenbanken in Onlineversandhäusern sind essenziell. Ohne ihnen sind Probleme bei der richtigen Bestellung und Zustellung schon programmiert. Der Nachteil ist, dass man viele persöhnliche Daten bzw. Vorlieben preisgeben muss (Shisha-Tabak).