1

我在一家制造工厂工作,我们在那里组装 10 种不同的产品。每个产品功能相似,但需要测试不同的参数。最初,我创建了一个 Access 数据库来存储我们构建的每个单元的测试结果。我通过为每个产品设置一个表来布置数据库。此表存储生产 ID 以及测试参数(压力、温度、通过/失败信息......等)方便数据输入。我的问题是,现在每当我需要添加新的测试参数时,我都必须更改表格设计和表格。

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

谢谢。

4

4 回答 4

2

查找“数据库规范化”。

在最极端的情况下,您可以将其拆分为 4 个表:

  • Product_Types:产品类型(VARCHAR/CHAR),id(INT)
  • Products:id/production id(INT),产品类型(INT,外键绑定到Product_Types.id)
  • Test_Parameters:类型(VARCHAR/CHAR - 压力、温度等)、id (INT)
  • Test_Scores:产品(INT,Products.id 的外键),测试(INT,Test_Parameters.id 的外键),分数(INT/任何看起来合适的),时间戳。

理论上,您可以不使用第一个和第三个表,而只需将名称保存在每条记录中(即产品条目:id = 12345,type = "chair")。以这种方式检索会稍微快一点,但它对于人们拼写错误的东西也不是很健壮(即从 type="chair" 将丢失 type="chiar" 条目的产品中选择 *),并且占用更多存储空间,因为你'一遍又一遍地保存文本名称。

无论如何,这是多对一关系的基本模型,这就是您要寻找的:一个产品,许多测试(或者,对于所有四个表,多对多:许多产品,许多测试类型)。您需要将它们放在单独的表中,每个产品都有一个 id,然后是一个外键,用于将每个测试结果链接到它适用的产品。

现在,让我们谈谈约束。

我可能会考虑使用的一个是测试结果表上的唯一键,它同时索引产品 id测试类型,然后确保使用“ON DUPLICATE KEY UPDATE”,以便旧值被新值覆盖那些。这样,您就可以确定每种产品的每次测试都只有一个结果。如果您还想保留旧记录,请忽略本段。

您肯定会失去的一件事是要求对给定产品进行所有测试的能力。必须在数据库之外完成很多工作。如果您想要求为每个产品填写所有列,那么您必须按照您一直在做的方式进行操作(在一个巨大的统一表中为每个测试使用一列,每个测试都有 NOT NULL 约束test 列),因为现在测试结果和对象 id 在功能上是相互依赖的(没有另一个就不能存在)。

于 2012-11-01T13:54:03.107 回答
2

我会(至少)使用下表:

产品

ID、名称、TestSchedule

分析,例如使用具有 1 开尔文容错的正常工作参数测量温度

ID、名称、描述、说明

测试例如产品 p 中的温度测量,预期结果为 300-360 开尔文。

Id、ProductId、AnalysisId、LowerLimit、UpperLimit

TestResult批次 X 的测试结果,例如342 Kelvin,通过

Id、BatchId、TestId、结果、状态(通过/失败)

既有Analysis表格又有Test表格的原因是标准化。是通用的analysis,指定一个方法。test指定对特定产品进行分析时的可接受限度。

于 2012-11-01T15:49:36.773 回答
1

我认为您正在考虑使用多对多表。

因此,一个存储您的产品的表,一个存储每个唯一测试的表,然后是第三个 M2M 表,将产品 A 链接到它需要的许多测试。您的 M2M 还可以(通常)存储您的测试结果。

于 2012-11-01T13:51:08.093 回答
0

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

此外,如果您想存储测试历史、结果等,您可以有一个“测试版本”列。

于 2012-11-01T13:39:58.333 回答