1.7k Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von aznfreak Mitglied (235 Punkte)
Hallo PHP / SQL Experten,

ich plane ein Browsergame.
Alle Charakter in dem Spiel sollen ein Inventar haben mit Items.
Wie sollte ich die Datenbank dieses Inventars bzw. Itemliste anlegen?

Ich hab mir überlegt, dass jedem Charakter eine Itemliste (Invantar) zugeordnet
wird.
Ich habe leider keinen Ansatz für die Datenbank bzw die Tabelle.
Meine Überlegung war:
- ID_Itemliste
- Item
- Anzahl

Aber ich kann ja schlecht alle Items die es gibt auflisten und die Anzahl, die der
Charakter besitzt in die Tabelle einfügen, oder?

Momentan habe ich folgende Tabellen in der Datenbank:
- User
- Charakter
- Shop / Markt
- Itemlist???

Bei Itemlist häng ich grad fest. In der Tabelle Shop / Markt sind auch alle Items drin,
kann ich damit was anfangen? Dass ich diese Zellen aus "Shop" mit der Itemlist
verknüpfe oder irgendwie sowas?

Hoffe mein Problem ist verständlich und jemand hat ne Idee wie ich das umsetzen
kann.

4 Antworten

0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Das ist im Grunde eine klassische M:N-Relation, d.h. du verknüpfst deinen Charakter mit dem Item über eine Zwischentabelle, die die Charakter_ID und die Item_ID jeweils als Fremdschlüssel enthält. Eventuell könntest du die Anzahl der Items noch als zusätzliches Feld einbauen.

In Pseudo-SQL sähe das in etwa folgendermaßen aus:

CREATE TABLE Itemliste (
Charakter_ID INTEGER UNSIGNED NOT NULL,
Item_ID INTEGER UNSIGNED NOT NULL,
Anzahl INTEGER
);
ALTER TABLE Itemliste ADD PRIMARY KEY (Charakter_ID, Item_ID);


Item_ID wäre dabei die ID des Items aus dem Shop bzw. eben eine Referenz auf eine Tabelle, in der alle verfügbaren Items definiert sind.
0 Punkte
Beantwortet von aznfreak Mitglied (235 Punkte)
Ah stimmt...
So muss ich also jedem Charakter ein Item und die Anzahl zuordnen.
Und das für alle verschiedenen Items, die der Charakter besitzt.

Ich kann also nicht in nur einem Datensatz die Charakter ID und ALLE
Items, die der Charakter besitzt inkl. Anzahl einbringen?

Pro Item also ein Datensatz?
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Du könntest natürlich auch die IDs der Items direkt beim Charakter speichern, z.B. als Textfeld mit einer Komma-getrennten Liste von Item_IDs.

Das ist aber sehr schlechtes Datenbank-Design! (siehe Datenbank-Normalisierung)
0 Punkte
Beantwortet von aznfreak Mitglied (235 Punkte)
Danke Supermax ^^
Wie die Normalisierung ist, weiß ich ^^

Das mit der Liste als Textfeld, wäre schlecht darzustellen. Die Items
sollten ja auch noch zusätzlich geändert werden, wenn Items
verwendet werden.
zB, wenn ein Item genutzt wird, soll die Anzahl verringert werden bla...

Aber hast mir mit der ersten Antwort schon sehr geholfen, danke ^^
...