2

我搜索了论坛,有几篇关于问卷设计的帖子,但我想讨论一个特定的话题。此外,这是一个相当普遍的设计问题。

我想将问卷回复存储到数据库中。一些响应是自由文本(例如 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]

我应该选择哪一个(如果有的话)?为了使讨论保持一般性和对任何人有用,我希望一般目的的利弊但如果它有助于某些上下文,我会将它用于高度动态的问卷系统(用户可以创建自己的民意调查和查询)。我不太关心性能,我关心代码的简单性和维护。

4

2 回答 2

2

选择方法 B。方法 A 没有意义。原因如下:

  1. 代表一个逻辑对象的两个表Response是一个坏主意。不直观。

  2. 您的应用程序逻辑会很复杂。这样做很复杂——“获取问卷 id = X 的所有回复”,您需要查询两个表。

  3. 您将不得不questionType决定要查询哪个表以获得答案。

  4. 假设您想要一个混合包response,例如前三个选择作为多项选择,如果三个选择与他们必须回答的内容不匹配,人们可能会填写自己的意见。你要把Response同一个问题分成两个表吗?

于 2012-06-02T02:16:25.900 回答
1

我会选择方法B

  • 只需要一张桌子
  • 数据为正常形式(无冗余)
  • 易于维护(因为只有一张桌子)
于 2012-06-02T02:14:27.603 回答