MySQL Tabellenaufbau

InfectedBytes

Top Contributor
Hallo Leute,
ich bin derzeit dabei Teile eines Pen&Paper Rollenspiels zu digitalisieren. Viele Punkte lassen sich recht leicht in eine Datenbank integrieren, bei ein paar Sachen bin ich mir aber nicht sicher wie ich die Tabelle am besten aufbaue.

Konkret geht es um folgendes:
Frage 1:
Es gibt sehr viele "Fähigkeiten" (z.B. Ausweichen, Schwimmen, Klettern, ...) welche ein Charakter beherrschen kann. Für diese würde eine Tabelle wie folgt aussehen:
id, fertigkeit, beschreibung, ...
Allerdings gibt es ein paar Fähigkeiten, welche weiter unterteilt werden können, wie z.B. die Fähigkeit Sprache, diese kann z.B. unterteilt werden in Elfisch, Zwergisch, etc.
Grundsätzlich könnte ich diese jeweils als einzelne Fertigkeit speichern, also z.B.:
21, Sprache Elfisch, ...
22, Sprache Zwergisch, ...
23, Sprache xyz, ...

Charakter können nun verschiedene Karrieren durcharbeiten, bei denen unter anderem gefordert werden kann, dass ein Charakter mindestens zwei Sprachen spricht.
Mit dem bisherigen Tabellendesign ist das aber etwas unschön abzufragen.
Daher würde ich die Tabelle eher so aufbauen:
id, fertigkeit, subfertigkeit, beschreibung, ...
"Normale" Fertigkeiten hätten dann einfach NULL als subfertigkeit, während die Sprachen dann eben "elfisch"/"zwergisch"/etc. als subfertigkeit hätten.

*Nun zur eigentlichen Frage:
Ist dieser Ansatz sinnvoll? Oder würdet ihr das anders lösen?


Frage 2:
Wie bereits erwähnt haben Karrieren gewisse Forderungen. Gerne würde ich diese Anforderungen auch in einer Tabelle speichern.
Grundsätzlich würde ich dies wie folgt machen:
karriere_id, fähigkeit_id
Wenn eine Karrieren nun z.B. schwimmen und klettern fordern würde, hätte ich eben die beiden folgenden Einträge:
123, 10 entspricht (xyz, schwimmen)
123, 11 entspricht (xyz, klettern)

Aber diese Forderungen können eben auch so aussehen:
Ausweichen und Sprache (Elfisch) und 2 beliebige weitere Sprachen und (Klettern oder Schwimmen)
Bei diesen komplexen Anforderungen reicht der Ansatz natürlich nicht mehr.
Den einzigen Ansatz den ich hier habe, ist es ein "Logikfeld" zu haben:
karriere_id, logik
Das obige Beispiel könnte dann z.b. so aussehen:
123, "9 and 21 and choose(2, 20) and (11 or 10)"
entspricht xyz, ausweichen und Sprache (elfisch) and "zwei unterarten von Sprache" and (klettern oder schwimmen)

Das Logikfeld würde ich durch einen Parser überprüfen und ggf direkt auswerten.

*Nun die konkrete Frage:
Habt ihr eine bessere Idee um die komplexeren Anforderungen ordentlich in einer Tabelle zu speichern?


Schonmal vielen Dank im voraus!
 

Thallius

Top Contributor
Du solltest dich mal mit Crosstablen auseinander setzen.

Du hast eine Tabelle Karrieren

id INT PRIMARY KEY AUTOINC
name VARCHAR[128]

Dann hast Du eine Tabelle Fähigkeiten

id INT PRIMARY KEY AUTOINC
name VARCHAR[128]
issubof INT (zeigt auf die ID seiner Patentfähigkeit. Elfisch würde also auf Sprachen zeigen)

Dann hast du eine Crosstable KarriereFähigkeiten

karriere_id INT
fähigkeiten_id INT

Für jede Fähigkeit die eine Karriere brauht erzeugst du hier einen Eintrag.

Abfragen gehen dann mit JOIN

Gruß

Claus
 

InfectedBytes

Top Contributor
Danke schonmal.
Also das mit den Crosstables hatte ich sowieso vor, mir ginge es nur um die Repräsentation der "unterkategorien".
Der Verweis auf eine Elternfähigkeit ist wirklich eine gute Idee.
Damit ist die erste Frage geklärt.

Falls jemand mir auch noch mit der zweiten Frage helfen kann, wäre ich sehr dankbar^^
 

InfectedBytes

Top Contributor
Ich weiß nicht genau wie das bei meiner zweiten Fragen helfen soll.
In der Datenbank soll halt gespeichert werden, welche Fähigkeiten von einer Karriere benötigt werden.
Dabei können die Anforderungen "und", "oder", "x beliebige unterarten von xyz", etc. sein.
Wenn es immer nur "und" Verknüpft wäre, dann würde eine Tabelle (karriere_id, fertigkeiten_id) reichen. Aber es gibt eben auch andere Verknüpfungen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
OnDemand Externe IDs speichern - Tabellenaufbau Datenbankprogrammierung 8

Ähnliche Java Themen

Neue Themen


Oben