PMG2022/DB Beleg/Elia
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language> == Idee & Ziel der Datenbank == Idee: Online Analytics Tool für das Spiel "League of Legends" nach dem Vorbild von [https://u.gg u.gg] Ich selbst spiele gerne League of Legends. Bei diesem MOBA (Multiplayer-Online-Battle-Arena) spielen zwei Teams bestehend aus je 5 Spielern in einer Arena, der "Kluft der Beschwörer" gegeneinander. Um zu gewinnen, muss ein Team den Nexus (eine Art Kristall) des gegnerischen Teams zerstören. [[Bild:Hilseduck_Lanes_cropped.jpg|400px|thumb|left|League of Legends Map]]Jeder Spieler spielt dabei einen der über 140 Champions, und übernimmt eine der 5 Rollen: entweder spielt er auf der "Top-Lane", der "Mid-Lane", im "Jungle", oder auf der "Bot-Lane" (dort spielen Supporter und ADC zusammen). Zudem wählt man vor dem Spiel Runen für seinen Champion aus, die unterschiedliche Vorteile bringen. Über das Spiel hinweg generiert man durch das töten von Minions / Monstern oder durch einen Kill an einem gegnerischem Spieler Gold, mit dem man sich dann Items kaufen kann. Diese verbessern stark die Fähigkeiten des eigenen Champions, z.B. mit mehr Schaden oder Rüstung. Gewinnt man ein Match, steigt man im Ligasysten (Eisen, Bronze, Silber, Gold, Diamant,..) auf. Jetzt ist natürlich interessant zu wissen, z.B. welche Runen extrem gute Spieler in hohen Ligen verwenden, oder was sie sich für Items auf dem Champion "XY" kaufen. Das ist der grundlegende Nutzen von Seiten wie [https://u.gg u.gg]. Sie tracken alle Spiele in League of Legends, speisen diese Datenmengen in eine Datenbank, und machen sie jedermann zugänglich. Selbstverständlich können die Datenmengen dann noch sinnvoll analysiert werden, und so z.B. festgestellt werden, welche Items gerade mit welchen Champions eine hohe Winrate (also auf alle Spiele gerechnet prozentuale Erfolgswahrscheinlichkeit) haben. Programme wie "Mobalytics" gehen dann noch einen Schritt weiter, analysieren die Spieler des gegnerischen Teams, und zeigem einem vor dem Spiel ihre Schwächen und Stärken auf. So raffiniert das auch klingen mag, alles basiert auf einer Datenbank, und dieser will ich mich hier annehmen. Um den Aufwand im machbaren Bereich zu halten, werde ich mich bei z.B. Items oder Runen auf wenige, beispielhafte, Parameter beschränken. == ERM-Modell == [[Bild:Hilseduck_Erm_modulation(1)SMALL.jpg|1200px]] <br>Entitäten: Player, Game<br> Relations: spielt<br> Kardinalitäten:<br> [spielt]: Ein Player spielt mehrere Games.<br> In einem Game spielen mehrere Player.<br> >> Beziehung Game - Player = n:m<br><br> Ich musste lange nachdenken, bis ich zu einem für mich zufriedenstellenden Ansatz für ein ERM-Modell gekommen bin. Mein ursprünglicher Plan war, einzelne Entitäten für Player, Game, Item, Champion und Rune zu erstellen. Das daraus resultierende Konstrukt ergab allerdings stets keinen Sinn. Denn Item, Champion und Runen sind in jedem Game unterschiedlich, aber gleichzeitig auch pro Spieler. Nach langem rätseln bin ich dann endlich auf die rettende Lösung gekommen: Champion, Rune, und Item sind Attribute der Beziehung zwischen Player & Game (namens "spielt"). Denn ein Player "spielt" in einem Game Champion xy, kauft sich und somit spielt Item xy & spielt den Runenpfad xy in einem Game; somit ist es für mich völlig logisch, diese als Attribute der Beziehung "spielt" zu werten. == Relationenmodell == == SQL == <code id="622b63825b0d6"></code><run id="622b638c37b67"></run> == Reflexion == == Quellen == Verwendete Software:<br> [https://sqliteonline.com/ sqlite.com] >> schöner online editor/compiler, mit nützlichen Features wie Vervollständigungsvorschlägen<br> SQL-Tutorials: [https://www.tutorialspoint.com/sqlite/sqlite_constraints.htm | sqlite check constraints] [https://sqlandme.com/2013/11/18/sql-server-custom-sorting-in-order-by-clause/ | sql order by case] [https://stackoverflow.com | Zeitpunkte (DATETIME) voneinander abziehbar machen >> via temporärer umwandlung ins julianday format] Projekt-Inspirationen: [https://u.gg | u.gg]