测验数据库设计

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_idquiz_idscore。请参阅 this 以获得最佳架构 a many:many table.

user_id = 123 人参加的测验数:

SELECT COUNT(*)
    FROM UserQuiz
    WHERE user_id = 123;

但是有一个潜在的问题。我假设条目是在回答问题和评分时添加的? COUNT 可能会给你 开始 的测验数,而不是 完成的 。如果这不令人满意,您需要解释您如何知道测验 已完成