我正在编写一个可以为我们的位置生成检查的应用程序。基本上,将它们视为健康检查表。每次“检查”都会有一系列问题和答案。答案可以是数字(1,2,3,4,5 - 表示它们的点值),也可以是多个选择('是','否'),它们将映射到点(1表示是,0表示否)和平面文本答案不会映射到点,但可能会被应用程序层用于平均。因此,例如,我们可以有一个“酱温度”字段,它不带点,但可以用于报告道路。
问题可以在多个检查表上重复使用,但可以有不同的点值。所以可以回答。
我无法弄清楚这个架构。我的直觉说EAV是一个很好的方式,但我想的越多,我就越想到数据仓库模型会更好。
特别是,我在找出将min_points,max_points和no_points映射到每个问题/答案的最佳方法时遇到了问题。这是我认为我将不得不使用EAV的地方。实际上,我有点坚持。如果是一项调查或某些没有积分的事情,或者每个答案都有相同的积分值,那将非常简单。问题表,答案表,输入类型的一些样板表等。但由于每个问题都可能有一个点值,并且该点值可能会根据使用该问题的位置而改变,我不确定如何继续。
因此,示例问题如下
由于所有答案都可以有不同的数据类型和点值,我不知道如何为它们构建数据库。
我在想(为了简洁起见,遗漏或改变了其他表格,名称和其他详细信息)
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)
但是这里我被困住了。我不确定如何构建问题答案表来解释积分,没有积分和不同的数据类型。
另外,我知道我需要将商店的映射表用于检查等等,但我现在已经把这些都留下了,因为这对问题来说并不重要。
那么,我应该创建一个答案表,其中所有可能的答案(从选项表构建或作为文本输入)存储在该表中,然后是映射表以将“答案”映射到“问题”(对于任何特定的检查)并存储点?
我只是不正确。我可以使用一些帮助。
答案 0 :(得分:0)
这里没有正确或错误的答案,我只是抛出一些想法和讨论要点。
我建议基本的“单位”不是问题,而是一对问题+回答类型(例如1-5,文本或其他)。在我看来,Was the food hot / range 1 to 5
和Was the food hot / text description
是如此截然不同,你会疯狂地尝试将问题与两种(或更多种)答案类型联系起来(更不用说为这些答案回答键 - 忽略了现在,我稍后再接受)。将该对称为QnA项目。你最终可能会遇到很多类似的对,但是嘿,这就是你必须要做的事情。
所以你有一个QnA项目的“池”。他们是如何选择使用的?是否根据池中的项目构建特定表格(或问卷),或者每次填写问卷时是否随机选择?表格是否与位置特别相关,或者表格是否可以在任何地方使用?他们在构建表格/问卷时有多挑剔? QnA项目如何被收集/相互关联和/或最终结果非常重要,你应该在开始编写代码之前全力以赴,除非你真的喜欢重写代码。
给定一个已定义的QnA项目,您还应该为该项目设置一个“答案键” - 一种方法,通过该方法测量给定答案(基于项目的答案类型):零,值,值* 2,等等。这显然可能因使用情况而异(问卷调查到问卷调查?根据调查问卷的呈现位置是否有所不同?如果是,如何或为何?)是否有标准化的答案密钥算法(alwyas为零,总值为* 2,等)或者这些也是极其自由的形式?确定它们如何使用/与QnA项目相关联对于正确建模至关重要。