PMG1719/DB Beleg/Max
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language> == Themenwahl == In meinem Datenbankbeleg möchte ich die Umsetzung eines Rollenspiel-Videospieles realisieren. Dieses Thema wählte ich, weil ich ??? == Modellierung der Datenbank == Entity Relationship Model (ERM) [[Bild:Maxschloool_ERM_Screen.JPG]] - Konkretes Relationship Model (RM) [[Bild:Maxschloool_RM_Screen.JPG]] == Erstellung der Tabellen == <code id="5c41785ade45a"> DROP TABLE IF EXISTS SPIELER; CREATE TABLE SPIELER( Player_ID int AUTO_INCREMENT, Username varchar(20), Level int, Erfahrung int, Lebenspunkte int, Coins int, Clan_ID int, Perk_ID int, PRIMARY KEY (Player_ID) ); DROP TABLE IF EXISTS CLAN; CREATE TABLE CLAN( Clan_ID int AUTO_INCREMENT, Name varchar(20), Kapazitaet int, Levelgrenze int, Anfuehrer_ID int, PRIMARY KEY (Clan_ID) ); DROP TABLE IF EXISTS MONSTER; CREATE TABLE MONSTER( Monster_ID int AUTO_INCREMENT, Name varchar(20), Erfahrung int, PRIMARY KEY (Monster_ID) ); DROP TABLE IF EXISTS PERK; CREATE TABLE PERK( Perk_ID int AUTO_INCREMENT, Name varchar(20), Beschreibung varchar(128), Effekt_ID int, PRIMARY KEY (Perk_ID) ); DROP TABLE IF EXISTS ITEM; CREATE TABLE ITEM( Item_ID int AUTO_INCREMENT, Name varchar(20), Beschreibung varchar(128), Effekt_ID int, PRIMARY KEY (Item_ID) ); DROP TABLE IF EXISTS EFFEKT; CREATE TABLE EFFEKT( Effekt_ID int AUTO_INCREMENT, Name varchar(20), Beschreibung varchar(128), PRIMARY KEY (Effekt_ID) ); DROP TABLE IF EXISTS besitzt; CREATE TABLE besitzt( Player_ID int, Item_ID int ); </code> == Befüllen der Datensätze == <code id="5c417a2f3b656"> INSERT INTO SPIELER VALUES(1, 'Schloool', 100, 250, 10, 10000, 1, 2); INSERT INTO SPIELER VALUES(2, 'ReitzOnTour', 23, 140, 10, 7346, 1, 1); INSERT INTO SPIELER VALUES(3, 'Helmbrecher2001', 12, 0, 10, 50, NULL, NULL); INSERT INTO SPIELER VALUES(4, 'BaytuzLP', 352, 254, 10, 152, 2, 1); INSERT INTO SPIELER VALUES(5, 'AlbanerAlban', 13, 12, 10, 200, 3, 1); INSERT INTO SPIELER VALUES(6, 'KokosPalme', 53, 234, 10, 1636, 3, 3); INSERT INTO SPIELER VALUES(7, 'KillerSchulsprecher', 12, 250, 10, 10000, NULL, 1); INSERT INTO SPIELER VALUES(8, 'Teichrose', 454, 250, 10, 16354524, 2, 4); INSERT INTO SPIELER VALUES(9, 'FeuerFeuerFEEEEUER', 23, 52, 10, 434, 1, 1); INSERT INTO SPIELER VALUES(10, 'JeckerJeschke', 47, 245, 10, 3433, 1, 3); INSERT INTO SPIELER VALUES(11, 'NiedererSchuster', 32, 250, 10, 3672, 3, 2); INSERT INTO SPIELER VALUES(12, 'Bobicar', 1, 0, 10, 0, NULL, NULL); INSERT INTO SPIELER VALUES(13, 'Metal4Life', 100, 24, 10, 10000, 2, NULL); INSERT INTO SPIELER VALUES(14, 'MakeGodsWordHappen', 140, 56, 10, 13060, 3, 4); INSERT INTO CLAN VALUES(1, 'Schlossergilde', 10, 75, 1); INSERT INTO CLAN VALUES(2, 'Hardcorezockerbande', 25, 75, 8); INSERT INTO CLAN VALUES(3, 'Die Heidenverfolger', 20, 20, 14); INSERT INTO MONSTER VALUES(1, 'Kanalratte', 10); INSERT INTO MONSTER VALUES(2, 'Giftmettigel', 20); INSERT INTO MONSTER VALUES(3, 'Gurkenfressender Eber', 50); INSERT INTO MONSTER VALUES(4, 'Schweinebärmann', 100); INSERT INTO MONSTER VALUES(5, 'Nacktmull mit Pollunder', 100); INSERT INTO MONSTER VALUES(6, 'Kruseltier', 125); INSERT INTO PERK VALUES(1, 'Schnelläufer', 'Lauf schneller als Usain Bolt!', 1); INSERT INTO PERK VALUES(2, 'Hochspringer', 'Spring höher als ein afrikanischer Springfloh!', 2); INSERT INTO PERK VALUES(3, 'Angreifer', 'Füge mehr Schaden als jemals zuvor zu!', 3); INSERT INTO PERK VALUES(4, 'Verteidiger', 'Erhöhe deine Verteidigung signifikant!', 4); INSERT INTO ITEM VALUES(1, 'Heiltrank', 'Heilt 5 Lebenspunkte', 5); INSERT INTO ITEM VALUES(2, 'Laufschuhe', 'Deine Beine laufen wie von alleine', 1); INSERT INTO ITEM VALUES(3, 'Fettes Stahlschild', 'Wehrt Angriffe besser ab', 4); INSERT INTO ITEM VALUES(4, 'Schwert des Unterganges', 'Zerstört jeden kläglichen Gegner', 3); INSERT INTO ITEM VALUES(5, 'Flügel des Icarus', 'Du lernst das Fliegen', 6); INSERT INTO ITEM VALUES(6, 'Göffel', 'Küchenutensil mit spitzen Zinken', 3); INSERT INTO EFFEKT VALUES(1, 'Geschwindigkeit', 'Erhöht Laufgeschwindigkeit'); INSERT INTO EFFEKT VALUES(2, 'Sprung', 'Erhöht Sprunghöhe'); INSERT INTO EFFEKT VALUES(3, 'Angriff', 'Erhöht Angriff'); INSERT INTO EFFEKT VALUES(4, 'Verteidigung', 'Erhöht Verteidigung'); INSERT INTO EFFEKT VALUES(5, 'Heilung', 'Erhöht Lebenspunkte'); INSERT INTO EFFEKT VALUES(6, 'Flug', 'Erlernt das Fliegen'); INSERT INTO besitzt VALUES(1, 2); INSERT INTO besitzt VALUES(1, 3); INSERT INTO besitzt VALUES(2, 5); INSERT INTO besitzt VALUES(4, 1); INSERT INTO besitzt VALUES(4, 2); INSERT INTO besitzt VALUES(4, 4); INSERT INTO besitzt VALUES(7, 3); INSERT INTO besitzt VALUES(9, 2); INSERT INTO besitzt VALUES(9, 3); INSERT INTO besitzt VALUES(11, 2); INSERT INTO besitzt VALUES(11, 5); INSERT INTO besitzt VALUES(13, 1); INSERT INTO besitzt VALUES(14, 2); INSERT INTO besitzt VALUES(14, 4); INSERT INTO besitzt VALUES(14, 6); </code> == Abfragen == '''Die dargebotenen Abfragen greifen alle auf die von mir entwickelte Datenbank zurück und sind in aufsteigender Komplexität angeordnet.''' Vielleicht kann die eine oder andere Abfrage als Übungsstoff für Schüler dienen, die "Musterlösung" kann durch einen Klick auf das Kreuz in der linken oberen Ecke der Runbox jederzeit wiederhergestellt werden. Über die zusätzliche Box könnt ihr selbst kreativ werden und weitere (für ein Videospiel dieser Art) relevante Abfragen erstellen. '''1) Anzeigen aller angemeldeten Spieler''' <run id="5c4176f7cb145">SELECT * FROM SPIELER;</run> '''2) Ordnen der Spieler nach ihrem Level in absteigender Reihenfolge''' <run id="5c45fbe335bf2"> SELECT Username, Level FROM SPIELER ORDER BY Level DESC; </run> 3) Anzeigen aller bedrohlichen Monster, die beim Tod mehr als 75 Erfahrungspunkte fallen lassen <run> SELECT * FROM MONSTER WHERE Erfahrung > 75</run> '''4) Anzeigen aller Claninformationen (Name und Kapazität) mit seinem jeweiligen Anführer''' <run id="5c45fbe335c6b"> SELECT CLAN.Name, CLAN.Kapazitaet, SPIELER.Username AS Anführer FROM CLAN, SPIELER WHERE SPIELER.Player_ID = CLAN.Anfuehrer_ID</run> '''5) Anzeigen aller Items, die der Spieler mit der ID 14 besitzt''' <run id="5c4188a7afb0a"> SELECT ITEM.Name FROM SPIELER, ITEM, besitzt WHERE ITEM.Item_ID = besitzt.Item_ID AND besitzt.Player_ID = 14 AND SPIELER.Player_ID = 14; </run> '''6) Alle Informationen von Perks oder Items, welche den Effekt "Angriff" nutzen''' Achtung: Die in der Musterlösung verwendete "UNION"-Anweisung komprimiert die Informationen verschiedener Tabellen in einer einzigen Spalte. In einer alternativen Lösung könnten diese Informationen zB. in lediglich einer Zeile angezeigt werden. <run> SELECT PERK.* FROM PERK, EFFEKT WHERE EFFEKT.Name = 'Angriff' AND PERK.Effekt_ID = EFFEKT.Effekt_ID UNION SELECT ITEM.* FROM ITEM, EFFEKT WHERE EFFEKT.Name = 'Angriff' AND ITEM.Effekt_ID = EFFEKT.Effekt_ID; </run> '''Box für freies Herumspielen am wahnsinnigen System''' <run id="5c45f927503db"></run> == Changelog == '''11.01.19''' Konzeptidee, Skizzierung der ERM und RM in Dia, Anlegung der Tabellen im Wiki^ '''18.01.19''' Einfügen aller Grafiken, Einfüllen der Datensätze, Anlegung erster Abfragen und der Themenwahl, sowie nervenaufreibendes Fixen auftretender Fehler