Frage über Relationen zum GORM

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
filipre
Beiträge: 13
Registriert: 02.12.2009, 23:10:39

Frage über Relationen zum GORM

Beitrag von filipre » 23.08.2010, 13:07:49

Hallo,
Ich habe eine Frage zu einem bestimmten Anwendungsfall. Zuerst stell ich mein Beispiel vor und dann die Frage. Ich würde mich freuen, wenn jemand antwortet :)

Also, ich habe beispielsweise ein Ticketsystem. Es gibt die Objecte "Server", "Ticket" und "User". Ein Server verwaltet mehrere Tickets und mehrere User. Dabei steht Server zu Ticket vom Typ COMPOSITION und Server zu User vom Typ ASSOCIATION. Ein User kann mehrere Tickets bestellen, kann aber auch keins kaufen, darum gibt es auch eine Relation von User zu Ticket vom Typ ASSOCIATION. Wurde ein Ticket verkauft, kann kein anderer User mehr dieses Ticket kaufen (macht auch irgendwie Sinn, oder :P )

Ich möchte nun auf alle Tickets zugreifen, die noch nicht von Usern gekauft wurden. Dabei finde ich einfach keine passende Methode beim GORM. Ich habe mir überlegt, die Methode "loadNotRelatedObjects" zu verwenden, jedoch kann man diese ja nur auf einen bestimmten User anwenden. D.h. ich würde dann eine Liste bekommen über die Tickets, die zwar User A noch nicht gekauft hat, aber dafür vielleicht User B und User C. Auch wenn ich nicht nur einen User, sondern alle User mit loadObjectList* lade, kommt es auf das selbe hinaus. Es gäbe jedoch eine Möglichkeit (wenn ich die Funktion richtig verstanden habe), alle Tickets zu laden, und dann jedes einzelne mit "loadRelationMultiplicity" zu überprüfen, ob es eine Relation mit User besitzt. Bei 0 wäre das Ticket noch frei, bei 1 nicht mehr. Aber ich stell mir das bei angenommen über 10 000 Tickets sehr schlecht vor. Die einzigste Idee, die mir jetzt noch einfallen würde, wäre ein extra Feld bei Ticket zu erstellen, welches angibt, ob ein Ticket verkauft wurde oder noch erhältlich ist. Aber ich bin mir sicher, dass man das auch bestimmt über die Relationen erkennen kann.

Darum komm ich jetzt zu meiner Frage: Gibt es eine Methode, die so ähnlich wie loadNotRelatedObjects funktioniert, sich jedoch auf alle User und nicht nur auf einen User bezieht? Dann hätte man eine Liste von Tickets, die alle noch keine Relation zu User haben, und damit noch frei erhältich wären.

Wenn ihr Fragen zu meinem Beispiel habt, beantworte ich sie natürlich gerne. Ich verwende die neue Version des APF (1.12)

PS: Kann man die Forum-Suche besser einstellen? Wenn ich was suche, kommt meißtens eine Fehlermeldung, dass es zu viele Einträge gibt, und wenn ich dann meine Suche erweitere, kommt, dass keine Topics vorhanden sind :roll: Nach dem 4. Mal wird das ziehmlich nervig.

mfg filipre

Benutzeravatar
dr.e.
Administrator
Beiträge: 4525
Registriert: 04.11.2007, 16:13:53

Re: Frage über Relationen zum GORM

Beitrag von dr.e. » 23.08.2010, 15:54:43

Hallo filipre,

PS: Kann man die Forum-Suche besser einstellen? Wenn ich was suche, kommt meißtens eine Fehlermeldung, dass es zu viele Einträge gibt, und wenn ich dann meine Suche erweitere, kommt, dass keine Topics vorhanden sind :roll: Nach dem 4. Mal wird das ziehmlich nervig.

Ich habe das schon mal versucht, es scheit aber an der MySQL-Fulltext-Einstellung des Servers zu liegen. Demnächst werde ich die Software einem Update unterziehen und dann kann ich nochmal prüfen, ob es doch einen Workaround gibt. Mich nervt das selbst auch. :roll:

Also, ich habe beispielsweise ein Ticketsystem. Es gibt die Objecte "Server", "Ticket" und "User". Ein Server verwaltet mehrere Tickets und mehrere User. Dabei steht Server zu Ticket vom Typ COMPOSITION und Server zu User vom Typ ASSOCIATION. Ein User kann mehrere Tickets bestellen, kann aber auch keins kaufen, darum gibt es auch eine Relation von User zu Ticket vom Typ ASSOCIATION. Wurde ein Ticket verkauft, kann kein anderer User mehr dieses Ticket kaufen (macht auch irgendwie Sinn, oder :P )

In einem solchen Fall würde ich - das hattest du ja ohnehin schon mit einem Attribut überlegt - Status-Objekte einführen. Diese sind dann mit einem Ticket verknüpft und heißen beispielsweise "ausverkauft", "gesperrt", ... Ausgehend von diesen kannst du dann mit loadRelatedObjects() sehr einfach und vor allem performant abfragen, was du gerne tun würdest. Der Preis ist hier allerdings, dass du in deiner Business-Logik das Setzen des Status mit beachten und implementieren musst.

Um das abschließend beurteilen zu können, stellt sich mir jedoch die Frage, ob ein Ticket nur einmal im System ist (z.B. mit einer maximal buchbaren Anzahl) oder es mehrere gibt?
Viele Grüße,
Christian

filipre
Beiträge: 13
Registriert: 02.12.2009, 23:10:39

Re: Frage über Relationen zum GORM

Beitrag von filipre » 23.08.2010, 17:19:23

Danke für die Antwort.

Ich habe das schon mal versucht, es scheit aber an der MySQL-Fulltext-Einstellung des Servers zu liegen. Demnächst werde ich die Software einem Update unterziehen und dann kann ich nochmal prüfen, ob es doch einen Workaround gibt.


Das hört sich gut an.

In einem solchen Fall würde ich - das hattest du ja ohnehin schon mit einem Attribut überlegt - Status-Objekte einführen. Diese sind dann mit einem Ticket verknüpft und heißen beispielsweise "ausverkauft", "gesperrt", ... Ausgehend von diesen kannst du dann mit loadRelatedObjects() sehr einfach und vor allem performant abfragen, was du gerne tun würdest. Der Preis ist hier allerdings, dass du in deiner Business-Logik das Setzen des Status mit beachten und implementieren musst.


Du meinst also, dass ich ein extra Object "ausverkauft" mit Tickets assoziieren sollte. Und über das Object Ausverkauft kann ich dann auf die Tickets zugreifen. Dieses Object sollte demnach auch mit Server verknüpft sein, richtig? Möchte ich dann eine komplette TicketListe haben, lad ich es direkt über Server2Ticket und möchte alle ausverkauften Tickets haben, lade ich die Tickets über Ausverkauft (Ausverkauft2Ticket). Da kommt die Idee auf, dass ich eine allgemeine Klasse "Status" erstelle, die den Typ speichert; z.B. mit "ausverkauft" und "gesperrt". Um dann an die ausverkauften Tickets zu bekommen, lad ich die Klasse Status und setze dabei ein Kriterium, dann holt er mit loadRelatedObject die Tickets. Verbesser mich, falls ich jetzt ganz falsch denke :D
Noch eine kleine Frage, falls ich angenommen nur ein Status haben möchte. Wo liegt der Vorteil bei einer neuen Klasse "ausverkauft" gegenüber dem Attribut "ausverkauft" bei der Ticketklasse? Man könnte doch auch genausogut die Tickets mit einem Kriterium holen, wie oben beschrieben.

Um das abschließend beurteilen zu können, stellt sich mir jedoch die Frage, ob ein Ticket nur einmal im System ist (z.B. mit einer maximal buchbaren Anzahl) oder es mehrere gibt?


Es gibt mehrere Tickets. Für 10 000 Tickets, sollten es dann 10 000 Einträge sein. Das Beispiel ist vielleicht nicht Optimal gewählt. Der User sollte dann auf sein/e Ticket/s zugreifen und auch einstellen können. Einstellen insofern, dass man seine eigene Sitzplatznummer bestimmen darf, die Uhrzeit, die Show, usw...

mfg filipre

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: Frage über Relationen zum GORM

Beitrag von Megger » 23.08.2010, 17:29:39

Wo liegt der Vorteil bei einer neuen Klasse "ausverkauft" gegenüber dem Attribut "ausverkauft" bei der Ticketklasse? Man könnte doch auch genausogut die Tickets mit einem Kriterium holen, wie oben beschrieben.

Ich denke du bist einfach flexibler wenn du Ticket und TicketStatus hast. Sollte es später mal dazu kommen, dass vielleicht doch noch ein weiterer Status hinzukommt, dann brauchst du ihn nur in der TicketStatus Tabelle hinzufügen. Außerdem hast du die Möglichkeit einem Ticket mehr als einen Status zuzuordnen (zum Beispiel "Spezialangebot" und "ausverkauft")
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

filipre
Beiträge: 13
Registriert: 02.12.2009, 23:10:39

Re: Frage über Relationen zum GORM

Beitrag von filipre » 23.08.2010, 17:45:40

Ahh, okey.
Hört sich so sehr praktisch an, danke :)

mfg filipre

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast