如何将不同的测量组存储在数据库表中?

时间:2012-12-13 23:07:22

标签: database database-design

这是一个关于在数据库中存储大量数据的难题。

假设我有一个装满机器的设施,每个机器都测量多个数量的时间序列。我会尝试用玩具示例来解释。

MachineA测量四个温度和湿度。 MachineB测量一个温度和五个电压。 MachineC测量风速和风向。测量结果一直在自动发生。

每台机器同时进行所有测量,但时间间隔和偏移量因机器而异。这意味着一行只能包含在一个时间戳上拍摄的一台机器的测量结果。

实际上有两千台机器。这意味着为每台机器或机器类型使用单独的表是不切实际的。

不断添加不同的机器。跨越所有可能测量的一组列是不实际的,因为如果我添加一个带有咸度测量的MachineD,我将不会提前考虑咸度并且我必须添加一个新列真的只用于那台机器的大桌子。

典型查询:

  • 过去90天内MachineA的最高温度是多少?
  • 过去7天MachineB的所有测量结果是什么?
  • 在所有进行温度测量的机器中,昨天测得的最低温度是多少?
  • 对于每台具有温度测量值的机器,昨天测得的最低温度是多少?
  • 哪些具有咸味检测器的机器在去年也有测量值?
  • 根据MachineC的风速和MachineB的温度,风寒是什么?

如何在这些限制条件下进行组织?

1 个答案:

答案 0 :(得分:0)

此数据中有一些维度

  • 机器(位置?):产生测量的东西
  • “analyte”:正在测量的东西
  • (显然)时间:测量时间。

这三个项目,某种形式,必须是主键的一部分。 唯一的函数依赖属性是* measurement“:测量过程的实际结果。它的单位并不重要(因为它在功能上依赖于三个关键字段;虽然可能是一个额外的伪尺寸“aparatus类型”,或者它甚至可能取决于位置。甚至时间。叹息......)。

在像这样的现实问题中,始终存在隐藏的依赖性:位置X 通过测量来测量{温度,风速,湿度}和总是设备Y。

这就是BCNF进入图片的地方。不知道你的数据,我不知道。如果我 知道你的数据,我也说不出来:3..4关键元素之间的依赖关系可能会随着时间的推移而改变。