We komen langzaam in de buurt, maar ik snap een aantal dingen nog steeds niet. Om te beginnen: wat wil je nu eigenlijk vastleggen? Ik snap dat je per jaar één toernooi hebt. Elk toernooi bestaat voor elke speler uit 12 westrijden; daarbij zijn de spelers ingedeeld in poules van of 4 personen. Afhankelijk van het aantal personen in een poule speelt een speler 4x of 6x tegen dezelfde speler. Tot zover is het duidelijk genoeg. Maar nu sta je eigenlijk al voor de eerste keus: wil je de resultaten van alle toernooien door de jaren heen opslaan, of wil je alleen de resultaten zien van het lopende toernooi? Zoals je het in eerste instantie had opgezet, kun je alleen het laatste toernooi opslaan. Je kunt dus niet terugzien wie het toernooi in 2005 heeft gewonnen bijvoorbeeld.
En hoe zit dat met nieuwe spelers? je zegt eerder dat die in een andere indeling spelen?
de volgorde van spelen is voor een poule met een nieuwe speler anders ingedeeld
Dat zou dus in moeten houden dat een nieuwe speler niet in een poule met 3 spelers kan, want dan heb je maar twee tegenstanders: stel dat je ze eerst wilt laten wennen door ze met een 'makkelijke' wedstrijd te laten beginnen. Dan is na 1 van de 12 wedstrijden het voordeel dat je als nieuwe speler hebt al weg; de tweede wedstrijd moeten ze al vol aan de bak tegen een betere speler... En dat blijft zo de overige 10 wedstrijden! Persoonlijk zou ik dat onderscheid dus niet eens maken... Iedereen die meedoet, is gelijk! Hooguit zou je een aparte poule kunnen maken voor de nieuwe spelers, maar dat zegt verder natuurlijk ook niks over het niveau waarop ze spelen. Kortom: ik zou het scheiden helemaal overboord gooien, en mij puur concentreren op het maken van een goede pouleindeling (met 3 of 4 spelers).
Hoe zou ik het doen? Als volgt:
In een tabel Toernooi leg je dus de hoofgegevens vast van elk toernooi, zoals het jaar, en een ToernooiID. Je kunt aan die tabel ook nog extra tabellen toevoegen, zoals de prijzen bijvoorbeeld. Wie de hoofdscheidsrechter is, etc. Kortom: alle relevante gegeven die sec op het toernooi slaan, en die elk jaar dus kunnen veranderen, zet je in die tabel.
Op basis van de tabel Toernooi ga je dan de tabel Poules vullen. In die tabel leg je vast welke speler in welke poule zit. Je krijgt dus in ieder geval de velden ToernooiID en PouleNummer en SpelerID; een speler zit niet elk toernooi in dezelfde poule neem ik aan, dus die combinatie is elke keer anders. De combinatie ToernooiID, PouleID en SpelerID is uniek, dus dat zou een potentiële sleutel kunnen zijn. Immers: een speler kan per toernooi maar één keer in een poule worden ingedeeld. Daarbij laat je ook nog de mogelijkheid open dat een speler in twee poules kan zitten, zodat hij een dubbel toernooi kan spelen. Mocht je dat willen tenminste...
Elk record in Poules krijgt ook een uniek nummer, want op basis van dat nummer ga je de wedstrijden vastleggen.
Dat vastleggen van de wedstrijden zou ik via een VBA procedure doen. Normaal gesproken begin je een tabel met een leeg record, en voeg je steeds nieuwe records toe als daar noodzaak toe is. Bijvoorbeeld de tabel Toernooi; als je die tabel hebt aangemaakt, ga je niet gelijk 200 records aanmaken onder het motto: dan heb ik alvast de toernooien klaar! Elk jaar maak je een nieuw record voor het volgende toernooi. Voor de poules geldt hetzelfde: de pouleindeling zal je met de hand doen, omdat je zelf wilt bepalen welke speler in welke poule komt. Daarbij kun je op een formulier heel goed functionaliteit gebruiken waarmee je spelers kunt verplaatsen naar een (andere) poule; maar het principe is waarschijnlijk toch dat je de tabel dynamisch gaat vullen.
Voor de wedstrijden ligt dat dus een beetje anders: zodra de pouleindeling klaar is, weet je welke wedstrijden er gespeeld gaan worden: elke speler in in poule speelt immers 12 wedstrijden. Dus de tabel Wedstrijden ga je op zijn minst vullen met: [PouleID], [Speler1_ID], [Speler2_ID], [Ronde]. Daarbij is de hoogte van [Ronde] afhankelijk van het aantal spelers in een poule: 4 of 6. In die tabel sla je ook de resultaten op: ik zou zeggen: [Caramboles_Speler1] en [Caramboles_Speler2], [HoogsteSerie_Speler1] en [HoogsteSerie_Speler2] en [Aantal Beurten] (je hebt nu BeurtenA en BeurtenB, maar het zal toch niet zo zijn dat spelerA in één wedstrijd 21 beurten krijgt, en spelerB 33?). Volgens mij weet je dan alles. Al heb jij de volgende velden in je tabel staan: CarambolesA, MoyenneA, PuntenA, BeurtenA, HSA en GemaaktecarA. En dat dan herhaald voor spelerB.
Als leek vraag ik mij af wat het verschil is tussen CarambolesA en GemaaktecarA. En waarom je het Moyenne ook opslaat. Dat is, neem ik aan, toch een berekening op basis van Beurten en Caramboles? Of heb ik al die jaren niet op zitten letten bij Studio Sport? (niet dat ze veel biljarten uitzenden

)
Maar om bij de les te blijven: zodra de pouleindeling bekend is, kun je dus de tabel wedstrijden vullen met de basisgegevens: elke speler speelt in elke ronde één keer tegen elkaar, dus elke ronde bestaat uit 2 of 3 wedstrijden. Die wedstrijden worden op een specifieke datum/tijd gespeeld, dus dat veld heb je uiteraard ook in de tabel Wedstrijden opgenomen. Wat je dus doet met de procedure, is de tabel Wedstrijden vullen met alle van te voren bekende gegevens: het veld Ronde, Speler_1, en Speler_2. In een formulier kun je dan de datums invullen van de wedstrijd, en de resultaten.
De uiteindelijke ranglijsten, standen, moyennes van spelers etc zijn allemaal berekeningen, en daarvoor gebruik je dus queries. En de resultaten daarvan kun je uiteraard ook weer in een formulier laten zien. Of desnoods met rapporten, waarin je mooie groeperingen (bijvoorbeeld de stand per poule) kunt laten zien.
Is dit wat je zoekt, of zit ik er nu helemaal naast?