多选测验引擎的数据库模式的优秀设计是什么?

时间:2011-02-04 03:20:24

标签: database-design

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

  1. 对于访问该网站的每个用户,她/他都会进行测验。
  2. 每个测验都包含一些多项选择问题。
  3. 每个问题都包含一个问题和5个相互排斥的选择。
  4. 我能想到的最简单的模型如下:

        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; }
        }
    

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

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:3)

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

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

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

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

答案 3 :(得分:1)

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