PMG2426 4/DB Beleg/Lenya

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SQL</language>
=Ziel der Datenbank=

Ziel der Datenbank ist es, für beliebig viele Schüler systematisch zu erfassen, welche Klausuren sie schreiben, zu welchem Datum diese stattfinden und welche Themen in den jeweiligen Klausuren behandelt werden. Dadurch kann ein übersichtlicher Klausurenplan erstellt werden, der sowohl schülerbezogene als auch klausur- und themenbezogene Auswertung ermöglicht.
=ERM= 

[[Bild:ERM_Modell.png|1000px]]


=Merkmale des Modells=
''' 1) Entitäten: '''

'''Schüler: '''
*Primärschlüssel: Schüler_ID
*Attribute: Name, Klasse, Wohnort, PLZ

'''Klausur: '''
*Primärschlüssel: Klausur_ID
*Attribute: Fach, Datum, Dauer

'''Thema: '''
*Primärschlüssel: Thema_ID
*Attribute: Themenname, Schwierigkeit, Beschreibung 

''' 2) Beziehungen und Entitäten '''

'''Schüler schreibt Klausur: m:n '''
* Ein Schüler kann mehrere Klausuren schreiben
* Eine Klausur kann von mehreren Schülern geschrieben werden 
* Konsequenz fürs Datenmodell: Zwischentabelle schreibt, mit Schüler_ID und Klausur_ID als Primärschlüssel

'''Klausur besitzt Thema: m:n '''
* Eine Klausur kann mehrere Themen umfassen
* Ein Thema kann in mehreren Klausuren vorkommen 
* Konsequenz fürs Datenmodell: Zwischentabelle Klausur_Thema mit Klausur_ID und Thema_ID als Primärschlüssel


=Relationsmodell=

[[Bild:Le Bog_Relationmodell.png|1000px]]



=Datenbank=
<code id="52dcdf16795a2">
DROP TABLE IF EXISTS Schüler;
CREATE TABLE Schüler (
  Schüler_ID varchar(255),
  Name varchar(255),
  Klasse varchar(255),
  Wohnort varchar(255),
  PLZ varchar (255),
  PRIMARY KEY  (Schüler_ID)
);

DROP TABLE IF EXISTS Klausur;
CREATE TABLE Klausur (
  Klausur_ID varchar(255),
  Fach varchar(255),
  Datum varchar(255),
  Dauer varchar(255),
  PRIMARY KEY  (Klausur_ID)
);

DROP TABLE IF EXISTS Thema;
CREATE TABLE Thema (
  Thema_ID varchar(255),
  Themenname varchar(255),
  Schwierigkeit varchar(255),
  Beschreibung varchar(255),
  PRIMARY KEY  (Thema_ID)
);

DROP TABLE IF EXISTS schreibt;
CREATE TABLE schreibt (
  schreibt_ID varchar(255),
  Klausur_ID varchar(255),
  Schüler_ID varchar(255),
  PRIMARY KEY  (schreibt_ID)
);

DROP TABLE IF EXISTS Klausur_Thema;
CREATE TABLE Klausur_Thema (
  Klausur_Thema_ID varchar(255),
  Thema_ID varchar(255),
  Klausur_ID varchar(255),
  PRIMARY KEY  (Klausur_Thema_ID)
);

INSERT INTO Schüler VALUES ('S001', 'Anna Schneider', '11', 'Berlin', '10115');
INSERT INTO Schüler VALUES ('S002', 'Max Müller', '12', 'Hamburg', '20095');
INSERT INTO Schüler VALUES ('S003', 'Lena Fischer', '10', 'München', '80331');
INSERT INTO Schüler VALUES ('S004', 'Jonas Weber', '11', 'Köln', '50667');
INSERT INTO Schüler VALUES ('S005', 'Sophie Klein', '12', 'Frankfurt', '60311');
INSERT INTO Schüler VALUES ('S006', 'Paul Hoffmann', '10', 'Stuttgart', '70173');

INSERT INTO Klausur VALUES ('K001', 'Biologie', '2026-03-15', 90);
INSERT INTO Klausur VALUES ('K002', 'Mathematik', '2026-03-18', 120);
INSERT INTO Klausur VALUES ('K003', 'Deutsch', '2026-03-20', 180);
INSERT INTO Klausur VALUES ('K004', 'Ethik', '2026-03-22', 60);
INSERT INTO Klausur VALUES ('K005', 'Chemie', '2026-03-25', 90);
INSERT INTO Klausur VALUES ('K006', 'Physik', '2026-03-28', 120);

INSERT INTO Thema VALUES ('T001', 'Genexpression', 'hoch', 'Transkription und Translation der Proteinbiosynthese');
INSERT INTO Thema VALUES ('T002', 'Stochastik', 'mittel', 'Wahrscheinlichkeitsrechnung und Zufallsexperimente');
INSERT INTO Thema VALUES ('T003', 'Ethik der Gentechnik', 'mittel', 'Moralische und gesellschaftliche Fragestellungen');
INSERT INTO Thema VALUES ('T004', 'Analysis', 'hoch', 'Differential- und Integralrechnung');
INSERT INTO Thema VALUES ('T005', 'Mechanik', 'mittel', 'Bewegung, Kraft und Energie');
INSERT INTO Thema VALUES ('T006', 'Gedichtanalyse', 'leicht', 'Analyse lyrischer Texte und Stilmittel');

INSERT INTO schreibt VALUES ('SC001', 'S001', 'K001');
INSERT INTO schreibt VALUES ('SC002', 'S001', 'K002');
INSERT INTO schreibt VALUES ('SC003', 'S002', 'K001');
INSERT INTO schreibt VALUES ('SC004', 'S002', 'K003');
INSERT INTO schreibt VALUES ('SC005', 'S003', 'K002');
INSERT INTO schreibt VALUES ('SC006', 'S003', 'K004');
INSERT INTO schreibt VALUES ('SC007', 'S004', 'K003');
INSERT INTO schreibt VALUES ('SC008', 'S004', 'K005');
INSERT INTO schreibt VALUES ('SC009', 'S005', 'K004');
INSERT INTO schreibt VALUES ('SC010', 'S006', 'K006');

INSERT INTO Klausur_Thema VALUES ('KT001', 'K001', 'T001');
INSERT INTO Klausur_Thema VALUES ('KT002', 'K002', 'T002');
INSERT INTO Klausur_Thema VALUES ('KT003', 'K003', 'T006');
INSERT INTO Klausur_Thema VALUES ('KT004', 'K004', 'T003');
INSERT INTO Klausur_Thema VALUES ('KT005', 'K005', 'T005');
INSERT INTO Klausur_Thema VALUES ('KT006', 'K006', 'T004');

</code> 

=Abfragen= 
<u>Alle Schüler anzeigen</u>
<run id="52f89f4ff177a">
SELECT *
FROM Schüler;
</run>

<u>Alle Klausuren mit Datum und Fach</u>
<run id="52f89f4ff1818">
SELECT Fach, Datum
FROM Klausur;
</run>

<u>Welche Klausuren schreibt ein bestimmter Schüler?</u>
<run id="52f89f4ff18b8">
SELECT K.Klausur_ID, K.Fach, K.Datum
FROM Klausur K
JOIN Schreibt S ON K.Klausur_ID = S.Klausur_ID
WHERE S.Schüler_ID = 'S001';
</run>

<u>Welche Themen gehören zu welcher Klausur?</u>
<run id="52f89f4ff193f">
SELECT K.Fach, T.Themenname
FROM Klausur K
JOIN Klausur_Thema KT ON K.Klausur_ID = KT.Klausur_ID
JOIN Thema T ON KT.Thema_ID = T.Thema_ID;
</run>

<u>Welche Schüler schreiben welche Klausur inkl. Fach und Datum?</u>
<run id="52f89f4ff19c5">
SELECT Sch.Name, K.Fach, K.Datum
FROM Schüler Sch
JOIN Schreibt S ON Sch.Schüler_ID = S.Schüler_ID
JOIN Klausur K ON S.Klausur_ID = K.Klausur_ID
ORDER BY Sch.Name;
</run>


=Kritische Reflexion zur Modellierung der Datenbank=

Bei der Modellierung der Datenbank für den Klausurenplan war es zunächst wichtig, die Anforderungen klar zu strukturieren: Es sollten beliebig viele Schüler, Klausuren und Themen erfasst werden, und Beziehungen zwischen diesen Entitäten abgebildet werden. Das ER-Modell zeigt klar die zentralen Entitäten Schüler, Klausur und Thema sowie die m:n-Beziehungen schreibt (zwischen Schüler und Klausur) und behandelt (zwischen Klausur und Thema).

Eine Stärke der Modellierung ist, dass durch die Verwendung von Beziehungstabellen die Mehrfachzuordnungen korrekt abgebildet werden und somit flexible Abfragen möglich sind, z. B. welche Schüler eine bestimmte Klausur schreiben oder welche Themen in einer Klausur vorkommen.
Kritisch ist jedoch, dass wichtige Informationen wie Räume oder Lehrer fehlen und das Modell nicht sehr flexibel für Änderungen ist, zum Beispiel bei verschobenen Klausuren oder nachgemeldeten Schülern. Außerdem müssen die IDs genau eingehalten werden, sonst funktionieren die INSERT-Befehle nicht, und bei größeren Abfragen kann es ohne Aliasse schnell unübersichtlich werden.

=Verwendete Quellen und Tools=
- ERDplus