MySQL - Art Daten zu speichern

zef

Grünschnabel
Hallo!

Ich habe vor folgende Datenbank zu erstellen:

1. Es gibt eine Tabelle, die Charaktere beschreibt. Jede Zeile enthält einen Charakter. Die Spalten enthalten die Eigenschaften des Charakters.
Jeder Char hat bereits bestimmt Fertigkeiten erlernt, aber durchaus nicht alle.

2. Eine zweite Tabelle enthält eine Liste aller verfügbaren Fertigkeiten mit einer eindeutigen ID-Nummer, Beschreibung etc.

Nun möchte ich zu jedem Char aus der ersten Tabelle speichern, welche Skills er bereits erlernt hat. Meine erste Idee war, eine Spalte "Fertigkeiten" zu erstellen, die die IDs der bereits erlernten Fertigkeiten durch Kommata getrennt zu erstellen. Gibts es dazu eine "glücklichere" Lösung?

Vielen Dank im voraus!
 
Anhand Deiner Beschreibung denke ich, dass Du UNBEDINGT ein bischen noch das Handbuch von MySQL und vielleicht auch Allgemein zu Datenbanken durchlesen solltest.

Schau mal im Web nach Normalisierung. Erschliesst sich einem nicht gleich, aber macht auf lange Sicht glücklich.

Viel Glück. :-)

Chris
 
Gut gut, dann werde ich mich mal ranmachen. :)

Edit: So, ich habe mir mal gründlich die ersten 3 Normalformen zu Gemüte geführt. Wäre es eine sinnvolle Lösung das Ganze in folgender Art zu gestalten?

Es gibt zwei Detailtabellen, eine mit den Charakterdaten, eine mit den Fertigkeitsdaten. Des weiteren gibt es eine Basistabelle, die die jeweilige Zuordnung beschreibt. Diese hat den Aufbau: Laufende Nummer, CharakterId, FertigkeitsId.
 
Zuletzt bearbeitet:
Hi,

Frage:
Für was brauchst du die laufende Nummer in deiner 3. Tabelle?
Die Zuordnung Charakter - Fertigkeit sollte doch schon eindeutig genug sein.
 
Nunja, ich dachte die wäre nötig, da ja einem Char mehrere Fertigkeiten, aber auch einer Fertigkeit mehrere Charaktere zugeordnet sein können.
 
Hi zef,
lass die ID-Spalte drin, auch in der Zuordnungs-Tabelle. Zwar sind die Kombinationen alleine auch immer eindeutig (auch wenn ein Charakter mehrere Skills hat), aber eine eindeutige Datensatz-ID ist immer eine gute Idee.

Zum Beispiel willst Du ein Dropdown (ein HTML-<select>) mit den Skills eines Charakters programmieren. Dann bietet sich die ID des Zuordnungs-Datensatzes als <option>-Value an. Hättest Du den nicht, dann müsstets Du dafür die 2 IDs von Charakter und Skill irgendwie als String mit einem Trennzeichen verketten und später wieder auseinander-klamüsern. Und so gibt's noch einige Vorteile mehr.

Meine goldene Regel: JEDE Tabelle kriegt ihre eigene auto_increment-ID-Spalte als PRIMARY. Grundsätzlich. Immer. Die Speicherverschwendung ist auf halbwegs modernen System absolut zu vernachlässigen und es macht das Programmiererleben leichter.

Ciao,
Martin
 

Neue Beiträge

Zurück