du könntest natürlich auch für jeden einheitentyp eine spalte verwenden. Das ist zwar unschön, aber für Browserspielesysteme mitunter empfehlenswert (vor allem, wenn ein hoher andrang herrscht)
Das hat vor allem den nachteil, dass du die Tabelle verändern müsstest, um eine neue Einheit hinzuzufügen. Und wenn da wirklcih viele leute dran spielen ist das... Da viele dieser Spiele allerdings ohnehin in "Runden" gespielt werden (also alle paar monate wird zurückgesetzt) ist das kein so großes problem, da du beim nächsten reset einfach die funktionen einbauen könntest. (so macht es planetarion beispielsweise)
ich habe aber eine andere idee.. die benötigt zwar viel speicherplatz, hat allerdings einige features für dich:
Stell dir das so vor: Jeder Spieler hat eine Armee. Das ist die summe aller seiner Leute, die er kämpfen lassen kann. Nun will er aber nur einen Teil seiner Leute in den Kampf schicken. Dazu hebt er aus seiner Armee eine Truppe aus.
Die Armeen werden nun "Richtig" schön relational gespeichert, also:
Code:
tbl armies
----------
userId
UnitTypeId
UnitCount
und dann mit einer zweiten tabelle
Code:
tbl unittypes
-------------
UnitTypeId
Name
Hitpoints
Strength
Armor
Range
(oder was auch immer)
Da ist mal alles drin gespeichert was er hat. Wenn er nun seine Leute in die Schlacht schickt, bildet er eine Truppe - und sagt wie viele einheiten welches typs dabei sind.
Die Tabelle sähe ungefähr so aus:
Code:
tbl troops
----------
troopId
ownerId
target //wohin sie müssen
started //wann sie losgegangen sind
unit1Count
unit2Count
unit3Count
unit4Count
.
.
.
Nun jedesmal wenn jemand eine Truppe losschickt, wird der Eintrag in die Tabelle troops gemacht. Damit hast du jetzt die anzahl der leute, die zu dem gegner unterwegs sind, und weisst wann sie losgegangen sind (also wann sie dort ankommen)
In dem kampf hast du somit leicht zugriff auf die beteiligten Truppen und deren eigenschaften (du musst ja nur alle einheitentypen abfragen, die beteiligt sind) und wenn der kampf vorbei ist, wird die Truppe wieder aufgelöst und der eintrag verschwindet.
Somit wäre die tabelle also nicht so groß und du könntest sie in der laufzeit ändern.
Hier aber ist das risiko, da ich keine ahnung habe, wie viele kämpfe so durchschnittlich ausgetragen werden, bin ich mir nicht sicher, wie groß das risiko ist, dass diese tabelle doch SEHR gross ist (beispielsweise Planetarion wenn du das kennst, was dort gekämpft wurde, war unglaublich)