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

Database design 数据库设计:可以是文本或外键的属性,database-design,Database Design,我搜索了论坛,有几篇关于问卷设计的帖子,但我想讨论一个特定的话题。此外,这是一个相当普遍的设计问题 我想将调查问卷的回答存储到数据库中。一些回答是自由文本(如varchar),另一些是多项选择(如FK)。你如何对这种差异进行建模 我见过两种方法(忘记细节) 方法A:使用两个表格。一个用于文本回答,另一个用于多项选择回答 Table: text_response some_stuff ----[*] text ----------[varchar] Table: mc_response some

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

我想将调查问卷的回答存储到数据库中。一些回答是自由文本(如varchar),另一些是多项选择(如FK)。你如何对这种差异进行建模

我见过两种方法(忘记细节)

方法A:使用两个表格。一个用于文本回答,另一个用于多项选择回答

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]

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

我会选择方法B

  • 只需要一张桌子
  • 数据为正常形式(无冗余)
  • 易于维护(因为只有一个表)

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

  • 两个表表示一个逻辑对象
    响应
    是个坏主意。不直观

  • 您的应用程序逻辑将非常复杂。要做到这一点很复杂——“获取问卷id=X的所有回答”,您需要查询两个表

  • 您必须获得
    questionType
    ,才能决定查询哪个表以获得答案

  • 假设你想要一个混合的袋子
    回答
    ,就像回答的前三个选择是多项选择,如果这三个选择与他们必须回答的不匹配,人们可能会填写自己的意见。您是否要将同一问题的回答分为两个表


  • 谢谢4个令人信服的理由!!我想没有人会投票赞成一种方法!(当我达到15分时,我会投赞成票,别担心!)。