Relation zwischen Objekten/Entitäten
-
Hallo,
Ich weiß, diese Frage hätte ev. nach "Datenbanken" gehört, aber ich wills ja in C++ (mit DB Unterstützung) Programmieren und hier scheint mir mehr los zu sein, darum:
Ich hab eine Frage, wo ich nicht weiß, wie ich ansetzen soll:
Ich hab zwei Objekte/Entitäten: Charakter und Sitzplatz.Nun möchte ich wissen, wie man das "normalerweise" abbildet. Ein Charakter kann verschiedene Zustände haben: Im Vorraum, am Gang, am Sitzplatz. Und eben nur, wenn der Charakter am Sitzplatz ist dann besteht auch eine Relation zwischen Sitzplatz und Charakter. Wie würdet ihr das realisieren?
dh:
- Speichert man beim Charakter eine SitzplatzID, wenn er am Sitzplatz ist. Oder speichert man eine CharakterID zum Sitzplatz usw...
- Wie stellt man sicher, dass kein Mensch mit Status zB "im Vorraum" einen Sitzplatz hat?
- Wenn man nun einen Charakter "löscht", dann muss man natürlich auch den Sitzplatz loswerden, den er besetzt...danke im voraus!
-
Also wenn ich jetzt alles richtig verstanden habe ...
Würde ich an deiner Stelle die Sitzplatz ID im Charakter verwalten,
da dann die Abfragen auf den Charakterzustand im Code klar in der Klasse bleiben.Dann muss der Sitzplatz nur ein Attribut "belegt" mitschleppen,
das doppelbelegungen verhindert werden können. Dieses lässt sich dann
über die Sitzplatz ID relativ leicht abfragen, sowohl aus der Code als auch
der Datenbank sicht die man auf deine Frage haben kann.
-
Das kommt ganz darauf an was du damit anfangen willst.
- Wenn du bei einem besetzten Sitzplatz wissen willst wer denn drauf sitzt, ist sicherlich die speicherung der characterID (oder ein pointer auf den charakter) sinnvoll, sonst reicht einfach der Zustand besetzt/unbesetzt
- Der Character will sicher wissen auf welchem Platz er sitzt, also braucht er ne SitzplatzID (bzw. einen Pointer auf den Sitzplatz)- Wenn ein Character aufsteht (in den Vorraum geht, gelöscht wird, etc.) ruf einfach beim Sitzplatz ne Methode freimachen() auf, die den dortigen status auf "unbesetzt" setzt.
- Fürs hinsetzen generierst du eine Sitzplatz-Methode besetzen(Character& c), die eine Referenz (oder Pointer oder CharacterID) des Characters nimmt der den Platz besetzt. Je nach bedarf wir der Sitz dann einfach auf "besetzt" gesetzt bzw. die ID des Characters mit abgespeichert. (Ich würd das Argument aber auch dann einbauen wenn du erstmal nicht wissen willst wer sich hinsetzt. Das Argument jetzt einfach nicht zu benutzen ist leicht. Später wenn dus doch brauchst es neu einzubauen im ganzen Code ist viel schwerer)
-
hephaistos6 schrieb:
...
Ich möchte noch eine dritte Option in die Runde werfen... Wenn es weder sinnvoll ist den Wert im Charakter als zum Sitzplatz selbst zu speichern, kann auch eine dritte Tabelle hinzu kommen.
Beispielsweise:
[CharakterOrt]
CharakterID
SitzplatzID
...Dies könnte u.a. dann sinn machen wenn weitere Statis oder Werte für die Verknüpfung hinzukommen (z.B. eine Von/Bis-Zeit).
cu André
-
Ja, es sollte eigentlich beides möglich sein.
Ein Charakter sollte wissen, wo er sitzt und natürlich sollte ein Platz auch wissen, wer auf ihm sitzt...
aber danke für eure Gedanken soweit...
...stupid...