PMG2224 4/DB Beleg/Emilie
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
= '''Datenbank eines Bibliothekssystems einer Schule'''=
== Ziel der Datenbank ==
Die Datenbank für die Schulbibliothek soll eine effiziente Verwaltung und Organisation der Bibliotheksbücher ermöglichen und Ausleihvorgänge der Schüler verfolgen. Durch diese Datenbank kann die Schulbibliothek effektiver betrieben werden und einen besseren Service für die Schülerinnen und Schüler bieten. Das Ziel ist also eine schnelle Auskunft über geliehene Bücher zu bekommen und dazu bestehende Informationen über den Ausleiher und das Datum.
== ERM Bibliothekssystem ==
[[Bild:Emilie_3.png|center|1000px]]
'''Kardinalitäten'''
Ein Buch ist in einer Ausleihe enthalten.
Eine Ausleihe enthält mehrere Bücher.
Eine Ausleihe wird von einem Schüler getätigt.
Ein Schüler tätigt eine Ausleihe.
== Transformation in das Relationenmodell ==
[[Bild:Emilie_Image.png|center|1000px]]
== Erstellung der Datenbank ==
<code id="65e859885c564">
-- Tabelle für Schüler erstellen
CREATE TABLE IF NOT EXISTS Schüler (
SchülerID INT PRIMARY KEY,
Vorname varchar,
Nachname varchar,
Klasse varchar,
);
-- Beispiel-Schüler einfügen
INSERT INTO Schüler VALUES (111, 'Max', 'Mustermann', '10A');
INSERT INTO Schüler VALUES (222, 'Maria', 'Musterfrau', '10B');
INSERT INTO Schüler VALUES (333, 'Fritz', 'Beispiel', '11A');
INSERT INTO Schüler VALUES (444, 'Anna', 'Schmidt', '10A');
INSERT INTO Schüler VALUES (555, 'Peter', 'Meier', '10B');
INSERT INTO Schüler VALUES (666, 'Sophie', 'Müller', '11A');
-- Tabelle für Bücher erstellen
CREATE TABLE IF NOT EXISTS Bücher (
BuchID INT PRIMARY KEY,
Titel varchar,
Autor varchar,
);
-- Beispiel-Bücher einfügen
INSERT INTO Bücher VALUES (123, 'Der kleine Prinz', 'Antoine de Saint-Exupéry');
INSERT INTO Bücher VALUES (234, 'Harry Potter und der Stein der Weisen', 'J.K. Rowling');
INSERT INTO Bücher VALUES (345, 'Die Verwandlung', 'Franz Kafka');
INSERT INTO Bücher VALUES (456, 'Die unendliche Geschichte', 'Michael Ende');
INSERT INTO Bücher VALUES (567, 'To Kill a Mockingbird', 'Harper Lee');
INSERT INTO Bücher VALUES (689, '1984', 'George Orwell');
-- Tabelle für Ausleihe erstellen
CREATE TABLE IF NOT EXISTS Ausleihe (
AusleihID INT PRIMARY KEY,
SchülerID INT,
BuchID INT,
Ausleihdatum DATE,
FOREIGN KEY (SchülerID) REFERENCES Schüler(SchülerID),
FOREIGN KEY (BuchID) REFERENCES Bücher(BuchID)
);
-- Beispiel-Ausleihen einfügen
INSERT INTO Ausleihe VALUES (101, 111, 123, '2024-03-19');
INSERT INTO Ausleihe VALUES (202, 222, 234, '2024-03-20');
INSERT INTO Ausleihe VALUES (303, 333, 345, '2024-03-21');
INSERT INTO Ausleihe VALUES (404, 444, 456, '2024-03-22');
INSERT INTO Ausleihe VALUES (505, 555, 567, '2024-03-23');
INSERT INTO Ausleihe VALUES (606, 666, 678, '2024-03-24');
</code>
<run id="65e859885c5b5">
SELECT * FROM Schüler;
SELECT * FROM Bücher;
SELECT * FROM Ausleihe;
</run>
== Erstellung unterschiedlicher Abfragen ==
Abfrage 1
<run id="65fa0777edc20">
-- Zeige alle ausgeliehenen Bücher an, einschließlich des Namens des ausleihenden Schülers und des Ausleihdatums
SELECT Schüler.Vorname, Schüler.Nachname, Bücher.Titel, Ausleihe.Ausleihdatum
FROM Ausleihe
JOIN Schüler ON Ausleihe.SchülerID = Schüler.SchülerID
JOIN Bücher ON Ausleihe.BuchID = Bücher.BuchID;
</run>
Abfrage 2
<run id="65fa0777edc6e">
-- Finde alle Schüler, die Bücher ausgeliehen haben, die von J.K. Rowling geschrieben wurden
SELECT DISTINCT Schüler.Vorname, Schüler.Nachname
FROM Schüler
JOIN Ausleihe ON Schüler.SchülerID = Ausleihe.SchülerID
JOIN Bücher ON Ausleihe.BuchID = Bücher.BuchID
WHERE Bücher.Autor = 'J.K. Rowling';
</run>
Abfrage 3
<run id="65fa0777edcb3">
-- Finde die Schüler, die am meisten Bücher ausgeliehen haben, und zeige die Anzahl der ausgeliehenen Bücher pro Schüler an.
SELECT Schüler.Vorname, Schüler.Nachname, COUNT(*) AS Anzahl_Ausleihen
FROM Schüler
JOIN Ausleihe ON Schüler.SchülerID = Ausleihe.SchülerID
GROUP BY Schüler.SchülerID
ORDER BY Anzahl_Ausleihen DESC;
</run>
== Kritische Reflexion ==
'''Datensicherheit'''
Die Datenbank enthält keine Verschlüsselung von Daten, somit sind diese nicht vor unbefugtem Zugriff geschützt. Hier sollte man Zugriffsberechtigungen implementieren oder Benutzerrollen vergeben (wie zum Beispiel "Schüler" und "Sekretär").
'''Effizienz'''
Die Effizienz der Datenbank könnte durch eine große Anzahl von Ausleihen und Schülern beeinträchtigt werden. Hier könnte die Implementierung anderer Techniken sinnvoll sein. Die Datenbank sollte also in der Lage sein mit dem Wachstum der Bibliothek und Anzahl der Schüler "sklaierbar" zu sein.
'''Zyklus der Ausleihen'''
Da kein Abgabedatum für die Bücher angegeben ist, sind die Bücher dauerhaft im "Ausleihzustand". Dadurch können mögliche Verlängerungen oder Überziehungsgebühren nicht beachtet werden. Hier benötigt es also eine Erweiterung der Ausleih-Tabelle.
'''Erweiterbarkeit'''
Die Datenbank sollte schon mit minimaler Änderung erweitert werden können. So könnte man zum Beispiel leicht eine Schüler_ID für einen neuen Schüler vergeben können, der dann im System registriert ist.
== Quellen ==
''Tools''
https://erdplus.com/standalone
https://programmingwiki.de/PMG2224_4/
''Internet/Wissen''
https://www.php-einfach.de/mysql-tutorial/uebersicht-sql-befehle/