mysql - 测验数据库设计

标签 mysql sql database database-design database-schema

您好,我正在开发一个测验系统,我被困在最后一张表 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_idquiz_idscore。参见 this对于最佳模式,多对多表。

user_id = 123 参加的测验数:

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

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

关于mysql - 测验数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49137832/

相关文章:

mysql - 错误 1045 (28000) : Access denied for user 'root' @'localhost' (using password: YES)

php - 用户注册时上传头像

MySQL显示多列的排名

mysql - 如何选择列中具有最大值的行?

sql - 如何根据表单值连接到指定的数据库表

mysql - 显示从属主机;有一个空的主机输出。如何获取从属主机?

mysql - 如何在多列上创建 FULLTEXT 索引?

mysql - 如何有效地查询两列上的多对多关系

MySQL Left Join 查询挂起 4 小时

mysql - 我将如何使用 SQL 完成此操作?