Hallo Tweakers, 
Ik ben momenteel aan het werken aan een enquête-systeem. De programmatie in PHP is helemaal Objectgeoriënteerd en werkt (tot nu toe iig) zoals ik het wil.
Waar nou een beetje mee zit, is hoe ik alles moet bijhouden in de database...
Ik heb nu de volgende tabellen (telkens met een voorbeeld, de primary key van elke tabel staat in rood)
Enquetes: hier worden de verschillende enquêtes in opgeslagen.
Vragen: Hier worden de verschillende vragen uit opgehaald
Nota: De string in mogelijkeAntwoorden dient om meerdere antwoorden te definieren bij een meerkeuzevraag.
Users: Alle users die de enquêtes kunnen bekijken en invullen.
Tot hier toe werkt alles nogal naar behoren. Ik kan met PHP de enquête-objecten (en hun bijhorende vraag-objecten) uit de database halen.
Het probleem stelt zich voor als een user een enquête ingevuld heeft.
Waar of hoe slaag ik zijn antwoorden op? Ik zelf dacht aan het volgende:
Antwoorden: Alle antwoorden van alle users
Nota: Hier dienen de kolommen enqid, vraagid & userid tesamen als primary key.
Als we er vanuitgaan dat elke user maar 1 keer op elke vraag mag antwoorden, dan zou in principe zou de tabel voor de antwoorden zoals hierboven beschreven werken, toch?
Maar als er nu, na een tijdje, 30 users en 5 enquêtes met elk 20 vragen zijn.
Dan wordt de antwoordentabel wel ongelooflijk groot, wat het doorzoeken hiervan niet vergemakelijkt wss. (3000 entries, 1 tabel)
Is er misschien een betere manier om alle antwoorden op te slaan? Misschien een aparte antwoordentabel per enquête(600 entries, 5 tabellen) of per user(100 entries, 30 tabellen)? Of heeft iemand nog een ander (misschien beter) idee?
Ik ben momenteel aan het werken aan een enquête-systeem. De programmatie in PHP is helemaal Objectgeoriënteerd en werkt (tot nu toe iig) zoals ik het wil.
Waar nou een beetje mee zit, is hoe ik alles moet bijhouden in de database...
Ik heb nu de volgende tabellen (telkens met een voorbeeld, de primary key van elke tabel staat in rood)
Enquetes: hier worden de verschillende enquêtes in opgeslagen.
| id | naam | aangemaaktDoor | timeStamp |
| enq01 | Mijn Enquete 1 | Elvis | *timestamp* |
Vragen: Hier worden de verschillende vragen uit opgehaald
| id | enqid | vraagText | mogelijkeAntwoorden |
| vraag01 | enq01 | Is dit een vraag? | Ja,Nee,Misschien,Weet Niet |
Users: Alle users die de enquêtes kunnen bekijken en invullen.
| id | naam | pass |
| user01 | Proleet | *encrypted pass* |
Tot hier toe werkt alles nogal naar behoren. Ik kan met PHP de enquête-objecten (en hun bijhorende vraag-objecten) uit de database halen.
Het probleem stelt zich voor als een user een enquête ingevuld heeft.
Waar of hoe slaag ik zijn antwoorden op? Ik zelf dacht aan het volgende:
Antwoorden: Alle antwoorden van alle users
| enqid | vraagid | userid | antwoord |
| enq01 | vraag01 | user01 | Ja |
Als we er vanuitgaan dat elke user maar 1 keer op elke vraag mag antwoorden, dan zou in principe zou de tabel voor de antwoorden zoals hierboven beschreven werken, toch?
Maar als er nu, na een tijdje, 30 users en 5 enquêtes met elk 20 vragen zijn.
Dan wordt de antwoordentabel wel ongelooflijk groot, wat het doorzoeken hiervan niet vergemakelijkt wss. (3000 entries, 1 tabel)
Is er misschien een betere manier om alle antwoorden op te slaan? Misschien een aparte antwoordentabel per enquête(600 entries, 5 tabellen) of per user(100 entries, 30 tabellen)? Of heeft iemand nog een ander (misschien beter) idee?