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              |
--------------------------------------------------------------------------------------

您认为我应该按照以下方式做一些事情还是有更好的方法?

保留所有问题:

问题
问题ID
问题

QuestionMatrix2d
matrix2dID
questionID
subquestionID
subquestion

QuestionMatrix
questionID
matrix2dID
question_parentID

并保留所有回复:

QuestionResponse
questionID
response_code

QuestionMatrix2dResponse
questionID
subquestionID
response_code

谢谢您的帮助。

4

2 回答 2

2

我不同意 ryan1234。这完全是一个关系问题,几乎没有理由不将其放入数据库。

不过,我必须做一些猜测,以实现您在这里想要实现的目标。你有一个在线调查,所以我认为它会被不止一个人使用。您的数据库需要通过一个sessionoruser表来适应这一点,我将使用后者,因为它更易于阅读。

其次,您有一个locations(悉尼、纽约、伦敦)的列表。我假设这个列表可以随着时间的推移而改变,甚至可以从一个问卷调查到另一个问卷。

然后你有一套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 将只针对伦敦和纽约提出一个问题。如果您想在不同的位置提出不同的问题,您的表格布局将不得不适应这种情况,但这样的系统将不适合您原来的类似表格的布局。

于 2013-02-25T02:20:30.060 回答
0

做过类似的事情后,我建议考虑不要把它变成一个关系问题。如果您有对象并将它们序列化为 JSON 之类的东西并存储它怎么办?

以相关的方式执行此操作,您最终将花费大量时间制作表格并将应用程序中的复杂绘图代码连接在一起,以确保问题/答案以正确的顺序绘制等。

否则我认为你可以让你的方法奏效。在 RDBMS 中设计调查资料没有灵丹妙药。

于 2013-02-25T00:17:00.003 回答