【问题标题】:What is the good design of database schema for a multiple-choice quiz engine?多选测验引擎的数据库模式的良好设计是什么?
【发布时间】:2012-01-13 15:03:38
【问题描述】:

我有一个项目来创建一个 asp.net mvc 站点来生成一个测验。 这是规格:

  1. 对于每个访问该网站的用户,她/他都会得到一个测验。
  2. 每个测验都包含一些选择题。
  3. 每个问题都包含一个问题和 5 个互斥选项。

我能想到的最简单的模型如下:

    public class Problem
    {
        public int ProblemId { get; set; }
        public string Question { get; set; }
        public string A { get; set; }
        public string B { get; set; }
        public string C { get; set; }
        public string D { get; set; }
        public string E { get; set; }
    }

我不确定它是否好。 你能给我一个更好的设计建议吗?

【问题讨论】:

  • “堆栈溢出”?该网站已经变得有感知力并且也在提问?
  • 我很惊讶有人没有早点得到那个用户名。我几乎想投票给他。
  • 你可以为每个答案选择多个选项吗?
  • @JK:这只是第一步。在它学得足够多之后,它也会开始回答问题。
  • @Adam Gent:上面写着“互斥选择”。所以,没有。

标签: database-design


【解决方案1】:

属性 A 到 E?不,谢谢!我会按如下方式布置我的表格:

Quiz (int QuizId, ...)
Problem (int ProblemId, int QuizId, string Question)
Answer (int AnswerId, int ProblemId, int Index, string Answer)

字段名称应该是不言自明的(索引是单个问题答案的排序索引,如果它们的顺序很重要)

【讨论】:

    【解决方案2】:

    简单直观的设计总是最好的,因为它们真的很简单,我们开始怀疑自己;-)。您做得很好,除了您还可以将正确答案与问题本身一起存储。那么它不再只是一个问题。所以现在是 ProblemAndAnswer 或 QuizItem。

    所以这一切都可以存储在一个表中作为多个列。 但您还需要了解它的含义。这意味着您正在做出一个假设,即一个问题总是有 5 个选择。如果你将拥有少于 5 个,那么它是可以的,因为你可以存储空值。但是如果你想要更多呢?这是单表模型开始崩溃的时候。您现在会开始认为一个问题确实可以有 1 个或多个选择,并且希望拆分为父子表....现在您已经做出了明智的决定 ;-)

    【讨论】:

    • 我不知道。将模式限制为恰好五个答案似乎很糟糕。当然,它可能完全符合要求(今天),但如果只是在不太多复杂性成本的情况下更通用一点,我会让它在那里更灵活。不过,保持要求尽可能简单(以一点进展为模)是一个很好的原则。
    【解决方案3】:

    表格Question 有一个id 和一个description,这是问题的文本(“猫是偷偷摸狗吗?”)。

    编辑:此外,Question 表有一个correct_answer_id,它对应于Answer 表中的正确行。

    Answer 有一个question_id,将它链接回它的Question,还有一个description,它是答案的文本(“这取决于你的猫的颜色。”)。

    使用此架构,问题没有硬编码的答案数量。

    【讨论】:

    • 加上问题字段以获得正确答案。或者可以硬编码让第一个答案始终是正确的,如果您在显示它们时无论如何都要随机播放它们(但不要直接在隐藏字段中使用 question_id,否则用户将开始作弊)。或者一个字段,一个答案以将其标记为正确(这将允许扩展系统以处理具有多个正确答案的问题)。
    【解决方案4】:

    我正在研究同一种数据库结构。最好有一个选项表来插入针对特定问题 ID 的选项。测验 ID 是一个单独的表格,其中包括问题 ID 和测试持续时间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多