在数据库表中按年和按年有效地存储问题

时间:2018-07-30 03:10:43

标签: sql-server database-design

我基本上是想解决这个问题:“有效地找到提出问题的考试和年份。”

同年,一个问题可能会在多次考试中出现。

对于同一项考试,一个问题可能会在多年后出现。

每年进行一次考试,每年仅一次。

考试可以包含多个问题。

一个问题可能不属于任何考试(例如,这是一个自制的问题),在这种情况下,它也不属于任何一年。

考试表中大约有 20 个条目。

年表中直到日期的条目数大约为 30 ,并且将每年连续增加1

> 每年每项考试中的

问题数量约为 200

到目前为止,我能想到的解决方案是:

问题表格:

QuestionId
.
.
around 10-15 more columns
.
.

考试表:

ExamId
ExamName (like ExamA, ExamB, ExamC)

年表:

YearId
YearValue (like 1942, 1947, 2013, 2018)

YearwiseExamQuestion表:

YearwiseExamQuestionId
YearId
ExamId
QuestionId

请建议这是否适合大量问题?

2 个答案:

答案 0 :(得分:0)

听起来您正在围绕要从数据派生的特定查询而不是根据要存储的数据的特性来设计数据库。如果您要节省数据存储空间,这将是有问题的。如果您不想节省数据存储空间,则可以这样做。

您的解决方案仍然可以使用,但是,与更规范的解决方案相比,它只占用更多的空间。通过使Year Table不是表,而是Exam Table中的一列,并通过查询按年份获取数据,可以节省空间。如果您这样做了,我认为用Exam Table中的外键Question TableQuestionIdExam Table做成自己的表仍然可行。

答案 1 :(得分:0)

您的设计看起来不错,因为您必须在某些表格中维护与考试相对应的问题,YearwiseExamQuestion似乎是正确的表格。将YearId,ExamId,QuestionId组合作为复合主键,以便按照问题中的说明满足您的要求。另外,在相应的父表中将YearId,ExamId,QuestionId作为主键。 YearWiseExamQuestion是子表,其中包含哪个问题来自哪一年的哪个考试。

  

同年,一个问题可能会在多次考试中出现。

     

对于同一项考试,一个问题可能会在多年后出现。