1

我将来自温度监测系统的传感器的读数存储在数据库中。

有两种类型的阅读:空气和产品。产品温度代表食物相对于实际空气温度的缓慢温度变化。

它们 2 温度取自不同的传感器(环境中的不同位置,通常是大型受控环境),因此它们不相关(即我无法从空气温度得出产品温度)。

最初我提供的产品温度已经被传感器阻尼,但是编写固件的人犯了一个错误,所以阻尼值不正确,现在我不得不从产品传感器获取未阻尼读数并应用阻尼我自己根据数据库中的最后几个读数。

当一个新的读数出现时,我会查看最后几个无阻尼读数和最后一个阻尼读数,并从中确定一个新的阻尼读数。

我的问题是:我应该存储这个计算的读数以及无阻尼的读数,还是应该在一个视图中计算它,让所有物理存储的读数都没有阻尼?

可能会影响这一点的一件事:读数很关键;当读数超出公差时,会根据读数生成警报行:这是为了防止食物中毒,人们可能会因此而失去工作。人们签署他们看到的价值观,所以这些价值观永远不能改变。

通常我会使用视图并将计算放入视图中,但这次我有点紧张。如果计算得到“调整”,那么我必须使视图更复杂才能在某个时间戳之前使用旧计算等(这很好;我只需要在查询读数值的地方小心 - 我不就像在其他视图中嵌套视图一样,有时它会减慢查询速度..)。

在这种情况下你会怎么做?

谢谢!

4

1 回答 1

0

关系模型的基本思想是“逻辑数据独立性”。除其他外,SQL 视图实现了逻辑数据独立性。

因此,您可以先将计算放在视图中。以后,当它变得太复杂而无法以这种方式维护时,您可以将计算移至 SQL 函数或 SQL 存储过程,或者将计算移至应用程序代码。如果需要,您可以将结果存储在基表中。然后更新视图定义。

视图的客户端应该继续工作,就好像什么都没有改变一样。

将此计算值存储在基表中存在一个问题:您可能无法编写 CHECK 约束来保证其计算正确。无论您是否在视图中显示该值,这都是一个问题。这意味着您可能需要某种管理程序来定期验证数据。

于 2014-08-26T12:42:57.340 回答