Inventory System

Hallo ihr! :slight_smile:

Bin neu hier und hab das Forum eben beim Googeln gefunden. :slight_smile:

Ich beschäftige mich hobbymäßig mit der Architektur von persistenten Onlinespielen, insbesondere Rollenspielen, und zwar hauptsächlich mit dem Datenbankdesign, welches so einem Spiel zu Grunde liegt. Ich bin was Datenbanken angeht leider ein bluter Anfänger darum habe ich gehofft hier Hilfe zu finden bei einem Problem. :slight_smile:

Im Moment besteht meine Datenbank aus je einer Tabelle für Benutzer, deren Charaktere und Items, die in der Spielwelt existieren. Jetzt kann so ein Charakter aber eine begrenzte Anzahl in seinem Rucksack mit sich herumtrage, nur habe ich keine Ahnung, wie ich das am besten/performansten Lösen kann. Mir sind als Anfänger zwei Möglichkeiten eingefallen:

  • Eine große Tabelle mit den Spalten itemid und characterid.

  • Eine Tabelle mit den Spalten inventoryid und slot-slotx für die Lagerplätze.

Die erste Möglichkeit hat den Nachteil, dass man bei den Items zusätzlich noch speichern müsste, in in welcher Position des Inventars sie liegen(das kann man sich am besten wie eine Matrix von Kästchen vorstellen, für diejenigen, die so ein Spiel noch nie gesehen haben). Außerdem hätte die entsprechende Anfrage sicher eine sehr lange Laufzeit bei vielen Spielern und noch mehr Items.

Die zweite Möglichkeit hat den Nachteil, dass man zwei Anfragen durchführen muss. Ersteinmal muss man sich das Inventar über die inventoryid holen und danach nochmal die Items aus den einzelnen Slots.

Wie würde das ein Profi lösen? Bin für jede Anregung sehr dankbar! :slight_smile:

Der Profi würde sagen, du möchtest dir etwas Literatur zur Datenbank Normalisierung zu Gemüte führen :wink:

Wenn ich deine beiden Ansätze richtig verstanden habe, laufen diese schon in diese Richtung. Allerdings solltest du die Grundlagen dessen verstehen, was du dort einsetzt.

Normalisierung ist für ein vernünftiges Datenbankdesign eigentlich das A und O, ohne das läufst du irgendwann in gewaltige Probleme.

Gut, hat irgendjemand Literatur dafür zur Hand? Ich wüsste nämlich leider nichts, was ich hier vorschlagen könnte …

Danke erstmal für den Hinweis, hab für’s erste mal bei Wiki nachgeschlagen. :slight_smile:

Wenn ich das richtig verstanden habe, ist mein Design, so wie ich das hier habe schon in der 3NF. Ich finde jedenfalls keine transitiven Abhängigkeiten… nur weiß ich nicht wie mich das bei meinem Problem weiterbringt. :slight_smile:

Wenn du alles schon normalisiert hast, kannst du die Daten auch mit einem Join über deine zwei oder mehr Tabellen in einem Rutsch holen. Mit dem Join verknüpfst du praktisch die Tabellen über ein bestimmtes Merkmal miteinander (die ID z.B.).

So kannst du exakt die Daten selecten, die du im konkreten Fall benötigst.

17:26:26 < ads> ??join
17:26:26 < pg_docbot_ads> For information about ‘join’ see:
17:26:26 < pg_docbot_ads> http://www.postgresql.org/docs/current/static/queries-table-expressions.html ::
http://www.postgresql.org/docs/current/static/tutorial-join.html :: http://www.varlena.com/varlena/GeneralBits/56.php ::
http://www.w3schools.com/sql/sql_join.asp

Danke! Das bringt mich schonmal ein großes Stück voran… ich werd jetzt ein paar Stunden damit rumbasteln und schauen zu welchen Ergebnisse ich komme. :slight_smile:

Danke nochmal! :slight_smile: