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

LaT*_*TeX 7 database-design

我有一个项目来创建一个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; }
    }
Run Code Online (Sandbox Code Playgroud)

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

Mat*_*nen 5

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

Quiz (int QuizId, ...)
Problem (int ProblemId, int QuizId, string Question)
Answer (int AnswerId, int ProblemId, int Index, string Answer)
Run Code Online (Sandbox Code Playgroud)

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


Ara*_*ram 3

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

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

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