在此方案中将计算值存储在数据库中?

时间:2014-08-26 12:03:33

标签: database database-design database-theory

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

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

它们的温度来自不同的传感器(环境中的不同位置,通常是一个大的受控环境),所以它们没有关系(即我无法从空气温度中得出产品温度)。

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

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

我的问题是:我应该存储这个计算的读数以及无阻尼的读数,还是应该在视图中计算它,使所有实际存储的读数无阻尼?

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

通常我会使用一个视图并将计算放在视图中,但这次我有点紧张。如果计算得到"调整"然后,我必须使视图在某个时间戳等之前使用旧计算更复杂(这很好;我只需要小心我在哪里查询读数值 - 我不喜欢在其他地方嵌套视图视图,因为它有时会减慢查询..)。

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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

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

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