Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Verständnisfrage zu Datenbankbeziehungen dynamisch erstellen

Begonnen von Bohnsopp, Oktober 31, 2016, 10:45:01

⏪ vorheriges - nächstes ⏩

Bohnsopp

Ich gehe gleich nochmal auf die Fragen aus #12 ein, aber zuerst mal die anderen Fragen und ein paar allgemeine Infos.

Zitat von: MzKlMu am November 01, 2016, 13:58:51
Und noch folgende Frage: Kann eine Wettfahrt mehrere Gruppen haben, oder betrifft eine Wettfahrt immer nur eine Gruppe?

- es gibt mehrere Bootstypen die im Yardsticksystem gegeneinander segeln (alternativ gibt es auch Einheitsregatten mit gleichen Booten. Dies betrachte ich hier erstmal nicht. Ist im Grunde auch einfacher, da hierbei der Zieleinlauf = Platzierung ist und es keine Verrechnungsformeln gibt. Einheitsregatten mit unterschiedlichen Bootstypen werden in ebenfalls in Gruppen sortiert)
- da unterschiedliche Bootstypen unterschiedliche Eigenschaften haben gibt es eine Verrechnungsformel die Yardstick heißt. Einzelheiten interessieren uns erstmal nicht. Jeder Bootstyp hat einen eigenen Yardstick. Weil Boote so individuell wie die Eigner sind gibt es die Möglichkeit diese auch einem Boot individuell zu vergeben. Um es einfacher zu verstehen merken wir uns erstmal: Jedes Boot hat einen Yardstickwert.
- Ein Yardstickwert ist über alle Wettfahrten konstant. Es gibt aber die Ausnahme, dass wenn es ein bestimmtes Segel (Spinacker, also großes buntes Segel) auf einem Boot nicht gibt und es einen Segelkurs gibt auf dem dieses Segel normalerweise gesegelt wird (Vorwindkurs) kann der Yardstickwert für alle Boote ohne Spinacker um +1 oder +2 Punkte (je nach Wind, Kurs und Segellänge) erhöht werden
- Aufteilung in Gruppen erfolgt meist nach Länge und Geschwindigkeit (Anhaltspunkt Yardstick). Da wir wie oben genannt individuell Bootsklassen haben kann hier die Rennleitung nach Ihrer Erfahrung einteilen
- Gruppen werden in Startfelder eingeteilt. D.h. mehre Gruppen können denselben Start (~= Startzeit) haben
- Nachdem das Boot einen fest definierten Kurs gesegelt ist und eine individuelle Zeit dafür benötigt hat wird diese notiert und am Ende mit dem oben genannten Yardstickfaktor (gesegelte Zeit * 100 / Faktor) für jedes Boot berechnet. Dieses nennt man dann "berechnete Zeit"
- Nach dieser berechneten Zeit kann man dann eine Platzierung erstellen. Für alle Boote und oder in Gruppen. Im Low-Point System werden die Platzierungen in ein Punktesystem verrechnet. Einfach gesagt der 1. hat 1 Punkt, der 2. 2 Punkte... etc. Ausnahme die Disqualifizierten, Nichtgestarteten, etc. bekommen Punkte = Anzahl Teilnehmer +1
- Ein Wettfahrt beinhaltet: mehrere Boote in den Gruppen in mehreren Starts.
- Bei mehreren Wettfahrten werden die Punkte der einzelnen Wettfahrten addiert und dann hat das Boot mit den wenigsten Punkten gewonnen. Sonderregelungen/Ausnahmen interessieren uns erstmal nicht.



Bohnsopp

Zitat von: Bohnsopp am November 01, 2016, 12:05:08
folgende Felder sind über alle Wettfahrten konstant, aber je Boot individuell
idGruppe

Ein Boot wird je nach Geschwindigkeit (Yardstick) und Länge von der Rennleitung in eine Gruppe eingruppiert. Diese Gruppe ändert sich bei mehreren Wettfahrten (Wettfahrt alle Teilnehmer starten und werden im Ziel gezeitet) nicht.

Zitat von: Bohnsopp am November 01, 2016, 12:05:08
folgendes Feld ist für jedes Boot individuell.
intYardstick
allgemein haben selbe Bootstypen denselben Yardstick. Boote sind aber individuell wie die Eigner und daher haben in der Praxis viele Boote unterschiedliche Werte.
Boote ohne Spinacker können bei einer bestimmten Windrichtung (Vorwind) eine wettfahrtabhängige "Verbesserung" des Yardsticks bekommen. Diese Wettfahrtabhängige "Verbesserung"/Vergütung ist aber dann für alle Boote ohne Spinacker gleich. Meist ist dies eine Addition des Yardsticks um +1 oder +2 Punkte.


Bohnsopp

Zitat von: MzKlMu am November 01, 2016, 13:58:51
Nur mal zum Nachdenken:
Wenn Du in der Tabelle mit den Wettfahrten ein Feld für eine Wettfahrtnummer einbaust kannst Du auf immer und ewig beliebig viele Wettfahrten erfassen ohne jemals weitere Tabelle anlegen zu müssen oder Tabellen zu ändern.
Und kannst trotzdem nach jeder Wettfahrt differenzieren.

Die Idee kann ich nachvollziehen. Ich kann es nur noch nicht in die Praxis übertragen.

Klar ist eine Zuordnung über Fremdschlüssel für jedes Boot:
Wettfahrt ID | Punkte (~= Platzierung)
1                 |  2
2                 |  4
3                 | 12
4                 |  1

Für die Berechnung der Punkte (~= Platzierung) brauche ich einfach abstrahiert die Faktoren wie:
BootsID | Startzeit (ergibt sich aus der GruppenID und StartID)  |   Zielzeit   |   Yardstick (Yardstick Boot + Yardstick-Vergütung für Wettfahrt wenn kein Spinacker vorhanden ist, siehe Erklärung weiter oben)
D.h. die Rennleitung trägt im Ziel in die Tabelle die BootsID und die Zielzeit ein.

Wie bekomme ich nun diese "Zieltabelle" für XX-Wettfahrten zugeordnet?
Mir ersichtlich wäre nur folgendes:
BootsID | Startzeit_Wettfahrt1 | Zielzeit_Wettfahrt1 | YardstickWettfahrt1 | Startzeit_Wettfahrt2 | Zielzeit_Wettfahrt2 | Yardstick_Wettfahrt2 |
...
Startzeit_WettfahrtX | Zielzeit_WettfahrtX | Yardstick_WettfahrtX

damit würde ich aber wieder dynamisch in die Tabellenstruktur eingreifen.


Oder meinst Du sowas wie

BootsID | Startzeit_Wettfahrt | Zielzeit_Wettfahrt | YardstickWettfahrt | WettfahrtID

und dann darf die BootsID mehrmals vorkommen?

Gruß,
Sascha









MzKlMu

#18
Hallo,
Du hast meinen Vorschlag noch nicht verstanden. Ich gehe jetzt mal davon aus, dass Du mit der jetzigen Tabelle alle gewünschten Auswertungen machen kannst.
Wenn ja, braucht diese jetzige Wettfahrttabelle doch nur ein Feld für die Wettfahrtnummer, nur dieses eine Feld. Dann musst Du diese Tabelle doch nur auf die gewünschte Wettfahrt filtern und schon hast Du den gleichen Aufbau der Tabelle und kannst diese für Deine Berechnungen/Auswertungen verwenden. Mehr braucht es nicht, ein einziges Feld.
So, das wäre dann man Stand.
Im weiteren Verlauf kannst Du eine allgemeine Wettfahrttabelle einführen, die die Daten der reinen Wettfahrt aufnimmt. Die jetzige Wettfahrttabelle nennst Du um in "tblWettfahrtBoote" und sieht dann so aus wie in Deinem obigen Beitrag.

WettfahrtBooteID | BootsID | Startzeit_Wettfahrt | Zielzeit_Wettfahrt | YardstickWettfahrt | WettfahrtID
Unterstrichen = Primärschlüssel (Autowert).

BootsID und WettfahrtID kommen in der ganzen Tabelle mehrfach vor in Ihrer Kombination sind diese aber eindeutig. Daher ist es zweckmäßig über BootID und WettfahrtID einen eindeutigen zusammengesetzten Index zu legen.
Die Filterung auf die gewünschte WettfahrtID hat dann nur die zu dieser Wettfahrt gehörenden Boote.
Und diese eine WettfahrtBoote Tabelle kannst Du theoretisch unendlich fortführen. Es muss niemals eine weitere Tabelle dynamisch erstellt werden. Du kannst immer nur die in Frage kommende Wettfahrt auswerten indem diese Tabelle gefiltert wird. .

Für jemand der von dieser Materie absolut keine Ahnung hat ist es natürlich problematisch die Zusammenhänge zu verstehen. Trotzdem glaube ich, dass das Hinzufügen dieses einen Feldes in der Wettfahrttabelle das Problem löst.

PS:
Lasse die Präfixe sein, sonst bedauerst Du das noch.
Gruß Klaus

Bohnsopp

Hallo Klaus,
ich denke ich habe es dank Deiner genaueren Erklärung jetzt verstanden. Danke hierfür.
Werde es jetzt versuchen es soweit mal umzusetzen und mich zum Stichwort zusammengesetzter Index nochmal informieren.

Gruß,
Sascha