用于记录多个答案的数据库设计

时间:2015-04-30 05:56:48

标签: mysql sql database database-design

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

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

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

看起来像:

User(user_id,Name,reg_date)

Test(test_id,task_type [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)

对于每个问题,将有两个答案。答案1和答案2.因此,如果有10个问题,将记录总共20个答案。每个答案都是0~1.0的十进制值。

但是,我遇到了响应表有+120列的问题。

请注意,如果test_id为1,则只有10个问题,因此Response表中从response_11a到response_30b的列将为null。

示例记录将是:

回应(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个问题。))

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

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

编辑:

我知道这样做。

User(user_id,Name,reg_date)

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

Response(resp_id,user_id,test_id,resp_date)

answers(resp_id(链接到响应表),current_question_number,ans1,ans2)

因此,如果有10个问题,在answers表中,将有10条记录如下:

(1, 1, 0.0, 0.0)
(1, 2, 0.0, 0.5)
(1, 3, 0.3, 0.6)
(1, 4, 0.5, 0.5)
...
(1, 10, 0.3, 0.3)

这个设计怎么样?

稍后,我将使用此数据绘制图表,以便我可以轻松访问每个回复。

3 个答案:

答案 0 :(得分:1)

在数据库设计中,您经常需要考虑更多字段或更多记录,以及数据库需要如何规范化,而您上面建议的内容并未完全规范化。

DB101规范化 http://en.wikipedia.org/wiki/Database_normalization

我建议第4张桌子,也许是第5张桌子

  • 用户:PK UserID,地址等属性
  • 测试:PK TestID,一些额外属性
  • 问题(2x主要字段,一个是外键)TestID,QuestionID,
  • 响应(3xPrimary字段2是外键)TestID,QuestionID,ResponseID,一些额外属性

答案 1 :(得分:0)

我对数据库设计有一个建议。

我在响应表中做了一些修改并创建了一个新表。

  • USER表(User_ID [PK],USER_NAME,另一个额外字段)
  • TEST表(Test_ID [PK],测试详细信息的其他一些字段)
  • Quest_Set表(Set_ID,Que_ID,问题,如果需要,还有其他一些字段)
  • RESPONSE表(Res_id,User_ID [FK],Test_ID [FK],Set_ID,Que_ID,Ans_1,Ans_2,Flag)

如果您有任何疑惑,请查看并告诉我。

问候。

请查看New_Response表

(Response_id,user_id,test_id,Trans_id,Ans1,Ans2,Flag)

答案 2 :(得分:0)

您需要进一步规范化您的表格。您需要另一张表格'问题'防止冗余数据存储。

enter image description here