问题:

一个关系数据库(Postgres的)存储各种测量值的时间序列数据。每个测量值可以具有特定的“测量类型”(例如,温度,溶解氧,等),并且可以具有特定的“测量单元”(例如,华氏温度/摄氏/开尔文,每升百分之/毫克,等等)。

问题:

有没有人建立了一个类似的数据库,使得尺寸完整性是保守?有什么建议?

我正在考虑建立一个measurement_type和measurement_unit表,这两个将有文字两列,ID和文本。然后,我会创建外键在measured_value表这些表。文本我担心有些因为有对非唯一重复的可能性(例如,“微克/升” VS为每升微克“微克/升”)。

这样做的目的是让我可以既转换并验证查询单元,或通过编程外部。理想情况下,我以后将有能力以包括严格的尺寸分析(例如微克/升链接到值“M / V”(体积除以质量))。

有没有做到这一点更优雅的方式?

有帮助吗?

解决方案

我公司生产的数据库的子模式处理单元的万古前(没关系,我稍微夸大;它是大约20年前,虽然)。幸运的是,它只有处理简单的质量,长度,时间维度 - 未温度或电流,或亮度等。相反少简单是游戏的货币侧 - 有一种货币之间进行转换的无数不同的方式和另一取决于日期,货币和周期在其转化率为有效。这是从物理单位分开处理。

从根本上说,我创建了一个表“措施”与“ID”栏,名称为单位,缩写,和一组尺寸指数的 - 每一个用于质量,长度,时间。这得到具有名称填充诸如 '体积'(长度= 3,质量= 0,时间= 0), '密度'(长度= 3,质量= -1,时间= 0) - 等

有是为单位的第二表,该表确定的度量,然后通过特定的测量中使用的实际单元。例如,有桶,和立方米,和各种相关的其它单元。

有是,定义的特定单位之间的转换系数的第三表。这包括两个单位和在这里,转换单元1至单元2的最大问题的乘法转换因子是换算因子的动态范围。如果从U1到U2的转化1.234E + 10,则该逆是一个相当小的数目(8.103727714749e-11)。

从美国洛特约温度下的评论是有趣的 - 我们没有处理这些。存储过程将已经解决了该 - 尽管整合一个存储过程到系统中可能是棘手的

我描述的方案允许一次描述的大多数转化(包括假想的单位,如每两星期,或小于假想但同样晦涩那些弗隆 - 在美国之外 - 像英亩 - 英尺),并且转换可以验证(为例如,在转换因子表两个单元必须具有相同的量度)。它可以扩展到处理大部分其他单位的 - 尽管无量纲的单位,如角(或立体角)提出了一些有趣的问题。有支持的代码,将处理任意转换 - 或产生错误时,转换不能支持。这个系统的原因之一是各国际附属公司将在其本地方便单位报告其数据,但HQ系统不得不接受的原始数据,并在适合的经理人单位目前不存在所产生的聚合数据 - 每个地方不同的管理者有他们自己的想法(根据本国的背景和在总部任职长度)有关他们的报道最好的单位。

其他提示

“文字让我担心有些因为有非唯一重复的可能性”

右。所以,不要使用文字作为重点。使用ID作为关键字。

“有没有做到这一点更优雅的方式?”

不是真的。这个很难(硬。温度是它自己的问题,因为温度本身就是一个平均值,并不像总结确实距离;加F到C转换不是乘(因为它是与每个其它单元的转换。)

转换相关的说明:很多单位是线性相关的,并且可以使用像公式被转化“Y = A + Bx的”,其中A和B为可以被存储在数据库中为每个对单位常数你需要之间的转换。例如,对于到摄氏华氏常数是A = 32,B = 1.8。

然而,也有少数例外。对数和非对数单位之间的转换,例如。或质量每体积和摩尔质量每体积之间进行转换(在这种情况下,你将需要知道的化合物的摩尔质量被测量)。

当然,如果你是确保所有系统所需的转换是线性的,那么就没有必要过度工程,只存储两个常量。然后,可以使用直SQL与计算字段加入从数据库中提取的标准化结果。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top