【问题标题】:How can different groups of measurements be stored in a database table?如何将不同组的测量值存储在数据库表中?
【发布时间】:2012-12-13 23:07:21
【问题描述】:

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

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

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

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

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

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

典型查询:

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

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

【问题讨论】:

  • 如果所有内容都作为数值进行测量,只需存储该值,然后将哪个测量单位存储在单独的列中。该列可以是 ENUM 或字符串,对 有效测量 表具有外部约束。
  • @MikeChristensen,仅仅存储单元是不够的;还必须存储数量的名称(“widget 4 temp”)。您的建议可以适应这一点,但是当我从该数据库中获得一百万行时,大部分传输将用于标签而不是测量,对吗?有没有办法解决这个问题?
  • 您可能需要考虑需要支持哪些类型的查询。如果它只是一个巨大的数据日志,您可能可以将所有内容序列化为字符串,或者首先重新考虑使用关系数据库。如果您需要查询某些类型的测量值或某些机器或某些小部件,则需要以支持的方式标准化您的数据。
  • “四个温度和一个湿度”意味着对于所有测量四个温度和一个湿度的机器来说是一样的吗?或者如果不是所有这样的机器,至少对于一组这样的机器?
  • @MikeChristensen,我会更新问题。

标签: database database-design


【解决方案1】:

这个数据中有几个维度

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

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

在诸如此类的现实问题中,总是存在隐藏的依赖关系:位置 X测量{温度、风速、湿度},并且总是测量设备 Y。

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

【讨论】:

    猜你喜欢
    • 2013-08-04
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 1970-01-01
    相关资源
    最近更新 更多