我搜索了论坛,有几篇关于问卷设计的帖子,但我想讨论一个特定的话题。而且,这是一个非常笼统的设计问题。
我想将问卷答复存储到数据库中。一些响应是自由文本(例如varchar),而另一些响应是多选(例如FK)。你如何模拟这种差异?
我见过两种方法 - (忘了细节)。
方法A:使用2个表格。一个用于文本响应,另一个用于多选响应。
Table: text_response
some_stuff ----[*]
text ----------[varchar]
Table: mc_response
some_stuff ----[*]
optionID -----[FK to selected option]
*-not relevant to the disccussion... ResponseID, QuestionID, SurveyID, whatever
方法B:“合并”两个表,并根据响应类型仅使用其中一列。
Table response
some_stuff ----[*]
optionID -----[FK to selected option]
text ----------[varchar]
我应该选择哪一个(如果有的话)?为了保持讨论的一般性和有用性,我希望专业人士和缺点一般目的,但如果它有助于某些上下文,我会将它用于高度动态的问卷系统(用户可以创建自己的民意调查和查询)。我不太关心性能,我关心代码简单性和维护。
答案 0 :(得分:2)
采取方法B.方法A没有意义。原因如下:
表示一个逻辑对象Response
的两个表是个坏主意。不直观。
您的应用程序逻辑会很复杂。执行此操作很复杂 - “获取问卷id = X的所有回复”,您需要查询两个表。
您必须让questionType
决定要查询的表格才能找到答案。
假设你想要一个混合包response
,就像回答中的前三个选择是多项选择,如果三个选项与他们必须回答的内容不匹配,人们可以填写自己的意见。你打算在两个表中分割Response
同一个问题吗?
答案 1 :(得分:1)
我会选择接近B