PMG2426 4/DB Beleg/Oliver
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language> =='''Datenbank Medien'''== [[Bild:Ol_sch_Erplus.png|900px]] ==='''Relationen-Modell'''=== ---- [[Bild:Ol sch_Erdplus(1).png|700px]] <font color=darkblue><u>'''1) Entitäten:'''</u></font> '''Nutzer:''' * Primärschlüssel: Nutzer_ID * Attribute: Nutzer_Name, Wohnort, Postleitzahl, Geburtsdatum '''Medien:''' * Primärschlüssel: Medien_ID * Attribute: Titel, Status, Genre, Erscheinungsjahr '''Bücher:''' * Primärschlüssel: Medien_ID * Attribute: ISBN, Autor, Seitenzahl '''Filme:''' * Primärschlüssel: Medien_ID * Attribute: Altersbeschränkung, Produzent, Auflösung '''Leihe:''' * Primärschlüssel: Leih_ID * Attribute: Rückgabedatum, Leihdatum <font color=darkblue><u>'''2) Beziehungen und Kardinalitäten'''</u></font> '''Bücher sind Teil: 1:1''' * Ein Medium ist genau ein Buch * Ein Buch gehört genau zu einem Medium '''Filme sind Teil: 1:1''' * Ein Medium ist genau ein Film * Ein Film gehört genau zu einem Medium '''Nutzer leiht Medien aus: n:m ''' * Ein Nutzer kann viele Medien ausleihen * Ein Medium kann von vielen Nutzern ausgeliehen werden * Konsequenz fürs Datenmodell: Zwischentabelle, Leihe mit Medien_ID und Nutzer_ID als Fremdschlüssel, Leih_ID als Primärschlüssel ==='''aber warum?'''=== ---- Ich habe mich für das Thema Medien entschieden, weil es ein Bereich ist, mit dem jeder im Alltag zu tun hat, sei es durch Filme, Musik, oder Bücher. Das macht das Projekt anschaulich und praxisnah. Technisch gesehen ist das Thema deshalb so interessant, weil man hier sehr gut zeigen kann, wie verschiedene Daten miteinander verknüpft sind. Zum Beispiel arbeitet man viel mit Beziehungen zwischen Tabellen, etwa wenn man Künstler ihren Werken oder verschiedene Genres zuordnet. Außerdem bietet das Thema genug Spielraum, um komplexe Suchfunktionen und Filter einzubauen, die genau so auch bei echten Streaming-Plattformen oder Online-Shops funktionieren würde ===Die Datenbank=== ---- <code id="6586f4e1c980b"> CREATE TABLE Nutzer ( Nutzer_ID INT PRIMARY KEY, Nuzter_Name VARCHAR(255), Postleitzahl VARCHAR(255), Wohnort VARCHAR(255), Geburtsdatum INT ); CREATE TABLE Medien ( Medien_ID INT PRIMARY KEY, Titel VARCHAR(255), Erscheinugsjahr VARCHAR(255), Status VARCHAR(255), Genre VARCHAR(255) ); CREATE TABLE Leihe ( Leih_ID INT PRIMARY KEY, Leihdatum VARCHAR(255), Rückgabedatum VARCHAR(255), Medien_ID INT, FOREIGN KEY (Medien_ID) REFERENCES Medien(Medien_ID), Nutzer_ID INT, FOREIGN KEY (Nutzer_ID) REFERENCES Nutzer(Nutzer_ID), ); CREATE TABLE Bücher ( Medien_ID INT PRIMARY KEY, Autor VARCHAR(255), Seitenzahl VARCHAR(255), ISBN VARCHAR(255), FOREIGN KEY (Medien_ID) REFERENCES Medien(Medien_ID) ); CREATE TABLE Filme ( Medien_ID INT PRIMARY KEY, Auflösung VARCHAR(255), Altersbeschränkung VARCHAR(255), Produzent VARCHAR(255), FOREIGN KEY (Medien_ID) REFERENCES Medien(Medien_ID) ); </code> ===Daten=== ---- <code id="69773b044fded"> INSERT INTO Nutzer VALUES (1, 'Heinz33', '02625', 'Bautzen', '1999'); INSERT INTO Nutzer VALUES (2, 'Barabra8', '80331', 'München', '1998'); INSERT INTO Nutzer VALUES (3, 'Heinz56', '10115', 'Berlin', '2000'); INSERT INTO Nutzer VALUES (4, 'Klaus', '20095', 'Hamburg', '1999'); INSERT INTO Nutzer VALUES (5, 'Kunz', '44135', 'Dortmund', '1970'); INSERT INTO Medien VALUES (1, 'Parasite', '2019', 'Ausleihbar', 'Thriller'); INSERT INTO Medien VALUES (2, 'Inception', '2010', 'Ausleihbar', 'Action'); INSERT INTO Medien VALUES (3, 'Die Verurteilten', '1994', 'Nicht verfügbar', 'Drama'); INSERT INTO Medien VALUES (4, 'Get Out', '2017', 'Ausleihbar', 'Horror'); INSERT INTO Medien VALUES (5, 'Das Leben ist schön', '1997', 'Nicht verfügbar', 'Drama'); INSERT INTO Medien VALUES (6, 'Der Alchimist', '1988', 'Ausleihbar', 'Abenteuer'); INSERT INTO Medien VALUES (7, 'Der Herr der Ringe', '1955', 'Nicht verfügbar', 'Fantasy'); INSERT INTO Medien VALUES (8, 'Nineteen Eighty-Four', '1949','Nicht verfügbar', 'Dystopie'); INSERT INTO Medien VALUES (9, 'Die Känguru Chroniken', '2009', 'Ausleihbar', 'Comedy'); INSERT INTO Medien VALUES (10, 'Der Kleine Prinz', '1943', 'Ausleihbar', 'Kinderliteratur'); INSERT INTO Leihe VALUES (1, '10.01.2020', '10.02.2020', 1, 2); INSERT INTO Leihe VALUES (2, '01.07.2023', '01.08.2023', 2, 1); INSERT INTO Leihe VALUES (3, '04.08.2022', '04.09.2022', 7, 1); INSERT INTO Leihe VALUES (4, '01.08.2020', '01.09.2020', 4, 4); INSERT INTO Leihe VALUES (5, '01.07.2023', '01.11.2023', 9, 5); INSERT INTO Bücher VALUES (6, 'Paulo Coelho', '192', '978-325-723-727-1'); INSERT INTO Bücher VALUES (7, 'J.R.R. Tolkien', '1216', '978-360-893-983-5'); INSERT INTO Bücher VALUES (8, 'George Orwell', '400', '978-349-955-198-7'); INSERT INTO Bücher VALUES (9, 'Marc Uwe KLing', '272', '978-354-837-258-7'); INSERT INTO Bücher VALUES (10, 'Antoine de Saint Exupery', '96', '978-379-150-011-7'); INSERT INTO Filme VALUES (1, 'CinemaScope', '12', 'Bong Joon-Ho'); INSERT INTO Filme VALUES (2, 'anamorph', '12', 'Emma Thomas'); INSERT INTO Filme VALUES (3, '1.85:1', '12', 'Niki MArvin'); INSERT INTO Filme VALUES (4, '2.35:1', '16', 'Jason Blum'); INSERT INTO Filme VALUES (5, '1.85:1', '6', 'Elda Ferri'); </code> ===Erstellen von verschiedenen Abfragen=== Abfrage aller Nutzer geboren "1999" <run id="52f89f4ff1818"> SELECT * FROM Nutzer WHERE Geburtsdatum = '1999'; </run> Abfrage aller Medien, die Ausleihbar sind <run id="92f89f4ff1818"> SELECT FROM Leihe WHERE Status = 'Ausleihbar'; </run> Abfrage von Filmen und einer Altersfreigabe von 12 oder darunter <run id="52f89f4ff1811"> SELECT Filme, Altersfreigabe FROM Filme WHERE Altersfreigabe <= '12'; </run> Abfrage Des Mediums mit Ausleihdatum von Heinz33 <run id="52f89f4fg1818"> SELECT FROM </run> ===Kritische Reflexion zu Modellierung und Umsetzung=== Es ist eine klare Tabellenstruktur Vorhanden, in der jede Entität für sich eingefügt ist. Die Trennung in Nutzer, Medien, Leihe, Bücher und Filme verhindert Datenwiederholungen und unterstützt die Normalisierung. Die Felder sind atomar (1. Normalform), da jede Informationen getrennt gespeichert wird. Jede Tabelle besitzt einen eindeutigen Primärschlüssel, wodurch keine Teilabhängigkeiten entstehen und die zweite Normalform erfüllt ist. Verbesserungen: Am Ende hab ich irgentwas gemacht und die Fehler nicht mehr gefunden und ich hab die Abfrage des Mediums mit dem Ausleihdatum auch nicht hinbekommen ===Verwendete Quellen, Tools, etc.=== * ERDplus * programmingwiki