2013-02-24 70 views
0

我正在为在线调查设计一个关系数据库。多维矩阵问题的关系数据库设计

但是,我不确定用于存储多维矩阵问题的最佳关系数据库设计是什么。

比方说,我有以下问题(对不起,它不允许我插入HTML表):

什么是你的经验......

----------| Not friendly| (2) |Very friendly|Length of stay|Visited in the last year?| 
Sydney |radio button | rb |  rb | drop down | check box    | 
-------------------------------------------------------------------------------------- 
New York |  rb  | rb |  rb | drop down | check box    | 
-------------------------------------------------------------------------------------- 
London |  rb  | rb |  rb | drop down | check box    | 
-------------------------------------------------------------------------------------- 

你觉得我应该按照以下方法做一些事情还是有更好的办法?

要容纳所有的问题:

问题
questionID
问题

QuestionMatrix2d
matrix2dID
questionID
subquestionID
subquestion

QuestionMatrix
questionID
matrix2dID
question_parentID

,并责成所有的答复:

QuestionResponse
questionID
RESPONSE_CODE

QuestionMatrix2dResponse
questionID
subquestionID
RESPONSE_CODE

谢谢您的帮助。

回答

0

在做过类似的事情之后,我会建议考虑而不是将其转化为关系问题。如果你有对象并且将它们序列化为类似JSON的东西并存储它,会怎么样?

这样做以关系到头来你会花相当多的时间去表和接线一起复杂的绘图代码在你的应用程序,以确保该问题/答案正确的顺序等

否则,我想画你可以让你的方法奏效。在RDBMS中设计调查问题没有银弹。

+0

谢谢 - 数据必须可用于查询。如果我把它存储为JSON,我不确定我能否很容易地做到这一点。我知道有一些JSON查询的开发,但有一些标准? – user2105030 2013-02-26 23:20:58

2

我不同意ryan1234。这完全是一个关系问题,没有理由不把它放到数据库中。

虽然我在这里试图达成目标,但我还是要做一些猜测。你有一个在线调查,所以我认为它会被不止一个人使用。你的数据库需要通过一个sessionuser表进行修改,我会用后者去读,因为它更清晰。其次,你有一个列表locations(Sidney,纽约,伦敦)。我想这个列表可以随时间变化,甚至可以从一个调查问卷到下一个调查问卷。然后你有一组questions。你没有明确说明这些是可变的或固定的。既然你为此设计了一组表格,我认为它应该是可变的。请注意,你的问题不是矩阵,而是一个列表。即使它们是分层的,它们仍然不构成矩阵。

最后但并非最不重要的是你已经得到了这些问题的答案。

让我们创建一个users表:

user_id user_name 
1  me 
2  somebody else 

第二个表是非常简单的:locations

location_id location_name 
1    Sidney 
2    New York 
3    London 

三表是一个比较复杂 - 而且说实话:只是普通的难看。但是,如果您在数据库中设计数据库,那么这就是您所得到的结果,并且替代方案(使用DDL或将这些信息存储在XML/JSON中,甚至存储在数据库外部)也不太好。如果存在分层问题(您的示例不显示它们),则可以添加“parent_question_id”列。

question_id question_text  question_type question_type_info 
1    How do you rate RADIO   0 to 5 
2    Length of stay  COMBOBOX   1 day, 2 days, whatever 
3    Visited last year CHECKBOX   

最后,你需要第四个表来存储所有的答案

user_id location_id  question_id  value 
1   1    1    2   <-- value here means "rating of 2" 
1   1    2    5   <-- value here means "5 days" 
1   1    3    1   <-- value here means "yes, visited last year" 

没错。丑陋的。如果你有疑问的固定列表,我可以为你提供一个非常数据库:)

编辑:回答您的意见:为了您的问题链接到一个调查,你需要几个表surveys界定哪些将要询问哪些位置的问题。以下数据库布局允许您指定位置列表,问题列表以及问卷调查名称。

surveys

survey_id survey_name 
1   Spring 2013 London Travel Survey 
2   Spring 2013 Northern Hemisphere Short Survey 

survey_questions

survey_id question_id 
1   1 
1   2 
1   3 
2   1 

survey_locations

survey_id location_id 
1   1 
2   1 
2   2 

我摆在这里为您提供了两项调查的内容。调查#1将在一个位置询问所有三个问题:'伦敦'。调查#2只会在伦敦和纽约提出一个问题。如果你想在不同的位置提出不同的问题,你的桌面布局将不得不适应这种情况,但是这样的系统不适合你原来的桌面布局。

+0

谢谢你的回答。你是对的 - 它将被多个用户使用,问题可能会从调查变为调查。然而,你认为最好的方式是证明所有这些问题都与你对......的经历有什么关系?因为对于要分析数据的人来说,了解如何准确地提出问题非常重要。 – user2105030 2013-02-26 23:13:30

+0

我不确定你在这里问什么。第四个表“answers”有一个“question_id”列,它直接链接到“questions”表,后者又有问题。 – Hazzit 2013-02-27 16:52:55

+0

将会有外部人员在观看这些调查。对于其中一些问题,重要的是要确切地知道问题是如何被问到的,因此,介绍性的问题“你对...的经历”没有得到任何回应,但是当人们看待调查时,他们需要知道它被要求作为介绍。我认为在生成调查以便向用户显示时,了解这些问题如何相互关联很重要。 – user2105030 2013-03-03 22:25:19