PMG/Kurs 1214/DB Beleg/Alexander
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>SQL</language>
== '''''Ziel der Datenbank:''''' ==
Dies ist eine Datenbank zu Speicherung von relevanten Daten in einem Online Rollenspiel.
Ich fand die Idee so eine Datenbank zu erstellen ganz interessant, weil ich auch schon mehrere Online Rollenspiele gespielt hab und wollte eben mal den Grudnstein für so ein Spiel selbst legen.
Pro Spieler fallen in so einem Spiel natürlich sehr viele verschidene Datensätze an, auch zwischen mehreren Spielern entstehen Daten die gespeichert werden wollen. Um für alle diese Daten den Überblick zu
behalten ist es von Vorteil ein Datenbank zu erstellen in der alles abgespeichert wird. Dies ermöglicht sowohl den Zugriff als auch die Wartung von Daten.
'''''
== Die Grundlagen(begriffe): ==
'''''
Datenbasis: Datenmaterial, strukturierte Daten
Datenbankmanagementsystem (DBMS): dient der Sortierung und Verwaltung von Daten(speichern, löschen...); Vorkehrungen zur Datensicherheit/Datenschutz
Datenbank: Datenbasis und Datenbankmanagementsystem (DBMS) in Verbindung
'''Entität'''
Eine Entität (Entity) ist ein konkretes, eindeutig identifizierbares,Datenobjekt. In einer Entitymenge werden Entitäten mit gleichen Eigenschaften zusammengefasst. Entitymengen werden durch Substantive angegeben.
'''Attribut (Eigenschaft)'''
Attribute beschreiben die Eigenschaften einer Entitymenge(Menge der Objekte).
'''Relationship (Beziehung)'''
Eine Beziehung zwischen zwei Entitymengen und somit zwischen den konkreten Entitäten heißt Relationship. Relationships werden durch Verben angegeben. Eigenschaften von Relationships nennt man ebenfalls Attribute.
'''Beziehungen im ER-Modell (Kardinalitäten):'''
1:1-Beziehung(Eineindeutig): Jeder Entität der Entitymenge A wird genau eine Entität der Entitymenge B zugeordnet und umgekehrt.
1:n-Beziehung(Eindeutig): Jeder Entität der Entitymenge A können mehrere Entitäten der Entitymenge B zugeordnet werden, umgekehrt kann jedoch jeder Entität der Menge B nur genau eine Entität der Menge A zugeordnet werden.
m:n-Beziehung(Mehrdeutig): Jeder Entität der Entitymenge A können mehrere Entitäten der Entitymenge B zugeordnet werden und umgekehrt.
'''Schlüssel:'''
Ein Schlüssel setzt sich aus einer (minimalen) Menge von Attributen einer Entität zusammen und dient zu ihrer eindeutigen Identifikation.
Primärschlüssel: Das Relationenmodell fordert, dass jede Tabelle ein Attribut (oder eine Attributkombination) enthält, über das jeder Datensatz eindeutig identifiziert werden kann.
'''Normalformen (ENF, ZNF, DNF):'''
ENF - Erste Normalform: jeder Spalte wird nur eine Information zugeordnet
ZNF - Zweite Normalform: simultane Aufteilung der Entitäten und Entitymengen in Tabellen
DNF - Dritte Normalform: kein Feld darf von einem Nicht-Schlüssel-Feld abhängig sein, Abhängigkeit nur von einem Schlüsselfeld
'''Transformationsregeln
'''
Regel 1: Jede Entitymenge, die im ER-Modell enthalten ist, wird im relationalen Modell zu einer eigenständigen Tabelle. - Tabellenname (Primärschlüssel, Attribut_1,…,Attribut_n)
Regel 2: Zwei Entitymengen der Kardinalität 1:1 werden zu einer Tabelle zusammengefasst.
Regel 3: Wenn zwei Entitymengen durch einen Beziehungstyp der Kardinalität 1:n charakterisiert sind, wird der Primärschlüssel der ersten Entitymenge (1:n) als Fremdschlüssel der zweiten Entitymenge (1:n) eingefügt. - Tabellenname (Primärschlüssel, Attribut_1,…,Attribut_n, Fremdschlüssel)
Regel 4: Wenn zwei Entitymengen durch einen Beziehungstyp der Kardinalität n:m charakterisiert sind, entsteht eine neue Tabelle. Diese Tabelle enthält beide Primärschlüssel der jeweiligen Entitymengen als Fremdschlüssel. Falls die Beziehung durch weitere Attribute charakterisiert ist, werden diese mit in die Tabellen aufgenommen. - Tabellenname (Primärschlüssel, Attribut_1,…,Attribut_n, Fremdschlüssel_1, Fremdschlüssel_2)
== Das ERM: ==
[[Bild:DB_Beleg_Final3.png]]
== Das RM: ==
Primärschlüssel = „'''Fett'''“ Sekundärschlüssel/Fremdschlüssel = „''kursiv''“
Player('''U_ID''', Username, Level, Gold, Geschlecht, Reittier_Resttage, ''R_ID'', ''G_ID'')
Gilde('''G_ID''', Gildenname, Gildenlevel)
Item('''I_ID''', Itemname)
Player_Item(''U_ID'', ''I_ID'', Anzahl)
Effekt('''E_ID''', Effektname, Schaden)
Item_Effekt(''I_ID'', ''E_ID'')
Zauber('''Z_ID''', Zaubername, Zaubertyp, Zauberschaden)
Player_Zauber(''U_ID'', ''Z_ID'')
Reittier('''R_ID''', Tiername, Geschwindigkeit)
'''
''
== Tabellen: ==
'''''
<code id="52f7c12eb693d">DROP TABLE IF EXISTS Player;
CREATE TABLE Player (
U_ID integer,
Username varchar(40),
Geschlecht integer,
Gold integer,
Level integer,
Reittier_Resttage integer,
R_ID integer,
G_ID integer,
PRIMARY KEY (U_ID)
);
DROP TABLE IF EXISTS Item;
CREATE TABLE Item (
I_ID integer,
Itemname varchar(40),
PRIMARY KEY (I_ID)
);
DROP TABLE IF EXISTS Player_Item;
CREATE TABLE Player_Item (
U_ID integer,
I_ID integer,
Anzahl integer
);
DROP TABLE IF EXISTS Effekt;
CREATE TABLE Effekt (
E_ID integer,
Effektname varchar(40),
Effektbeschreibung varchar(255),
Schaden integer,
PRIMARY KEY (E_ID)
);
DROP TABLE IF EXISTS Effekt_Item;
CREATE TABLE Item_Effekt (
I_ID integer,
E_ID integer
);
DROP TABLE IF EXISTS Gilde;
CREATE TABLE Gilde (
G_ID integer,
Gildenname varchar(255),
Gildenlevel integer,
PRIMARY KEY (G_ID)
);
DROP TABLE IF EXISTS Zauber;
CREATE TABLE Zauber (
Z_ID integer,
Zaubername varchar(255),
Zaubertyp varchar(50),
Zauberschaden integer,
PRIMARY KEY (Z_ID)
);
DROP TABLE IF EXISTS Player_Zauber;
CREATE TABLE Player_Zauber (
U_ID integer,
Z_ID integer
);
DROP TABLE IF EXISTS Reittier;
CREATE TABLE Reittier (
R_ID integer,
Tiername varchar(255),
Geschwindigkeit integer,
PRIMARY KEY (R_ID)
);</code>
<code id="52f7c14ee3db9">
INSERT INTO Player VALUES(1,'Sebastian',0,5347, 11, 5,2,3);
INSERT INTO Player VALUES(2,'Alexander',0,1396, 13, 2,3,1);
INSERT INTO Player VALUES(3,'Tom', 0,834573, 3, 0,0,1);
INSERT INTO Player VALUES(4,'Paul', 0,7, 87, 7,1,2);
INSERT INTO Player VALUES(5,'Jakob', 0,345, 6, 0,0,3);
INSERT INTO Player VALUES(6,'Miriam', 1,65675, 9, 4,3,3);
INSERT INTO Player VALUES(7,'Georg', 0,23449, 24, 0,0,4);
INSERT INTO Player VALUES(8,'Jennifer', 1,50, 13, 0,0,0);
INSERT INTO Player VALUES(9,'Richard', 0,1337, 19, 2,1,1);
INSERT INTO Player VALUES(10,'Mr.T', 0,99999999, 999,9,2,4);
INSERT INTO Item VALUES(1,'Schwert');
INSERT INTO Item VALUES(2,'Schild');
INSERT INTO Item VALUES(3,'Bogen');
INSERT INTO Item VALUES(4,'Stab');
INSERT INTO Item VALUES(5,'Morgenstern');
INSERT INTO Player_Item VALUES(1,1,7);
INSERT INTO Player_Item VALUES(2,5,9);
INSERT INTO Player_Item VALUES(2,2,3);
INSERT INTO Player_Item VALUES(5,1,1);
INSERT INTO Player_Item VALUES(7,1,1);
INSERT INTO Player_Item VALUES(7,2,1);
INSERT INTO Player_Item VALUES(7,4,1);
INSERT INTO Player_Item VALUES(8,5,2);
INSERT INTO Player_Item VALUES(10,4,1);
INSERT INTO Player_Item VALUES(10,3,2);
INSERT INTO Effekt VALUES(1,'Frostschaden','verlangsamt Gegner',21);
INSERT INTO Effekt VALUES(2,'Feuerschaden','zusätzlicher Feuerschaden',33);
INSERT INTO Effekt VALUES(3,'Blitzschaden','fügt Magieschaden',7);
INSERT INTO Effekt VALUES(4,'Explosion','tötet den Gegner direkt',9999);
INSERT INTO Item_Effekt VALUES(1,2);
INSERT INTO Item_Effekt VALUES(2,2);
INSERT INTO Item_Effekt VALUES(3,1);
INSERT INTO Item_Effekt VALUES(4,3);
INSERT INTO Item_Effekt VALUES(5,4);
INSERT INTO Gilde VALUES(1,'Legends',25);
INSERT INTO Gilde VALUES(2,'Winner',2);
INSERT INTO Gilde VALUES(3,'Sebastianos',43);
INSERT INTO Gilde VALUES(4,'Bruderschaft',33);
INSERT INTO Zauber VALUES(1,'Feuerzauber','Feuer',20);
INSERT INTO Zauber VALUES(2,'Eiszauber','Eis',20);
INSERT INTO Zauber VALUES(3,'Blitzzauber','Blitz',20);
INSERT INTO Zauber VALUES(4,'Geißel der Unterwelt','Unterwelt',400);
INSERT INTO Player_Zauber VALUES(1,3);
INSERT INTO Player_Zauber VALUES(2,4);
INSERT INTO Player_Zauber VALUES(2,3);
INSERT INTO Player_Zauber VALUES(2,1);
INSERT INTO Player_Zauber VALUES(3,2);
INSERT INTO Player_Zauber VALUES(4,1);
INSERT INTO Player_Zauber VALUES(7,3);
INSERT INTO Player_Zauber VALUES(8,2);
INSERT INTO Player_Zauber VALUES(9,1);
INSERT INTO Player_Zauber VALUES(10,4);
INSERT INTO Reittier VALUES(1, 'Bulle', 17);
INSERT INTO Reittier VALUES(2, 'Rentier', 1337);
INSERT INTO Reittier VALUES(3, 'Gepard', 2000);</code>
'''''
== Abfragen: ==
'''''
Alle Tabellen anzeigen
<run id="52fcbfe8e1b18"></run>
Alle Mitglieder einer Gilde herausfinden(hier Gilde "3"= "Sebastianos")
<run id="52fcbfe8e1c0f"></run>
Diese Abfrage ermittelt alle Items eines Spielers(hier vom Spieler Alexander)
<run id="52fcbfe8e1cd2"></run>
Diese Abfrage ermittelt alles User die einen bestimmten Zauber beherrschen(hier "Geißel der Unterwelt")
<run id="52fcbfe8e1d6a"></run>
Diese Abfrage ermittelt alle Spieler die ein bestimmtes Item besitzen(hier "Morgenstern")
<run id="52fcbfe8e1e20"></run>
Diese Abfrage ermittelt alle Waffen die einen Schaden von mehr als 25 machen
<run id="52fcbfe8e1f0a"></run>
Diese Abfrage ermittelt alle Spieler die doch ein Reittier besitzen und dies mehr als 4 Tage
<run id="52fce66373194"></run>
Diese Abfrage zählt alle Spieler in einer Gilde(hier Legends)
<run id="52fce66373244"></run>
'''''
== Arbeitsnachweis: ==
'''''
27.01.14 Beginn der Arbeit am DB Beleg - Idee überlegt, ERM gestaltet, RM erstellt
03.02.14 weiter am DB Beleg gearbeitet - Tabellen erstellt, Tabellen mit Datensätzen gefüllt
09.02.14 kleine Korrekturen an allem - Grundlagen erklärt; RM, Tabellen, Datensäzte erweitert/verändert
10.02.14 Abfragen erstellt
13.02.14 Restliche Abfragen erstellt, Datensätze hinzugefügt