我正在编写一个应用程序,它将为我们的位置生成检查。基本上,将它们视为健康检查表。每个“检查”都会有一系列的问题和答案。答案可以是数字(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)
但这就是我卡住的地方。我不确定如何构建问题答案表来说明分数、无分数和不同的数据类型。
另外,我知道我需要将商店映射到检查表等等,但我现在把这些都关掉了,因为这对这个问题并不重要。
那么,我是否应该为答案制作一个表格,其中所有可能的答案(从选项表构建或作为文本输入)都存储在该表中,然后是一个映射表以将“答案”映射到“问题”(对于任何特定的检查)并在那里存储点?
我只是想不对。我可以使用一些帮助。