Je hebt zelf al je antwoord gegeven..
je zou ook nog dmv ip adres kunnen kijken of er al eerder een quiz gemaakt is vanaf die computer (let op, dit is niet identiek) en wanneer (dus met datum erbij enz.)
persoonlijk zou ik id gebruiken, ipv quiz_id, en deze op numeriek zetten. (tenzij er verschillende quizes zijn, dan de volgende opbouw: id, quiz_id, uitslag)
Het probleem is dat ik via de eerste manier niet goed weet hoe ik die getallen moet bewerken. En dat het een heel groot aantal kan worden. Stel iemand doet een quiz en heeft het resultaat 70%
Dan zou ik moeten alle rijen opvragen en bewerken of ze groter dan 70% zijn of kleiner.
Dan heb ik enkel nog maar het resultaat van Jouw score was 70%, 600 mensen scoorden hoger, 1500 mensen lager bijvoorbeeld.
Mocht ik dan een diagram willen maken van 0-10% 11-20% etc dan zou ik 1 niet goed weten hoe er aan te beginnen, 2 het een zware berekening kan worden.
Nu zou ik kunnen besluiten om beide manieren toe te passen natuurlijk...
Zou je dus voorstellen om gewoon elk percentage op te slaan en het te laten berekenen? (dan is mijn volgend probleem hoe maar daar kan ik zelf misschien eerst nog eens over nadenken... :s)
Begin te denken dat ik ze beide zou kunnen gebruiken...
Ik begin elke tabel met id
als het een koppeltabel is begin ik ook met een id
bijv (klant: id, naam | producten: id, naam | verkoop: id, kid, pid)
dit is nu maar een idioot voorstel
Maar ik wil gewoon zeggen dat ik altijd gewoon id eerst gebruik als ik een query maak met meerdere tabellen word het vanzelf duidelijk.
ja dat snap ik wel, ik had het ook te simpel voorgesteld
tabel zou er eerder zo uitzien (vanuitgaande dat ik elk resultaat apart opsla)
id | quiz_id | uitslag | ip | timestamp
Wat ik wil bereiken
- uitslagen in ranges [0-10] [11-20] ... [91-100]
- vanuit een resultaat uitslag bepalen hoeveel er hoger of lager hebben gescoord
Nu weet ik niet of het verstandig is om elke waarde apart op te slaan en daar dan die ranges van te moeten bepalen (het kunnen echt wel duizenden records worden...)
Bijgevolg weet ik niet goed hoe ik mijn tabellen dan wel best opbouw
ik zou kunnen doen
id | quiz_id | range0_10 | range1_11| ... | ip | timestamp
Voordeel : -gemakkelijk uit de database te lezen
Nadeel: -onmogelijk te bepalen wie er hoger of lager heeft dan de gegeven score
-De statistieken zijn oncompleet
Ik vermoed nu dat ik beide best zou gebruiken... om andere waarden op te vragen...
Maar een database later aanpassen is erg lastig, daarom dat ik hoopte dat iemand met meer ervaring mij goede raad zou kunnen geven ;)
Inventariseren. Dat is het sleutelwoord in zo'n probleem.
Moeten deelnemers aan een quiz zich bijvoorbeeld eerst aanmelden? In zo'n geval heb je in ieder geval een gebruikers tabel nodig. Of wil je alleen anonieme gegevens opslaan?
Ben je van plan 1 quiz te houden of ga je er meerdere aanbieden? Hoe ga je de vragen en antwoorden op die quiz opslaan? Hoe ga je de resultaten opslaan (wat dus eigenlijk je vraag is)?
Maar goed, als ik zo al bezig ben lijkt het erop dat je nog wel wat werk hebt aan het ontwerpen van je datamodel.
Sowieso ga je niet meerdere gegevens in 1 record opslaan. Daar gebruik je te allen tijde aparte records voor. Zodra het erop neer komt dat je dat wel gaat doen, zul je nog eens terug moeten naar de tekentafel, want dan klopt je datamodel niet.
Enkel anonieme gegevens, er is meer dan één quiz (daarom de link quiz_id)
Antwoorden en vragen zijn al met elkaar gelinkt...
De enige link die er met de tabel quiz_statistieken moet zijn is de quiz_id
Het ontwerpen van mijn datamodel is dus reeds klaar, het gaat er mij gewoon om hoe ik de tabel quiz_statistieken best zou inrichten zodat ik de waardes er kan uitlezen zoals ik het wil.
Namelijk met ranges, en absolute waarden.
Zoals jij het weergeeft moet ik wel met absolute waarden werken want meerdere gegevens in 1 record opslaan is not done?
Dus jij zou alle percentages apart opslaan en van daaruit de ranges opbouwen?