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]]

ANMERKUNG: Ablaufdatum_Reittier(ERM) == Reittier_Restage(RM/Code)

== Das RM: ==


Primärschlüssel = „'''Fett'''“ Sekundärschlüssel/Fremdschlüssel = „''kursiv''“

Player('''U_ID''', Username, Level, Gold, Geschlecht, Reittier_Resttage, ''G_ID'', ''R_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,
   G_ID integer,
   R_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 Effekt_Item (
   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,3,2);
INSERT INTO Player VALUES(2,'Alexander',0,1396,13,2,1,3);
INSERT INTO Player VALUES(3,'Tom',0,834573,3,0,1,0);
INSERT INTO Player VALUES(4,'Paul',0,7,87,0,2,0);

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 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 Effekt_Item VALUES(1,2);
INSERT INTO Effekt_Item VALUES(5,4);
INSERT INTO Effekt_Item VALUES(4,3);
INSERT INTO Effekt_Item VALUES(3,1);

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(4,1);
INSERT INTO Player_Zauber VALUES(3,2);
INSERT INTO Player_Zauber VALUES(2,4);
INSERT INTO Player_Zauber VALUES(2,3);
INSERT INTO Player_Zauber VALUES(2,1);

INSERT INTO Reittier VALUES(1, 'Bulle', 17);
INSERT INTO Reittier VALUES(2, 'Rentier', 1337);
INSERT INTO Reittier VALUES(3, 'Gepard', 2000);</code>

'''''
== Abfragen: ==
'''''
Alles anzeigen
<run id="52f7c53852e1b">
SELECT * FROM Player;
SELECT * FROM Gilde;
SELECT * FROM Item;
SELECT * FROM Player_Item;
SELECT * FROM Effekt;
SELECT * FROM Effekt_Item;
SELECT * FROM Zauber;
SELECT * FROM Player_Zauber;
SELECT * FROM Reittier;</run>

<run id="52f7c53852eb9">
SELECT Player.Username,Item.I_ID,Item.Itemname, From Player,Item WHERE Player.Username='Alexander';
</run>

<run id="52f7c53852f46"></run>

<run id="52f7c53852fca"></run>

<run id="52f7c5385304f"></run>

<run id="52f7c538530d6"></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