PMG2022/DB Beleg/Lukas

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>SQL</language>
[[Bild:Disney.png|200px|right]]
__NOTOC__ 
<font size="6"><h3>Projekt SQL - Filmstreaming</h3></font>


===Idee===
 Idee: Verknüpfung Streamingdienste mit Verfügbarkeit von Filmen in Bezug auf Personen mit Abosystem

 Ich finde es heutzutage viel zu unübersichtlich, welcher Film bei welchem Streaminganbieter verfügbar ist.
 Zudem fände ich es sehr praktisch wenn es dazu eine Plattform gäbe, die einem Auskunft darüber gibt. 
 Diese Plattform könnte ungefähr so aussehen...

===Modelle===
[[Bild:ERM2.png|left|650px|thumb|Entity-Relationship-Modell]]

'''Beziehungen'''
 Eine Person hat mehrere Streamingdienste 
 abboniert.
 Ein Streamingdienst hat mehrere Kunden.
 -> n : m

 Ein Film ist bei mehreren 
 Streamingdiensten verfügbar.
 Ein Streamingdienst hat mehrere
 Filme im Angebot.
 -> n : m





















'''Verknüpfung'''
 Bei einer n : m Beziehung wird immer eine dritte Tabelle benötigt, folglich muss es insgesamt fünf Tabellen geben.
 Als Primärschlüssel wählte ich die Kundennummer, den Plattform-Namen und die Filmnummer. In der jeweiligen 
 Verknüpfungstabelle würden diese dann als Fremdschlüssel verwendet. 
[[Bild:ER-Bild.PNG|left|1000px|thumb|Relationenmodell]]

'''Normalformen'''
 1.Normalform: nur eine Information pro Feld -> erfüllt
 2.Normalform: eindeutige Zuordnung durch Primärschlüssel -> erfüllt
 3.Normalform: keine Attribute dürfen von Nicht-Primärschlüsseln abhängig sein -> erfüllt



===Datenbank===
<code id="622b114a367c3">

DROP TABLE IF EXISTS Plattform;
CREATE TABLE Plattform(
  Name varchar(30),
  Preis integer(20)
   );


INSERT INTO Plattform VALUES ('Netflix', 7.99);
INSERT INTO Plattform VALUES ('PrimeVideo', 6.99);
INSERT INTO Plattform VALUES ('Disney+', 8.99);



DROP TABLE IF EXISTS Person;
CREATE TABLE Person(
  Name varchar(30),
  KundenNr varchar(20)
   );


INSERT INTO Person VALUES ('Max', '001');
INSERT INTO Person VALUES ('Tim', '002');
INSERT INTO Person VALUES ('Lisa', '003');



DROP TABLE IF EXISTS Film;
CREATE TABLE Film(
  Titel varchar(30),
  FilmNr varchar(20)
   );


INSERT INTO Film VALUES ('Star Wars', '990');
INSERT INTO Film VALUES ('Harry Potter', '991');
INSERT INTO Film VALUES ('Herr der Ringe', '992');



DROP TABLE IF EXISTS VerknüpfungP;
CREATE TABLE VerknüpfungP(
  Nr varchar(30),
  Abo varchar (20)
   );


INSERT INTO VerknüpfungP VALUES ('001', 'Netflix');
INSERT INTO VerknüpfungP VALUES ('002', 'PrimeVideo' );
INSERT INTO VerknüpfungP VALUES ('003', 'Netflix');
INSERT INTO VerknüpfungP VALUES ('003', 'Disney+' );



DROP TABLE IF EXISTS VerknüpfungF;
CREATE TABLE VerknüpfungF(
  Nr varchar(30),
  Abo varchar (20)
   );


INSERT INTO VerknüpfungF VALUES ('990', 'Disney+');
INSERT INTO VerknüpfungF VALUES ('991', 'PrimeVideo' );
INSERT INTO VerknüpfungF VALUES ('991', 'Netflix');
INSERT INTO VerknüpfungF VALUES ('992', 'Netflix' );

</code>

<run id="622b114a3683d">


-- Allgemeine Abfrage aller Tabellen

SELECT * FROM Plattform;
SELECT * FROM Person;
SELECT * FROM Film;
-- SELECT * FROM VerknüpfungP;
-- SELECT * FROM VerknüpfungF;




-- Welche Person hat welches Abo?
SELECT Name,Abo FROM Person,VerknüpfungP 
WHERE Person.KundenNr=VerknüpfungP.Nr;

-- Wer hat ein Disney+ Abo?
SELECT Person.Name,Abo,Preis FROM Person,Plattform,VerknüpfungP 
WHERE Person.KundenNr=VerknüpfungP.Nr and VerknüpfungP.Abo='Disney+' and Plattform.Name='Disney+';

-- Wer kann welchen Film schauen?
SELECT DISTINCT Person.Name,Film.Titel FROM Person,VerknüpfungP,VerknüpfungF,Plattform,Film 
WHERE Person.KundenNr=VerknüpfungP.Nr and VerknüpfungP.Abo=VerknüpfungF.Abo and Film.FilmNr=VerknüpfungF.Nr ;

-- Wer bezahlt welchen Preis?
SELECT Person.Name,Preis FROM Person,VerknüpfungP,Plattform 
WHERE Person.KundenNr=VerknüpfungP.Nr and VerknüpfungP.Abo=Plattform.Name ;

-- Welcher Film wo verfügbar?  
SELECT Titel,Plattform.Name FROM Film,Plattform,VerknüpfungF
WHERE Film.FilmNr=VerknüpfungF.Nr and VerknüpfungF.Abo=Plattform.Name; 

-- Welche Filme kann Max schauen?
SELECT DISTINCT Person.Name,Film.Titel FROM Person,VerknüpfungP,VerknüpfungF,Plattform,Film 
WHERE Person.Name='Max' and Person.KundenNr=VerknüpfungP.Nr and VerknüpfungP.Abo=VerknüpfungF.Abo 
and Film.FilmNr=VerknüpfungF.Nr ;

-- Welcher Streamingdienst ist am günstigsten?
SELECT Name,Preis FROM Plattform
WHERE Preis =	(SELECT MIN(A.Preis) FROM Plattform As A)




</run>

===Zusammenfassung===

'''Funktion und Erweiterbarkeit'''
 Ich denke das Prinzip ist erkennbar und funktioniert soweit auch. Die Datenbank kann leicht erweitert werden, sowohl bei den 
 Streamingdiensten(da fehlt z.B. Sky oder AppleTV), bei den Filmen (da hab ich nur eine sehr geringe Auswahl geschaffen) und 
 auch bei den Personen. 
 Aufpassen müsste man dann jedoch, dass sich die Kundennummern und die Filmnummern nicht gleichen. Dies dürfte zwar 
 eigentlich nicht zu Problemen führen, könnte aber verwirren. Das lässt sich aber auch leicht beheben, indem man die Nummern
 vier- oder fünfstellig wählt.

'''Realismus'''
 Ich denke es ist unrealistisch, dass die Kundennummern universell Verwendbar sind. In der Realität hat wahrscheinlich jede
 Plattform ihr eigenes System um ihre Kunden zu identifizieren. Das gleiche gilt für die Filme, obwohl diese an der 
 Artikelnummer eindeutig erkennbar und für alle gleich wären.
'''Serien'''
 Ich habe in meine Datenbank keine Serien eingebaut. Man könnte diese jedoch auch einfach in die Tabelle der Filme mit 
 eintragen. Dabei muss aber jede Staffel einzeln eingetragen werden. In der Praxis wäre das etwas unpraktisch.

'''Verbesserungsmöglichkeiten'''

<ul>

<li>Personen mit mehreren Abos in eine Zeile packen</li>
<li>Preise bei Personen mit mehreren Abos summieren</li>
    


</ul>




----

===Quellen===


<ul>

<li>[http://hsqldb.org/doc/guide/sqlgeneral-chapt.html SQL-Befehle]25.03.2022</li>
<li>[https://www.w3schools.com/sql/sql_distinct.asp SQL-Befehle]25.03.2022</li>
<li>[https://www.html-seminar.de/befehlsuebersicht.htm HTML-Befehle]25.03.2022</li>
<li>[https://www.4kfilme.de/wp-content/uploads/2021/07/disney-plus-netflix-prime-video-marktanteile.jpg Bild zur Überschrift]25.03.2022</li>    


</ul>


<code hidden>https://www.werstreamt.es</code>