Nina

Aus ProgrammingWiki
Archivierte Version vom 2026-02-25T20:34:56+00:00. Aktuelle Version

Ziel der Datenbank und Begründung der Themenwahl:

Die Datenbank soll eine kleine Schulbibliothek verwalten. Sie soll speichern, welche Bücher es gibt, welche Schüler diese Bücher ausleihen und wann eine Ausleihe stattgefunden hat. Ich habe das Thema gewählt, weil es leicht verständlich ist und typische Datenbank-Beziehungen zeigt, zum Beispiel dass ein Schüler mehrere Ausleihen haben kann und ein Buch im Laufe der Zeit mehrfach ausgeliehen werden kann.


Kikaninchen 2_ERM_2.jpg


Transformation in das Relationenmodell:

in Zeilenform

Buchtabelle (Buch_ID; Titel; Autor; ISBN)

Schülertabelle (Schüler_ID; Name; Klasse)

Ausleihetabelle (Ausleihe_ID; Ausleihdatum; Buch_ID; Schüler_ID)

Im relationalen Modell werden die Entitäten aus dem ER-Modell als Tabellen umgesetzt. Die Tabellen Buch und Schüler enthalten jeweils ihren Primärschlüssel und die dazugehörigen Attribute. Die Ausleihe ist ebenfalls eine eigene Tabelle, weil im ER-Modell eine Ausleihe als eigene Entität vorkommt und zudem ein Attribut (Ausleihdatum) besitzt. Die Beziehungen „Schüler leiht aus“ und „Buch wird ausgeliehen“ werden dadurch umgesetzt, dass in der Tabelle Ausleihe die Fremdschlüssel Buch_ID und Schüler_ID enthalten sind. Dadurch entsteht jeweils eine 1:n-Beziehung, weil ein Schüler mehrere Ausleihen haben kann und ein Buch im Laufe der Zeit mehrfach ausgeliehen werden kann, während jede Ausleihe immer genau zu einem Buch und genau zu einem Schüler gehört. Die Beziehung „Schüler sucht Buch aus“ wird nicht als eigene Tabelle umgesetzt, weil sie keine eigenen Attribute besitzt und inhaltlich bereits durch den Ausleihvorgang abgedeckt ist. Die Attribute sind atomar gespeichert, weil zum Beispiel Name und Klasse in getrennten Feldern stehen und keine Listen oder zusammengesetzten Werte in einem Attribut gespeichert werden.


Erstellung der Datenbank und notwendige Datensätze (SQL):

CREATE TABLE Buch (

 BuchID INT PRIMARY KEY,
 Titel VARCHAR(100) NOT NULL,
 Autor VARCHAR(100) NOT NULL,
 ISBN VARCHAR(20) UNIQUE

);

CREATE TABLE Schueler (

 SchuelerID INT PRIMARY KEY,
 Name VARCHAR(100) NOT NULL,
 Klasse VARCHAR(20) NOT NULL

);

CREATE TABLE Ausleihe (

 AusleiheID INT PRIMARY KEY,
 Ausleihdatum DATE NOT NULL,
 BuchID INT NOT NULL,
 SchuelerID INT NOT NULL,
 FOREIGN KEY (BuchID) REFERENCES Buch(BuchID),
 FOREIGN KEY (SchuelerID) REFERENCES Schueler(SchuelerID)

);

INSERT INTO Buch (BuchID, Titel, Autor, ISBN) VALUES (1, 'SQL Grundlagen', 'Julia Klein', '978-1'), (2, 'Geschichte Sachsens', 'Sven Richter', '978-2'), (3, 'Archäologie kompakt', 'Lea Hoffmann', '978-3');

INSERT INTO Schueler (SchuelerID, Name, Klasse) VALUES (1, 'Anna Schmidt', '12A'), (2, 'Ben Wagner', '12A');

INSERT INTO Ausleihe (AusleiheID, Ausleihdatum, BuchID, SchuelerID) VALUES (1, '2026-02-01', 1, 1), (2, '2026-02-10', 2, 2), (3, '2026-02-15', 3, 1);


Abfragen unterschiedlicher Schwierigkeit:

SELECT * FROM Buch;

-> einfach, zeigt alle Bücher

SELECT * FROM Ausleihe;

-> einfach, zeigt alle Ausliehen

SELECT S.Name, S.Klasse, B.Titel, A.Ausleihdatum FROM Ausleihe A JOIN Schueler S ON A.SchuelerID = S.SchuelerID JOIN Buch B ON A.BuchID = B.BuchID ORDER BY A.Ausleihdatum;

-> schwieriger, zeigt welcher Schüler welches Buch ausgeliehen hat und an welchem Datum

SELECT B.Titel, COUNT(A.AusleiheID) AS AnzahlAusleihen FROM Buch B LEFT JOIN Ausleihe A ON A.BuchID = B.BuchID GROUP BY B.BuchID, B.Titel;

-> schwierig, zählt wie oft jedes Buch ausgeliehen wurde

Reflexion:

Die Modellierung der Datenbank ist übersichtlich und für eine Schulbibliothek gut geeignet. Die Entitäten Buch, Schüler und Ausleihe wurden sinnvoll gewählt, und durch die Fremdschlüssel in der Tabelle Ausleihe werden die Beziehungen korrekt dargestellt. Dabei handelt es sich um 1:n-Beziehungen, da ein Schüler mehrere Ausleihen haben kann und ein Buch mehrfach ausgeliehen werden kann. Ein Vorteil ist, dass Daten nicht doppelt gespeichert werden, wodurch die Struktur einfach und verständlich bleibt. Die Attribute sind außerdem atomar gespeichert, sodass grundlegende Regeln der Normalisierung eingehalten werden. Eine Schwäche ist, dass kein Rückgabedatum gespeichert wird und nicht zwischen mehreren Exemplaren eines Buches unterschieden wird. Für eine einfache Anwendung wie für die Aufgabe, ist die Umsetzung jedoch meines angesichts ausreichend.


Quellen & Tools:

ERDPlus, Programming Wiki