设计用于记录数据的高效数据库

时间:2015-04-28 19:35:09

标签: sql database database-design

我正在为我正在进行的项目设计数据库。我有3个任务(用户可以选择)

  • 第一项任务提出10个问题
  • 第二项任务提出了20个问题
  • 第三项任务提出了30个问题

n.b。随着问题数量的增加,测试结果的准确性将会提高

对于每个问题,将有两个答案。 Answer 1Answer 2。因此,如果有10个问题,则总共会记录20个答案。

到目前为止我设计的是user表和test_result表。 test_result表是我在设计时遇到的问题。

user表具有以下属性

  • 用户ID
  • 名称
  • 注册日期

test_result表具有以下属性

  • 测试ID
  • 用户ID(引用用户中的用户ID)
  • 测试时间

我的问题是我不知道如何有效地记录10~30个问题答案。

我正在考虑使用test_result

test_result表将具有以下属性

  • 测试ID
  • 用户ID
  • 测试时间
  • 回答1a
  • 回答1b
  • 回答2a
  • 回答2b
  • ...
  • 回答60a
  • 回答60b **

但我认为应该有一种更有效的方法。

修改

澄清......

每个问题将记录2个不同的答案。

  • 问题1将有Ans1 Ans2。
  • 问题2将有Ans1 Ans2。
  • 等..

一直到10~30个问题(问题数量因您选择的任务而异)

---- ::编辑2 ::

好的......所以我想出了一个改进的设计,但我仍在苦苦挣扎。

看起来像:

User(user_id,Name,reg_date)

Test(test_id,输入[1,2,3],类别[有5种不同的类别])

Response(Response_id,user_id,test_id,response_date,response_1a,response_1b,response_2a,response_2b,...,response_30a,response_30b)

但是,我再次遇到Response表有+120列的问题。每个响应都是0~1.0的数值。

请注意,如果test_id为1,则只有10个问题,因此从Responseresponse_11a的{​​{1}}表中的列将为{{1} }。

示例记录将是:

response_30b(1,1,1,2015 / 04 / 30,0.5,0.5,0.7,0.7,0.8,0.8,......(很多记录)......,1.0,0.3, null,null,null,(所有空值,因为test_id只有10个问题。))

我想不出另一种方法。 :/

这是设计数据库的好方法吗?

1 个答案:

答案 0 :(得分:0)

似乎是一个良好的开端,因为那里总是一个&一个B

TestAnswers(ID, TestID, AnswerA, AnswerB)

那说它很清楚哪个答案与哪个问题有关......