¿Cómo debo estructurar mis tablas? [cerrado]
Frecuentes
Visto 67 veces
0
I am creating a little online quiz/game. I have a users
-table containing a unique auto-increment id
, username
campo, un password
campo y una ip
field (from where it was created).
That handles the log in and stuff like that.
Then I need to track the users process. The user has to complete several tasks, or levels. However you wish to view it.
The requirements are the following, for each task:
- Keep track of how many attempts the user has done for a given task
- Keep track of his last attempt
- Keep track of where he failed
- Keep track of his shortest successful attempt
- Keep track of his most recent successful attempt.
What I am asking is basically how I should structure my tables for this to work as smooth as possible and require as little annoying SQL-queries and code as possible.
Should I have one table for each task with each row bound to a username and fields corresponding the list above? Or one large table with a row bound to the username that indicated which task and all the fields corresponding the list above?
I am not sure, which is why I am asking.
Worth mentioning: Anything I currently have is not set in stone, so I can change anything you want.
Any help and/or suggestions are much appreciated.
Gracias de antemano.
EDIT: I will also have one table with each task: tasks(id, name, description, finish_message)
And with that I need to have a new table structure for the tasks similar to the one I described above for the users and tasks, but for the tasks and tests.
1 Respuestas
1
I didn't get your question completely, but I think following structure might help you:
1. users(userid, username, password, ipaddress)
2. tasks(taskid, task_description,...)--any other details you want
3. task_attempted(userid, taskid, last_successful_attempt, shortest_successful_attempt, last_attempt, last_failed_testid);
4. tests(testid, taskid, ...)--other details
Please clarify your third requirement:
Keep track of where he failed
If I am not getting you wrong user might not be able to proceed to give next test of a task until she finishes current test successfully, so you can add one more field for test_id for keeping track of failed test_id in particular task.
Respondido 25 ago 12, 10:08
Thank you. This solution is what I was thinking too when I said "have everything in one table". Keeping track of where the user failed will be an indicator for me to know which test for the specific task the user failed at. I have edited the question too, which will hopefully give you a clearer picture of what I am doing. - Firas Dib
thanks lindrian for more details, i hope this will help you - codeomnitrix
Thanks, this sounds great. Basically I will have two large tables and two smaller. The two large: one for all the tests for the tasks and one for all the user attempts for the tasks. The small: one for all the tasks and one for the users. Have I understood you correctly? - Firas Dib
yes, you are right. Please accept the answer if it was helpful - codeomnitrix
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas mysql sql database-design or haz tu propia pregunta.
Show us some work you have already done - Venkata Krishna
What do you mean? I have not started creating the table structure because I'm not sure of how I want to do it. I've output my thoughs above in the question. - Firas Dib
I understand you have made a detailed writing of what you want.. but you have to do some more work on structuring tables & then ask here saying "Is this structure looking okay?" rather than "How should I structure?". - Venkata Krishna
Ah alright, I understand. I have created some basic structures, which I described in the text (did not mentioned I've tried them though). Initially I tried having a table for each task with all the information needed. But then I would have to look through each table to find out what the user has accomplished. Having them all in one table would solve that but I'm not sure that's an optimal solution, and that's when I decided to ask here. - Firas Dib