数据库设计:可以是文本或外键的属性

时间:2012-06-02 02:04:17

标签: database-design

我搜索了论坛,有几篇关于问卷设计的帖子,但我想讨论一个特定的话题。而且,这是一个非常笼统的设计问题。

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

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

2 个答案:

答案 0 :(得分:2)

采取方法B.方法A没有意义。原因如下:

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

  2. 您的应用程序逻辑会很复杂。执行此操作很复杂 - “获取问卷id = X的所有回复”,您需要查询两个表。

  3. 您必须让questionType决定要查询的表格才能找到答案。

  4. 假设你想要一个混合包response,就像回答中的前三个选择是多项选择,如果三个选项与他们必须回答的内容不匹配,人们可以填写自己的意见。你打算在两个表中分割Response同一个问题吗?

答案 1 :(得分:1)

我会选择接近B

  • 只需要一张桌子
  • 数据处于正常状态(无冗余)
  • 维护简单(因为它的一个表格)
相关问题