当前位置: 首页 > 面试题库 >

数据库规范化:如何将数据制成表格?

梁嘉祥
2023-03-14
问题内容

我的问题是关于数据标准化。

信息

我正在尝试将数据库中的测试结果制成表格。我要记录的信息是test_instance,user_id,test_id,完成(日期/时间),(测试时间),分数,不正确的问题和已复习的问题。

在大多数情况下,我认为我是根据表1来组织信息的,但是我想尽办法找出记录错误或已审查问题的最佳方法有些不为所动。请注意,我 不要
希望把所有不正确的问题集中在一个条目按表2。

我想为每个标记错误的问题(或复习的问题)单独输入一个条目。

注意:已 复习的问题是一次或两次被错误标记的问题,因此需要再次进行测试。

表格1

-------------------------------------------------------------   
|  instance   | user_id | test_id |completed |duration|score|   
-------------------------------------------------------------   
|      1      |   23    |   33    | 2JAN2012 |  20m   |  75 |   
|      2      |   11    |   12    | 10DEC2011|  35m   | 100 |   
|      3      |   1     |    3    | 3JUL2008 |  1m    |   0 |   
|      4      |   165   |   213   | 4SEP2010 |  10m   |  50 |   
-------------------------------------------------------------

表2

------------------------
|  instance   ||wrong Q|
------------------------
|      1      || 3,5,7 |
------------------------

最终,我想知道随着时间的流逝,用户有多少次将某个特定问题弄错了。另外,我需要跟踪错误测试来自哪个测试。对于已审查的问题也是如此。顺便说一句,有可能在同一情况下对问题进行复查和发现错误。

我想出了两种不同的方式来表示数据,但我都不喜欢它们中的任何一种。

------------------------------------------------- 
|  instance   | Q number |  Wrong  |  Reviewed  |
-------------------------------------------------

或者

---------------------------------------------------
| user_id | test_id | Q number | Wrong | Reviewed |
---------------------------------------------------

注意:错误/已审核类别正在计算Q号落入该类别的次数。

我的问题汇总

如何有效地在表格中表示错误/复习的问题?表1是否设置有效?

编辑:
已被错误回答的问题可用于生成新的测试。测试只会使用不正确的问题。如果进行了生成的测试,则测试的问题将被标记为已复习。分数不会被更新,因为它将是一个新测试并且将生成一个新的test_id。

注意 -可以重新参加旧的考试,但分数不会更新。将为进行的每个测试创建一个新实例。

关于生成的测试,我想这意味着我将需要再包含一个表来跟踪最初来自哪个测验的问题。抱歉-我一直都没有想到。

谢谢

我很难选择答案,因为每个人都给了我非常有用的信息。我的最终设计将考虑您所说的一切。再次感谢。


问题答案:

谈到规范化,只是为了确保您可以从数据库中检索所有类型的计算数据,我将提出一个更复杂的模型,该模型最终将变得更易于管理。

您需要以下表格

test_table
    PK: id_test
    testDescription

question_table
    PK: id_question
    FK: id_test
    questionDescription

instance_table *please note that duration and scores will be calculated later on
    PK: id_instance
    FK: id_user
    FK: id_test
    startingTime
    endingTime

question_instance_table
    PK: id_question_instance
    FK: id_instance
    FK: id_question
    questionResult (Boolean)
    (please note here that the PK could be id_instance + id_question ...)

回到您的需求,我们将提供以下服务:

  • 持续时间是通过instance_table的startingDate和EndingDate计算的
  • 分数的计算结果是来自questionResult字段的True值的总和
  • 您可以随时间跟踪和比较一位用户在同一问题上的答案
  • 因此,您可以将已审核的问题定义为针对特定用户具有至少一个错误值的问题
  • 如果您的数据库支持布尔字段的空值,则可以跟踪未回答的问题(questionResult = Null)。否则,建议您使用或构建三个状态字段(允许为Null的整数,例如,加上0和1值),以跟踪未回答的问题(null),错误的答案(0)和正确的答案(1)。
  • 可以通过SQL聚合轻松计算得分为100 *(好的答案数量)/(测试中的问题数量)。
  • 您甚至可以将部分分数计算为好答案的数量/测试中回答的问题的数量。
  • 该模型接受任意数量的测试,每项测试任意数量的问题,任意数量的实例,任意数量的用户…
  • 当然,可以通过向表中添加缺少的属性(例如testNumber,questionNumber字段)来进一步改进它
  • 等等…


 类似资料:
  • 问题内容: 我想知道是否有人对如何规范化数据库有任何建议。现在,我不是要设计结构,而是要实际将数据库数据从旧结构移动到新的规范化结构。我知道我可以编写类似PHP脚本的内容,但是我想知道是否有一种方法可以在SQL中进行。特别是MySQL。 **编辑:有人尝试过SwisSQL吗?这是一个迁移工具,但我不确定它是否能满足我的要求。 问题答案: 这是在脚本中标准化表的示例。我建议你做这样的事情 您将首先创

  • 问题内容: 我正在使用Ruby on Rails 3.0.7和MySQL5。在我的应用程序中,我有两个数据库表,即TABLE1和TABLE2,并且出于性能原因,我对TABLE2中的某些数据进行了非规范化,因此我在该表中重复了TABLE1的值。现在,在TABLE1中,我需要更新一些涉及的值,当然,我还必须在TABLE2中正确地更新非规范化的值。 我该如何以高效的方式更新这些值? 也就是说,如果TAB

  • 表规范 命名统一小写下划线 非CMF核心应用,统一带应用表前缀,如portal_ 插件表,统一带插件表前缀,如:demo_ 表默认编码utf8mb4,默认排序规则utf8mb4_general_ci 引擎统一innodb 写表注释 字段规范 命名统一小写下划线 非自增主键一定要写字段注释 数据类型尽量用数字类型,数字类型的比字符类型的要快很多。 数据类型尽量小,这里的尽量小是指在满足可以预见的未来

  • 表规范 命名统一小写下划线 非CMF核心应用,统一带应用表前缀,如portal_ 插件表,统一带插件表前缀,如:plugindemo 表默认编码utf8mb4,默认排序规则utf8mb4_general_ci 引擎统一innodb 写表注释 字段规范 命名统一小写下划线 非自增主键一定要写字段注释 数据类型尽量用数字类型,数字类型的比字符类型的要快很多。 数据类型尽量小,这里的尽量小是指在满足可以

  • 这是使用PHP将数据从(HTML)表单保存到MySQL数据库的规范问答。 如果您正在尝试执行以下操作,则此操作适用于您: 接受HTML表单上的用户输入 使用PHP脚本处理输入 将所述输入存储到MySQL数据库中。 过去提出的不应使用的类似问题的例子: 连接PHP代码并将表单提交到mySQL数据库 使用PHP/html表单插入mySQL-不工作 如何使用PHP将html表单数据传递到mySQL db

  • 问题内容: 我尝试在同一查询中搜索多种表中信息的方式,但发现这是不可能的吗?所以我想要通过简单地使用多个查询即 但是,如何为表赋予从到“手动” 的自动增量? 问题答案: 不,您不能在一个MySQL命令中插入多个表。但是,您可以使用事务。 看一下重用自动增量值。 编辑:您说:“ _经过所有这些时间试图弄清楚,它仍然无法正常工作。我不能简单地将刚刚生成的ID放在$ var中,然后将该$ var放入所有