We’re building an eLearning MultipleChoice tool where thousands of users will complete our tests. We already have thousands of subscribers to our other seminars, etc, so it is very likely that thousands will also complete out MC-tests.
Now, we need to keep track of every question each user has answered, how long it took him, if it was correct (after how many tries) and if not, which wrong answer he gave, etc. Really a lot of data.
Now, we will have thousands of questions and thousands of users. Since every question will have at least 4 answers and we also want to track the wrong answers given, my question is: In this particular case, would it make sense to have a table per user?
I know the table-per-user question has been asked here already (here, for example), but i feel like this is really a different case.
So: One table with millions of rows or thousands of tables with thousands of rows?
It never makes sense to have a database object per user. If you design your table and database structure appropriately, a table with a million rows is easily manageable.
A table-per-user will be very unmanageable, and that is not how relational databases are typically designed.
Create one table for the users and adhere to RDBMS best practices. Implement query tuning, and ensure there are appropriate indexes on the table, as well as updated statistics.