PMG2224 4/DB Beleg/Soraya
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
<code id="65f9e7085a3db">DROP TABLE IF EXISTS Fahrzeug;
CREATE TABLE Fahrzeug
(
id INT,
Name VARCHAR(128),
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS Fahrlehrer;
CREATE TABLE Fahrlehrer
(
id INT,
Vorname VARCHAR(128),
Nachname VARCHAR(128),
Telefonnummer VARCHAR(16),
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS Fahrschueler;
CREATE TABLE Fahrschueler
(
id INT,
Vorname VARCHAR(128),
Nachname VARCHAR(128),
Telefonnummer VARCHAR(16),
PRIMARY KEY (id)
);
DROP TABLE IF EXISTS Fahrstunde;
CREATE TABLE Fahrstunde
(
id INT,
Start DATETIME,
Ende DATETIME,
istSonderfahrt INT,
kostenProStunde FLOAT,
istPruefung INT,
FahrschuelerID INT,
FahrzeugID INT,
PRIMARY KEY (id),
FOREIGN KEY (FahrschuelerID) REFERENCES Fahrschueler(id),
FOREIGN KEY (FahrzeugID) REFERENCES Fahrzeug(id)
);
DROP TABLE IF EXISTS TheorieUnterricht;
CREATE TABLE TheorieUnterricht
(
Start DATETIME,
Ende DATETIME,
istPruefung INT,
id INT,
FahrlehrerID INT,
PRIMARY KEY (id),
FOREIGN KEY (FahrlehrerID) REFERENCES Fahrlehrer(id)
);
DROP TABLE IF EXISTS nimmtTeil;
CREATE TABLE nimmtTeil
(
FahrschuelerID INT,
TheorieUnterrichtID INT,
PRIMARY KEY (FahrschuelerID, TheorieUnterrichtID),
FOREIGN KEY (FahrschuelerID) REFERENCES Fahrschueler(id),
FOREIGN KEY (TheorieUnterrichtID) REFERENCES TheorieUnterricht(id)
);
DROP TABLE IF EXISTS fuertDurch;
CREATE TABLE fuertDurch
(
istPruefer INT,
FahrlehrerID INT,
FahrstundeID INT,
PRIMARY KEY (FahrlehrerID, FahrstundeID),
FOREIGN KEY (FahrlehrerID) REFERENCES Fahrlehrer(id),
FOREIGN KEY (FahrstundeID) REFERENCES Fahrstunde(id)
);
</code>
<code id="65f9e3085aed2">INSERT INTO Fahrlehrer (Vorname, Nachname, Telefonnummer) values
("Rainer","Schmidt",'01629156677'),
("Katrin","Müller",'0162466577'),
("Klaus","Kanns",'0162988877'),
("Hans","Auch",'0162988579');
INSERT INTO Fahrzeug (Name) values ("Ford Focus"),("VW Up"),("VW Polo"),("Mercedes C-Klasse");
INSERT INTO Fahrschueler (Vorname, Nachname, Telefonnummer) values
("Kevin","Grütze",'01629156457'),
("Chantal","von der Alm",'01629151257'),
("Bernd","Schönfelder",'01629676457'),
("Heinz","Blöd",'01874156457'),
("Richard","Krause",'01529156457'),
("Daniela","Katzenberger",'01719156457'),
("Ingrit","Münchhausen",'01729156457'),
("Hans","Wurst",'01739156457'),
("Fritz","Mütz",'01749156457'),
("David","Hausmann",'01629156098');
INSERT INTO TheorieUnterricht (Start, Ende, istPruefung, FahrlehrerID) values
("2024-03-05 18:00:00","2024-03-05 21:00:00",0,1),
("2024-03-06 18:00:00","2024-03-06 21:00:00",0,1),
("2024-03-07 18:00:00","2024-03-07 21:00:00",0,1),
("2024-03-08 18:00:00","2024-03-08 21:00:00",0,1),
("2024-03-09 18:00:00","2024-03-09 21:00:00",0,1),
("2024-03-10 07:00:00","2024-03-10 12:00:00",0,2),
("2024-03-11 07:00:00","2024-03-11 12:00:00",0,2),
("2024-03-12 07:00:00","2024-03-12 12:00:00",0,2),
("2024-03-13 07:00:00","2024-03-13 12:00:00",0,2),
("2024-03-14 07:00:00","2024-03-14 12:00:00",0,2),
("2024-03-15 07:00:00","2024-03-14 12:00:00",1,2);
INSERT INTO Fahrstunde (Start,Ende,istPruefung,istSonderfahrt,FahrschuelerID,FahrzeugID,kostenProStunde) values
("2024-04-05 07:00:00","2024-04-05 08:00:00",0,0,1,1,50),
("2024-04-06 07:00:00","2024-04-06 08:00:00",0,0,1,1,50),
("2024-04-07 07:00:00","2024-04-07 08:00:00",0,0,1,1,50),
("2024-04-08 07:00:00","2024-04-08 08:00:00",0,0,1,1,50),
("2024-04-09 07:00:00","2024-04-09 08:00:00",0,0,1,1,50),
("2024-04-10 07:00:00","2024-04-10 08:00:00",0,0,1,2,50),
("2024-04-11 07:00:00","2024-04-11 08:00:00",0,0,1,2,50),
("2024-04-12 07:00:00","2024-04-12 08:00:00",0,1,1,1,75),
("2024-04-13 07:00:00","2024-04-13 08:00:00",0,1,1,1,75),
("2024-04-14 07:00:00","2024-04-14 08:00:00",0,1,1,1,75),
("2024-04-15 07:00:00","2024-04-15 08:00:00",1,0,1,1,200),
("2024-04-05 07:00:00","2024-04-05 08:00:00",0,0,2,3,50),
("2024-04-06 07:00:00","2024-04-06 08:00:00",0,0,2,3,50),
("2024-04-07 07:00:00","2024-04-07 08:00:00",0,0,2,3,50),
("2024-04-08 07:00:00","2024-04-08 08:00:00",0,0,2,3,50),
("2024-04-09 07:00:00","2024-04-09 08:00:00",0,0,2,3,50),
("2024-04-10 07:00:00","2024-04-10 08:00:00",0,0,2,4,50),
("2024-04-11 07:00:00","2024-04-11 08:00:00",0,0,2,4,50),
("2024-04-12 07:00:00","2024-04-12 08:00:00",0,1,2,3,75),
("2024-04-13 07:00:00","2024-04-13 08:00:00",0,1,2,3,75),
("2024-04-14 07:00:00","2024-04-14 08:00:00",0,1,2,3,75),
("2024-04-15 07:00:00","2024-04-15 08:00:00",1,0,2,3,200);
INSERT INTO fuertDurch (istPruefer, FahrlehrerID, FahrstundeID) values
(0,1,1),
(0,1,2),
(0,1,3),
(0,1,4),
(0,1,5),
(0,1,6),
(0,1,7),
(0,1,8),
(0,1,9),
(0,1,10),
(0,1,11),
(1,3,11),
(0,2,12),
(0,2,13),
(0,2,14),
(0,2,15),
(0,2,16),
(0,2,17),
(0,2,18),
(0,2,19),
(0,2,20),
(0,2,21),
(0,2,22),
(1,4,22);
INSERT INTO nimmtTeil (FahrschuelerID, TheorieUnterrichtID) values
(1,1),(2,1),(3,1),(4,1),(5,1),(6,1),(7,1),(8,1),(9,1),(10,1),
(1,2),(2,2),(3,2),(4,2),(5,2),(6,2),(7,2),(8,2),(9,2),
(1,3),(2,3),(3,3),(5,3),(6,3),(7,3),(8,3),(9,3),(10,3),
(1,4),(2,4),(3,4),(4,4),(5,4),(6,4),(7,4),(8,4),(9,4),(10,4),
(1,5),(2,5),(3,5),(4,5),(5,5),(6,5),(7,5),(8,5),(9,5),(10,5),
(1,6),(2,6),(3,6),(4,6),(5,6),(6,6),(7,6),(8,6),(9,6),(10,6),
(1,7),(2,7),(3,7),(4,7),(5,7),(6,7),(7,7),(8,7),(9,7),(10,7),
(1,8),(2,8),(3,8),(4,8),(5,8),(6,8),(7,8),(8,8),(9,8),(10,8),
(1,9),(2,9),(3,9),(4,9),(5,9),(6,9),(7,9),(8,9),(9,9),(10,9),
(1,10),(2,10),(3,10),(4,10),(5,10),(6,10),(7,10),(8,10),(9,10),(10,10),
(1,11),(2,11),(3,11),(4,11),(5,11),(6,11),(7,11),(8,11),(9,11),(10,11);
</code>
Wie lautet die Telefonnummer von Fahrlehrer Schmidt?
<run id="65f9d5df3098d">
SELECT Telefonnummer
FROM Fahrlehrer
WHERE Nachname = "Schmidt";
</run>
Welche Prüfungstermine gibt es?
<run id="65f9eb464aa8a">
SELECT TheorieUnterricht.Start AS Prüfungstermin
FROM TheorieUnterricht;</run>
Welche Fahrzeuge besitzt die Fahrschule?
<run id="65f9d70aead94">
SELECT Name
FROM Fahrzeug;
</run>
Welche Fahrschüler sind in der Fahrschule angemeldet?
<run id="65f9d7f0d780c">
SELECT Nachname, Telefonnummer
FROM Fahrschueler;
</run>
==Datenbank-Beleg:==
<document>SorayaM_ERM-Modell.pdf</document>
<document>SorayaM_RM-Modell.pdf</document>
'''Thema der Datenbank:'''
Fahrschule
'''Ziel/Begründung:'''
* verschiedene Datenpunkte, die effizient organisiert werden können
* erleichterter Zugriff auf:
** Schülerinformationen
** Theoriestunden
** Fahrstunden
** Prüfungstermine
** Fahrlehrerdaten
** Fahrzeuge
'''kritische Reflexion zu Modellierung und Umsetzung:'''
* Nicht alle Funktionen/Geschäftsprozesse einer Fahrschule sind im Datenbankdesign umgesetzt
* Nur der wichtigste Geschäftsprozess einer Fahrschule wurde umgesetzt: Durchführung von
praktischen Fahrstunden und Theoriestunden
'''wichtige Merkmale der Modelle:'''
:''Kardinalität:''
* Die Kardinalität beschreibt die Beziehung zwischen den Entitäten in der Datenbank
* Sie gibt an, wie viele Instanzen einer Entität mit einer anderen Entität in Beziehung stehen können
* drei Haupttypen der Kardinalität:
** 1:1 (Eins-zu-Eins): Eine Instanz einer Entität ist genau mit einer Instanz einer anderen Entität verknüpft
** 1:N (Eins-zu-Viele): Eine Instanz einer Entität kann mit mehreren Instanzen einer anderen Entität verknüpft sein
** N:M (Viele-zu-Viele): Mehrere Instanzen einer Entität können mit mehreren Instanzen einer anderen Entität verknüpft sein -> -> Dies erfordert eine Zwischentabelle
* Die Kardinalität beeinflusst das Datenbankdesign und die Beziehung zwischen den Tabellen
''Entität:''
* Ein einzelnes Objekt mit den dazugehörigen Eigenschaften.
* Entitäten des Modells sind: Fahrzeug,
Fahrstunde, Fahrlehrer, Fahrschueler, Theorieunterricht
''Relationship (Beziehung):''
* Beziehungen sind Assoziationen zwischen oder unter Entitäten
* Beziehungen des Modells:
:Fahrlehrer -> '''„fuehrtDurch“''' -> Fahrstunde
:Fahrlehrer -> '''„fuehrtDurch“''' -> Theorieunterricht
:Fahrschueler -> '''„nimmt teil“''' -> Fahrstunde
:Fahrschueler -> '''„nimmt teil“''' -> TheorieUnterricht
:Fahrstunde -> '''„nutzt“''' -> Fahrzeug
''Attribute:''
*Attribute sind Eigenschaften einer Entität, einer Viele-zu-viele-Beziehung oder einer Eins
zu-eins-Beziehung
* im Modell: Die meisten Attribute sind Eigenschaften der Entitäten, außer das Attribut
'''„istPruefer“''' (dieses ist die Eigenschaft der '''„fuehrtDurch“''' Beziehung zw. Fahrlehrer und
Fahrstunde, weil Fahrlehrer selbst auch Prüfer sein können)
''Normalform:''
*unter Datenbanknormalisierung versteht man den Prozess der Organisation von Daten in Tabellen in
:einer Weise, dass diese konsistent und frei von Datenanomalien sind
*Normalisierung ist ein
:wesentlicher Bestandteil der relationalen Datenbanktheorie
-> keine doppelte Datenhaltung
-> dasselbe Attribut einer Tabelle darf nicht in einer anderen Tabelle vorkommen
*1. Normalform: alle Attribute in einer Tabelle liegen atomar vor (jede Information innerhalb einer Tabelle erhält ihre eigene Tabellenspalte; Daten werden einheitlich und klar strukturiert)
''Primärschlüssel''
*ist in jeder Entität enthalten (unterstrichen gekennzeichnet)
*ist eine Spalte/Spaltengruppe in einer Tabelle, deren Werte eine Zeile
in der Tabelle eindeutig kennzeichnen
''Fremdschlüssel''
*ist eine Spalte/Spaltengruppe in einer Tabelle, deren Werte den Werten
:des Primärschlüssels in einer anderen Tabelle entsprechen
*verwendet in den Beziehungen „fuehrtDurch“, „nimmtTeil“
'''Verwendete Quellen/Tools:'''