测验数据库设计
Quiz database design
你好,我正在开发一个测验系统,我被困在最后 table user_quiz
如何 link 它给其他 table ?我希望它跟踪用户在测验中获得的分数以及用户参加的测验总数。
userid 是主键,但我坚持外键应该是什么,这样我就可以 link table 在一起。我也一直在尝试规范化我的数据库,所以如果有人可以帮助我确定外键应该是什么,并且如果数据库未规范化,可以帮助我规范化它。谢谢:)
用户
+-----------+-------------+-----------+-------------+
|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 | | | |
+-----------+-------------+---------------------+------------+
- 链接两个 table 不需要
FOREIGN KEY
。
- 小题总数为computable,请勿存储。
UserQuiz
是一个 many:many 映射 table?然后它有 user_id
、quiz_id
和 score
。请参阅 this 以获得最佳架构 a many:many table.
user_id = 123 人参加的测验数:
SELECT COUNT(*)
FROM UserQuiz
WHERE user_id = 123;
但是有一个潜在的问题。我假设条目是在回答问题和评分时添加的? COUNT
可能会给你 开始 的测验数,而不是 完成的 。如果这不令人满意,您需要解释您如何知道测验 已完成。
你好,我正在开发一个测验系统,我被困在最后 table user_quiz
如何 link 它给其他 table ?我希望它跟踪用户在测验中获得的分数以及用户参加的测验总数。
userid 是主键,但我坚持外键应该是什么,这样我就可以 link table 在一起。我也一直在尝试规范化我的数据库,所以如果有人可以帮助我确定外键应该是什么,并且如果数据库未规范化,可以帮助我规范化它。谢谢:)
用户
+-----------+-------------+-----------+-------------+
|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 | | | |
+-----------+-------------+---------------------+------------+
- 链接两个 table 不需要
FOREIGN KEY
。 - 小题总数为computable,请勿存储。
UserQuiz
是一个 many:many 映射 table?然后它有user_id
、quiz_id
和score
。请参阅 this 以获得最佳架构 a many:many table.
user_id = 123 人参加的测验数:
SELECT COUNT(*)
FROM UserQuiz
WHERE user_id = 123;
但是有一个潜在的问题。我假设条目是在回答问题和评分时添加的? COUNT
可能会给你 开始 的测验数,而不是 完成的 。如果这不令人满意,您需要解释您如何知道测验 已完成。