Hallo allemaal,
Voor mijzelf (en een beetje voor mijn vrouw) ben ik bezig met een project om een website te maken voor een soort van beroepskeuze test voor haar.
Simpel gezegd, we hebben een lijstje met 40 beroepen, die steeds als eliminatie voor elke test in 2 kolommen tegen over elkaar worden gezet, waaruit 1 optie gekozen moet worden, zoals dit:
o Beroep A x Beroep B
x Beroep C o Beroep D
o Beroep B x Beroep C
Beroep C wint (bij wijze van spreken)
Met 40 beroepen heb je dus in de eerste ronde 2 kolommen van 20 opties. Daarna krijg je dus een 10 vs 10 > 5 vs 5, en wanneer er 5 over zijn moeten deze nog gerangschikt kunnen worden in een top 5 situatie.
Mijn vrouw maakt het niet zo uit of ik dit maak of niet, ze is alleen maar een beetje aan het rondkijken of ze misschien wil herscholen naar iets anders. Maar mij lijkt het daarentegen een erg leuk projectje om deze site te maken.
De reden dat ik in de knoop kom met mijn data structuur is dat ik de volgende dingen wil realiseren.
- Natuurlijk moet er een basistabel komen waarin alle beroepen staan opgenomen.
- Er moet een tabel komen met wat gebruikersinformatie, vrienden/familie moeten de test kunnen invoeren en gelinkt kunnen worden aan die ingevoerde tests.
- Er moet een complete historie van de ingevoerde tests wordt opgeslagen, niet alleen de top 5.
Voor die laatste eis een voorbeeld schets als toevoeging:
Test (ID = datumtijd + 00volgnummer)
Ingevoerd door: Persoon A
Pagina (/ronde) 3 (Pagina's 1 en 2 zijn in feite hetzelfde, alleen veel meer opties)
o Beroep A x Beroep I
x Beroep B o Beroep J
o Beroep C x Beroep K
x Beroep D o Beroep L
o Beroep E x Beroep M
Pagina 4
1 Beroep K
2 Beroep D
3 Beroep M
4 Beroep B
5 Beroep I
Het gaat me erom dat ik elke stap van de invoer kan terugkijken. Bijvoorbeeld, op pagina 1 had jantje optie A en optie M tegenover elkaar staan. Ik vind het leuk om terug te zien dat hij daar voor optie A heeft gekozen over optie M. Op pagina 2 kan bijvoorbeeld heel goed optie A vervolgens ge-elimineerd zijn tegenover optie N, maar het is ook interessant om bij te houden dat optie A het dus beter heeft gedaan ten opzichte van M. Dus zelfs wanneer deze optie A niet in de top 5 van deze test voorkomt. Op deze manier kan je dus een logica creëren om in feite een rapport te hebben met een top 40 gebaseerd op welke het meest in de top 5 zijn terecht gekomen, maar ook welke vaker gekozen zijn over andere opties in eerdere rondes. Als optie A bijvoorbeeld voortdurend in de laatste ronde sneuvelt, dan kan je stellen dat dat een interessantere optie is dan een optie die nooit gekozen wordt op welke test dan ook.
Ik wil dus een tabel die dus voor elke ingevoerde test een:
- ID genereert (op basis van datum/tijd)
- User ID van invoerder
- Bijhoudt per ronde (mogelijk verschillende tabellen per ronde?) welke opties tegen over elkaar staan. Ik wil dit namelijk randomizen zodat elke keer dat je de test invoert, de eliminatie net wat anders kan verlopen
- Bijhoudt welke opties per ronde voor wordt gekozen
- Bijhoudt de volgorde van de laatste 5
Zelf zat ik te denken aan de volgende tabel structuur, maar mogelijk is dit helemaal niet logisch of efficiënt. Query technisch is het in ieder geval alles behalve efficiënt.
Tabel test resultaten
Veld ID
Veld User_ID
Veld Round1_LeftColumnOptions VARCHAR
Veld Round1_RightColumnOptions VARCHAR
Veld Round1_SelectedOptions VARCHAR
Veld Round2_LeftColumnOptions VARCHAR
Veld Round2_RightColumnOptions VARCHAR
Veld Round2_SelectedOptions VARCHAR
Veld Round3_LeftColumnOptions VARCHAR
Veld Round3_RightColumnOptions VARCHAR
Veld Round3_SelectedOptions VARCHAR
Veld Round4_Top5Result VARCHAR
In elk van deze velden wordt dan een komma gescheiden string opgeslagen die ik 1 op 1 kan ophalen en in een arraylist kan gooien om daar te verwerken.
Voor opslag en voor individueel weer gemaakte testen ophalen en weergeven is dit meer dan voldoende, in feite maak ik op deze alleen maar een letterlijke screenshot van wat de gebruiker toentertijd heeft ingevoerd en geeft die screenshot weer opnieuw weer.
Voor rapportage doeleinden is dit echter verschrikkelijk. Dan moet ik voor elke test ID een arraylist maken en winnaars met elkaar gaan zitten vergelijken.
Maar hoe ik de datastructuur moet maken dat ik ook dit efficiënt kan doen, weet ik dus niet, en is dus de reden van mijn post.
Ik heb mij nu een aantal uren d.m.v. o.a. google blind lopen staren op verschillende bizarre tabel constructies, en ik kom er nu helaas echt niet meer uit.
Zou iemand hier mij kunnen helpen met hoe ik mijn tabel kan opbouwen voor het beschreven doeleinde?
Bedankt voor de hulp!
Voor mijzelf (en een beetje voor mijn vrouw) ben ik bezig met een project om een website te maken voor een soort van beroepskeuze test voor haar.
Simpel gezegd, we hebben een lijstje met 40 beroepen, die steeds als eliminatie voor elke test in 2 kolommen tegen over elkaar worden gezet, waaruit 1 optie gekozen moet worden, zoals dit:
o Beroep A x Beroep B
x Beroep C o Beroep D
o Beroep B x Beroep C
Beroep C wint (bij wijze van spreken)
Met 40 beroepen heb je dus in de eerste ronde 2 kolommen van 20 opties. Daarna krijg je dus een 10 vs 10 > 5 vs 5, en wanneer er 5 over zijn moeten deze nog gerangschikt kunnen worden in een top 5 situatie.
Mijn vrouw maakt het niet zo uit of ik dit maak of niet, ze is alleen maar een beetje aan het rondkijken of ze misschien wil herscholen naar iets anders. Maar mij lijkt het daarentegen een erg leuk projectje om deze site te maken.
De reden dat ik in de knoop kom met mijn data structuur is dat ik de volgende dingen wil realiseren.
- Natuurlijk moet er een basistabel komen waarin alle beroepen staan opgenomen.
- Er moet een tabel komen met wat gebruikersinformatie, vrienden/familie moeten de test kunnen invoeren en gelinkt kunnen worden aan die ingevoerde tests.
- Er moet een complete historie van de ingevoerde tests wordt opgeslagen, niet alleen de top 5.
Voor die laatste eis een voorbeeld schets als toevoeging:
Test (ID = datumtijd + 00volgnummer)
Ingevoerd door: Persoon A
Pagina (/ronde) 3 (Pagina's 1 en 2 zijn in feite hetzelfde, alleen veel meer opties)
o Beroep A x Beroep I
x Beroep B o Beroep J
o Beroep C x Beroep K
x Beroep D o Beroep L
o Beroep E x Beroep M
Pagina 4
1 Beroep K
2 Beroep D
3 Beroep M
4 Beroep B
5 Beroep I
Het gaat me erom dat ik elke stap van de invoer kan terugkijken. Bijvoorbeeld, op pagina 1 had jantje optie A en optie M tegenover elkaar staan. Ik vind het leuk om terug te zien dat hij daar voor optie A heeft gekozen over optie M. Op pagina 2 kan bijvoorbeeld heel goed optie A vervolgens ge-elimineerd zijn tegenover optie N, maar het is ook interessant om bij te houden dat optie A het dus beter heeft gedaan ten opzichte van M. Dus zelfs wanneer deze optie A niet in de top 5 van deze test voorkomt. Op deze manier kan je dus een logica creëren om in feite een rapport te hebben met een top 40 gebaseerd op welke het meest in de top 5 zijn terecht gekomen, maar ook welke vaker gekozen zijn over andere opties in eerdere rondes. Als optie A bijvoorbeeld voortdurend in de laatste ronde sneuvelt, dan kan je stellen dat dat een interessantere optie is dan een optie die nooit gekozen wordt op welke test dan ook.
Ik wil dus een tabel die dus voor elke ingevoerde test een:
- ID genereert (op basis van datum/tijd)
- User ID van invoerder
- Bijhoudt per ronde (mogelijk verschillende tabellen per ronde?) welke opties tegen over elkaar staan. Ik wil dit namelijk randomizen zodat elke keer dat je de test invoert, de eliminatie net wat anders kan verlopen
- Bijhoudt welke opties per ronde voor wordt gekozen
- Bijhoudt de volgorde van de laatste 5
Zelf zat ik te denken aan de volgende tabel structuur, maar mogelijk is dit helemaal niet logisch of efficiënt. Query technisch is het in ieder geval alles behalve efficiënt.
Tabel test resultaten
Veld ID
Veld User_ID
Veld Round1_LeftColumnOptions VARCHAR
Veld Round1_RightColumnOptions VARCHAR
Veld Round1_SelectedOptions VARCHAR
Veld Round2_LeftColumnOptions VARCHAR
Veld Round2_RightColumnOptions VARCHAR
Veld Round2_SelectedOptions VARCHAR
Veld Round3_LeftColumnOptions VARCHAR
Veld Round3_RightColumnOptions VARCHAR
Veld Round3_SelectedOptions VARCHAR
Veld Round4_Top5Result VARCHAR
In elk van deze velden wordt dan een komma gescheiden string opgeslagen die ik 1 op 1 kan ophalen en in een arraylist kan gooien om daar te verwerken.
Voor opslag en voor individueel weer gemaakte testen ophalen en weergeven is dit meer dan voldoende, in feite maak ik op deze alleen maar een letterlijke screenshot van wat de gebruiker toentertijd heeft ingevoerd en geeft die screenshot weer opnieuw weer.
Voor rapportage doeleinden is dit echter verschrikkelijk. Dan moet ik voor elke test ID een arraylist maken en winnaars met elkaar gaan zitten vergelijken.
Maar hoe ik de datastructuur moet maken dat ik ook dit efficiënt kan doen, weet ik dus niet, en is dus de reden van mijn post.
Ik heb mij nu een aantal uren d.m.v. o.a. google blind lopen staren op verschillende bizarre tabel constructies, en ik kom er nu helaas echt niet meer uit.
Zou iemand hier mij kunnen helpen met hoe ik mijn tabel kan opbouwen voor het beschreven doeleinde?
Bedankt voor de hulp!