dimanche 22 mars 2015

MySQL Tabellenaufbau

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!





MySQL Tabellenaufbau

0 commentaires:

Enregistrer un commentaire