当前位置: 首页 > 面试题库 >

用于调查的SQL设计,具有不同数据类型的答案

马朝斑
2023-03-14
问题内容

我正在进行在线调查。大多数问题的答案等级为1-5。如果我们需要向调查中添加一个问题,我将使用一个简单的Web表单,该表单会在相应的表格中进行INSERT操作,瞧!调查正在提出新的问题-
没有新的代码或对数据库结构的更改。

我们被要求添加可以包含不同数据类型答案的调查问题。规范要求调查是“可配置的”,以便在将来的任何时候,当有人说:“我们需要一项新的调查,询问{文本答案问题},{1-5问题},{真假问题}
,{以日期作为答案的问题}”,我们可以在不更改数据库结构的情况下做到这一点。

我正在尝试寻找存储这些答案的最佳方法,但是我想出的每一种方法都显得有些拙劣。

有些问题的答案可能是/否或是/否。有些问题的答案可能是整数(“过去一个月中您使用过技术支持的次数是多少次?”),另一个问题的答案可能是日期,字符串,倍数。具有单个值的选择,具有多个值的多项选择,等等。或者有时,特定的答案值可能会提示一个子问题(“您对…感到失望的原因是什么?”)

一种简单的解决方案是将每个问题作为调查中的一列,将其答案作为调查中的一列,以及是否在调查中将其作为一列。在我看来,这真是一团糟-
那是一张大桌子;不是很“关系”。

集思广益,我能想到的“最佳”方法是为每种答案类型使用不同的表,但是容易受到数据完整性问题的影响。换句话说,我会

CREATE TABLE `Questions` (...);
CREATE TABLE `TrueFalseAnswers` (...);
ALTER TABLE `TrueFalseAnswers`
  ADD CONSTRAINT `TrueFalseAnswers_ibfk_1` FOREIGN KEY (`question_id`)
REFERENCES `Questions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
CREATE TABLE `TextAnswers` (...);
ALTER TABLE `TextAnswers`
  ADD CONSTRAINT `TextAnswers_ibfk_1` FOREIGN KEY (`question_id`)
REFERENCES `Questions` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;

等等。

上面的一个问题是,对于DDL中的任何问题,我不能保证至少存在一个答案。

另一个解决方案可能是在“问题”表中为答案提供一个二进制或字符串列,并将所有答案编码为某种字符串或二进制格式,然后将其存储在答案列中。这样,每个问题至少给我一个答案,但是我却无法访问SQL查询中的聚合功能。这让我觉得不是一个非常“关系”的解决方案。

因此,我发现上述想法存在问题。是否有解决此问题的“最佳”方法

现在,我已经花了一些时间来表达问题和想法,看来我提出的主要问题是“我想在不进行任何编码的情况下存储任意类型的数据…”是这样吗?绝望?

我正在使用MySQL,因此无法访问其他RDBMS可能会访问的东西。


问题答案:

使用指定答案类型的列,但将答案存储为文本。您的应用程序或前端可以使用answer_type列确定向最终用户显示的内容(测试框,单选按钮,日期选择器)以及在将其发送回数据库之前如何对其进行验证。



 类似资料:
  • 我使用的是Primefaces 3.5中的<code>p:dataTable</code>以及延迟加载和动态列。 我有三种类型的列,区别在于过滤的输入。一个有,一个有,最后一个什么都没有。 列通过标记呈现。 一切正常,但不是“懒惰”。我还有,其中每个选项卡都包含这个数据表,并且每个请求都会初始化所有bean。我知道,是在构建时评估的,所以它在tabView之前。 因此,我的问题是:如何在<code

  • 问题内容: 我想计算具有时间数据类型的字段的总和。 我的桌子在下面: 在这里,我想对两个时间字段求和。我尝试了以下查询 但是它给出的输出为 但是我的期望输出将如下所示: 如何获得此输出? 问题答案: 您可以求和总计秒数,或。您可以使用一些数学将其格式化为时间字符串。例如,总分钟数为。例如: SQL Fiddle上的工作代码。

  • API调用 API响应equation_list字段包含整数数组或字符串。例如: 但我有个例外 com.google.gson.java.lang.IllegalStateException:预期BEGIN_ARRAY但在第1行第1586列路径$[5]处是STRING。equation_list 我如何满足我的要求?

  • 注意1:如果您有相同类型的字段(或相同的擦除),最好用匹配的字段命名所有@mock注释字段,否则Mockito可能会混淆,不会发生注入。 这是否意味着如果我有几个具有相同类型的字段,我不能只模拟其中一个字段,而是应该为所有具有相同类型的字段定义?这是已知的限制吗?有什么原因为什么它还没有被修复?通过字段名称匹配应该很简单,不是吗?

  • 问题内容: 我有一个查询,它是两个有点相似的数据集,但是它们都有一些其他列中不存在的列(即,结果中的列具有NULL值。) 问题是,我需要使用仅存在于一个或另一个集合中的那些列来生成数据,以便以友好的格式为软件端获取数据。 例如: Table1 具有字段。 表2 具有字段。该字段在两个表之间是公共的。 我的查询看起来像这样: 这就是我被困住的地方。数据如下所示: …但是我希望它看起来像这样: 我希望

  • 我试图使用IXUDRA/CURL在laravel中发布多部分/表单数据,指定数据是应用程序JSON。Im所面临的问题是为数据分配类型,同时仍然使头内容类型为多部分/表单-数据(multipart/form-data)。 知道吗?谢谢你抽出时间。