您好,我正在开发一个测验系统,我被困在最后一张表 user_quiz
上,不知道如何将它链接到其他表?我希望它跟踪用户在测验中获得的分数以及用户参加的测验总数。
userid 是主键,但我坚持外键应该是什么,这样我就可以将表链接在一起。我也一直在尝试规范化我的数据库,所以如果有人可以帮助我确定外键应该是什么,并且如果数据库未规范化,可以帮助我规范化它。谢谢:)
用户
+-----------+-------------+-----------+-------------+
|userid | email |username |password |
+-----------+-------------+-----------+-------------+
| 1 | | | |
| 2 | | | |
+-----------+-------------+-----------+-------------+
Module
+-----------+-------------+
| module_id | module_name |
+-----------+-------------+
| 1 | Forces |
| 2 | Magnetism |
| 3 | Electricity |
| 4 | Gravitation |
+-----------+-------------+
Questions
+------------+-----------+-----------------+
| question_id| module_id | question |
+------------+-----------+-----------------+
| 1 | 1 | Define a Newton |
| 2 | 1 | Define Work Done|
| 3 | 2 | Define Magnetism|
| 4 | 2 | Define a Tesla |
| 5 | 3 | Define Current |
+------------+-----------+-----------------+
Choices
+----------+-------------+-------------------+----------+
| choice_id| question_id | choices |is_correct|
+----------+-------------+-------------------+----------+
| 1 | 1 | Answer 1 | 0 |
| 2 | 1 | Answer 2 | 0 |
| 3 | 1 | Answer 3 | 0 |
| 4 | 1 | Answer 4 | 1 |
| 5 | 2 | Answer 1 | 0 |
| 6 | 2 | Answer 2 | 0 |
| 7 | 2 | Answer 3 | 0 |
| 8 | 2 | Answer 4 | 1 |
| 9 | 3 | Answer 1 | 0 |
| 10 | 3 | Answer 2 | 0 |
| 11 | 3 | Answer 3 | 0 |
| 12 | 3 | Answer 4 | 1 |
+----------+-------------+-------------------+----------+
user_quiz
+-----------+-------------+---------------------+------------+
|userid | score | total_quizzes_taken | ? |
+-----------+-------------+---------------------|------------+
| 1 | | | |
| 2 | | | |
+-----------+-------------+---------------------+------------+
最佳答案
- 链接两个表不需要
FOREIGN KEY
。 - 测验的总数是可计算的,不要存储它。
UserQuiz
是一个多对多映射表?然后它有user_id
、quiz_id
和score
。参见 this对于最佳模式,多对多表。
user_id = 123 参加的测验数:
SELECT COUNT(*)
FROM UserQuiz
WHERE user_id = 123;
但是有一个潜在的问题。我假设条目是在回答问题和评分时添加的? COUNT
可能会给您开始而不是完成的测验数。如果这不令人满意,您需要解释您如何知道测验已完成。
关于mysql - 测验数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49137832/