2012-11-01 80 views
0

我在一家制造工厂工作,我们在这里组装10种不同的产品。每种产品在功能上都相似,但需要测试不同的参数。最初我创建了一个Access数据库来存储我们构建的每个单元的测试结果。我通过每个产品都有一个表格来布置数据库。此表存储生产ID以及测试参数(压力,温度,通过/失败信息等)。我觉得这是一种很差的方法来处理这个问题,但它似乎是我可以使用访问的绑定表单的唯一方式便于数据输入。我的问题是,现在无论何时我需要添加新的测试参数,我都必须更改表格设计以及表格。用于记录测试结果的数据库设计

不久,我将有能力在mySQL中重新创建这个系统,我希望有更好的方法来存储这些测试结果。任何见解都会非常有用。

谢谢。

回答

0

查找 “数据库标准化。”

在最极端的,你可以把它分成4个表:

  • Product_Types:产品类型(VARCHAR/CHAR),身份证(INT)
  • 产品:ID /产品ID(INT)产品类型(INT,绑定到Product_Types.id的外键)
  • Test_Parameters:Type(VARCHAR/CHAR - 压力,温度等),id(INT)
  • Test_Scores:Product(INT,Products.id的外键),测试(INT,Test_Parameters.id的外键),分数(INT /任何似乎合适的),时间戳。

理论上你可以不用第一个和第三个表,而只是在每个记录中保存名称(即产品条目:id = 12345,type =“chair”)。这是非常稍快的检索这种方式,但它也没有强大的反对的人拼错的东西(即SELECT * FROM产品其中type =“椅子”将错过具有type =“chiar”的条目),因为你占用更多的存储空间'一遍又一遍地保存文本名称。无论如何,这是多对一关系的基本模型,这就是您要寻找的产品:一个产品,许多测试(或者全部四个表格,多对多:许多产品,许多测试类型)。你需要他们在单独的表,与给出的ID每一个产品,然后一个外键,每个测试结果链接到它适用于产品。

现在,让我们来谈谈约束。

一,我可能会考虑投掷将是对测试结果表的索引无论是产品ID 测试类型,然后一定要使用“对重复密钥更新”这样一个独特的密钥旧的价值被新的价值所覆盖。那样,你肯定只能对每个产品的每个测试都有一个结果。如果您还想保留旧记录,请忽略此段落。

你肯定会失去的一件事就是要求所有测试都是针对给定产品完成的。这将需要在数据库之外完成。如果你想要求每一个产品都填充所有的列,那么你必须按照你一直这样做的方式来完成它(在每个测试中,每个测试在每个测试中都有NOT NULL约束的巨大统一表中)测试列),因为现在测试结果和对象ID在功能上相互依赖(两者都不存在没有其他)。

+0

谢谢你彻底回答Mayhem。这使我更清楚。我有一个问题供将来参考。如果我在Access中重新创建这个项目,我仍然可以使用绑定的表单来输入数据?或者是否最好让它解除绑定并简单地用SQL插入记录? – Pluto035

+0

不知道 - 我从来没有使用Access,我也不知道你的堆栈的其他部分是什么样的。 – jfmatt

0

创建一个具有唯一ID /产品的产品表。然后创建一个包含唯一测试ID和适用产品列的测试表。加入这些来查找哪些测试适用于哪些产品。您可以随时添加新的测试。

另外,如果你想存储测试历史,结果等

0

我认为你正在寻找需要使用一个多对多的表,你可以有一个“测试版”列。

这样一个表,用于存储你的产品,一个是存储每个独特的测试,然后该产品相关的链接到它需要然而,许多测试第三M2M表。你的M2M也可以存储(一般)你的测试结果。

0

我会使用(至少)以下表格:

产品

ID,姓名,TestSchedule

分析例如与1开尔文容错

ID,名称,描述,说明

测试例如正常运行参数温度的测量产品p的温度测量,预期结果是300-360开尔文。对于批次X,例如

编号,产品编号,AnalysisId,假定下限,UpperLimit用户

TestResult中测试结果342开尔文,通过

标识,BatchId,TestId,结果,状态(通过/失败)

其原因既具有Analysis表和Test表是归一化。 analysis是通用的,指定一个方法。 test指定对特定产品执行分析时可接受的限制。

+0

感谢您的额外信息! – Pluto035