4

我正在编写一个应用程序,它将为我们的位置生成检查。基本上,将它们视为健康检查表。每个“检查”都会有一系列的问题和答案。答案可以是数字(1,2,3,4,5 - 表示它们的点值),也可以是具有映射到点的多项选择(“是”,“否”)(1 表示是,0 表示否)和不会映射到点但可能能够被应用层用于平均的纯文本答案。因此,例如,我们可以有一个“酱汁温度”字段,它不带任何分数,但可以用于在路上报告。

问题可以在多个检查表上重复使用,但可以具有不同的分值。答案也可以。

我无法为此找出架构。我的直觉认为 EAV 将是一个很好的方法,但我越想它,我越想更多的数据仓库模型会更好。

特别是,我在找出将 min_points、max_points 和 no_points 映射到每个问题/答案的最佳方法时遇到了问题。这就是我认为我将不得不使用 EAV 的地方。实际上,我有点坚持。如果是调查或没有分数的东西,或者每个答案的分数相同,那将非常简单。问题表、答案表、输入类型的一些样板表等。但是由于每个问题都可能有一个分值,并且该分值可能会根据使用该问题的位置而改变,所以我不确定如何继续。

因此,示例问题如下

  • 食物热吗 [是,否] 可能的分数 = 5(5 表示是,0 表示否)
  • 食物好吃吗 [1,2,3,4,5] 可能的分数 = 5(1 分 1 分,2 分 2 分等)
  • 经理是否值班 [是,否] 可能的分数 = 5(5 表示是,0 表示否)
  • 建筑物是否干净 [1,2,3,4,5] 可能的分数 = 10(1 分 2 分,2 分 4 分,3 分 6 分等)
  • 员工是否专业 [是,否] 可能的分数 = 5(5 表示是,0 表示否)
  • 冷冻室温度 [数字文本输入]
  • 值班经理[文字输入]

由于所有答案都可以具有不同的数据类型和点值,因此我不确定如何为它们构建数据库。

我在想(为简洁起见,省略或更改了其他表格、名称和其他小鬼细节)

CREATE TABLE IF NOT EXISTS inspection(
id mediumint(8) unsigned not null auto_increment PRIMARY KEY,
store_id mediumint(8) unsigned not null,
inspection_id mediumint(8) unsigned not null,
date_created datetime,
date_modified timestamp,
INDEX IDX_STORE(store_id),
INDEX IDX_inspection(inspection_id),
FOREIGN KEY (store_id) REFERENCES store (store_id)ON DELETE CASCADE,
FOREIGN KEY (inspection_id) REFERENCES inspection (inspection_id)ON DELETE CASCADE)

CREATE TABLE IF NOT EXISTS input_type(
input_type_id tinyint(4) unsigned not null auto_increment PRIMARY KEY,
input_type_name varchar(255),
date_created datetime,
date_modified timestamp)

CREATE TABLE IF NOT EXISTS inspection_question(
question_id mediumint(8) unsigned not null auto_increment PRIMARY KEY,
question text,
input_type_id mediumint(8),
date_created datetime,
date_modified timestamp)
CREATE TABLE IF NOT EXISTS inspection_option(
option_id,
value)

但这就是我卡住的地方。我不确定如何构建问题答案表来说明分数、无分数和不同的数据类型。

另外,我知道我需要将商店映射到检查表等等,但我现在把这些都关掉了,因为这对这个问题并不重要。

那么,我是否应该为答案制作一个表格,其中所有可能的答案(从选项表构建或作为文本输入)都存储在该表中,然后是一个映射表以将“答案”映射到“问题”(对于任何特定的检查)并在那里存储点?

我只是想不对。我可以使用一些帮助。

4

1 回答 1

0

这里没有正确或错误的答案,我只是抛出一些想法和讨论点。

我建议基本的“单元”不是问题,而是一对问题+答案类型(例如1-5、文本或其他)。在我看来,这Was the food hot / range 1 to 5Was the food hot / text description非常不同的,你会发疯地试图将一个问题与两种(或更多)答案类型联系起来(更不用说这些答案的答案键了——暂时忽略这一点,我稍后再谈)。将该对称为 QnA 项目。您最终可能会得到很多相似的配对,但是,嘿,这是您必须使用的。

所以你有一个 QnA 项目的“池”。它们是如何选择使用的?特定表格(或问卷)是根据池中的项目构建的,还是每次填写问卷时随机选择的?表格是否与位置特别相关,或者可以在任何位置使用表格?他们在制作表格/问卷时有多挑剔?QnA 项目如何收集/相互关联和/或最终结果非常重要,除非您真的喜欢重写代码,否则您应该在开始编写代码之前将其全部解决。

给定一个已定义的 QnA 项目,您还应该有该项目的“答案键”——一种测量给定答案(基于项目的答案类型)的方法:零、值、值 * 2 等等。这显然会因使用而异(问卷到问卷?它是否根据问卷的呈现位置而有所不同?如果是,如何或为什么?)是否有标准化的答案关键算法(总是零,总是值 * 2,等)还是这些也是非常自由的形式?确定它们如何使用/与 QnA 项目相关联对于正确建模至关重要。

于 2012-07-03T20:00:53.133 回答