0

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

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

MachineA测量四个温度和一个湿度。MachineB测量一个温度和五个电压。MachineC测量风速和风向。测量一直在自动进行。

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

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

一直在添加不同的机器。一组跨越所有可能测量的列是不切实际的,因为如果我添加一个MachineD带有咸度测量的列,我不会提前考虑咸度,我必须为此在一个非常大的表中添加一个新列一台机器使用。

典型查询:

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

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

4

1 回答 1

0

这个数据有几个维度

  • 机器(位置?):产生测量的东西
  • “分析物”:被测量的东西
  • (显然)时间:测量的时间。

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

在像这样的现实世界问题中,总是存在隐藏的依赖关系:位置 X测量{温度、风速、湿度},并且总是使用测量设备 Y。

这就是 BCNF 发挥作用的地方。不知道你的数据,我不能说。如果我确实知道您的数据,我也无法判断:3..4 个关键元素之间的依赖关系可能会随着时间而改变。

于 2012-12-14T00:36:27.567 回答