2009-08-03 10 views
3

問題:SQLデータベースの次元および単位解析

さまざまな測定値の時系列データを格納するリレーショナルデータベース(Postgres)。各測定値は、特定の「測定タイプ」(例えば、温度、溶存酸素など)を有することができ、特定の「測定単位」(例えば華氏/摂氏/ケルビン、パーセント/ミリリットル/リットルなど)を有することができる。

質問:

は、誰もが次元の整合性が保存されていることを、このような類似したデータベースを構築していますか?提案はありますか?

measurement_typeとmeasurement_unitテーブルを作成することを検討していますが、これらの両方にIDとテキストの2つの列があります。次に、これらのテーブルの外部キーをmeasured_valueテーブルに作成します。テキストは、一意でない重複の可能性があるため、多少心配です(たとえば、1マイクログラム/リットルの場合は「μg/ l」と「μg/ l」)。

この目的は、クエリでユニットを変換して検証することも、外部からプログラミングすることもできます。理想的には、後で、厳密な次元分析(例えばμg/ lを 'M/V'(質量を体積で割った値)に結び付ける)を含めることができるだろう。

これを達成するためのよりエレガントな方法がありますか?

答えて

4

私は前にユニットを処理するためにデータベースのサブスキーマを作成しました。(大丈夫です。 、しかし)。幸運なことに、温度、電流、光度などではなく、単純な質量、長さ、時間の次元しか扱わなくてはなりませんでした。ゲームの通貨面はむしろ単純ではありませんでした。また、日付、通貨、およびコンバージョン率が有効であった期間に応じて別のものがあります。それは物理的な単位とは別に処理されました。

基本的に、「id」列、単位の名前、省略形、および次元、指数のセット(質量、長さ、時間のそれぞれ)を持つテーブル 'measures'を作成しました。これには、 '音量'(長さ= 3、質量= 0、時間= 0)、密度(長さ= 3、質量= -1、時間= 0)などの名前が入力されます。

測定値を特定し、特定の測定値によって使用された実際の単位を識別する2番目の単位テーブルがありました。たとえば、バレル、立方メートル、その他のあらゆる種類の関連性があります。

特定の単位間に換算係数を定義した第3のテーブルがありました。これは、2つのユニットとユニット1をユニット2に変換する倍数変換係数で構成されています。ここで最大の問題は、変換係数のダイナミックレンジです。 U1からU2への変換が1.234E + 10である場合、その逆数はかなり小さい(8.103727714749e-11)。

温度についてのS.Lottからのコメントは興味深い - 私たちはそれらに対処する必要はなかった。ストアドプロシージャを使用すると、1つのストアドプロシージャをシステムに統合するのが難しいかもしれませんが、それに対処していました。

私が記述したスキームでは、ほとんどの変換を一度記述することができました(2週間に1つのフルロンを仮定したり、仮説的ではありませんが、米国のようなエーカーフットのような仮説を含む)たとえば、換算係数表の両方の単位に同じ尺度を設定する必要があります)。それは、他のユニットのほとんどを扱うように拡張することができます - 角度(または立体角)のような次元のない単位はいくつか興味深い問題を呈します。任意のコンバージョンを処理するサポートコードがありました。あるいは、変換がサポートできないときにエラーが発生しました。このシステムの1つの理由は、さまざまな国際系列会社がローカルの便利なユニットでデータを報告するということでしたが、HQシステムは元のデータを受け入れなければならず、結果として集計されたデータをマネージャに適したユニット彼らのレポートのための最良のユニットについての彼ら自身のアイデアを持っていた(彼らの国家の背景と本部の長さに基づいて)。

0

「非ユニーク重複の可能性がありますので、テキストは多少私を心配します」。テキストをキーとして使用しないでください。 IDをキーとして使用します。

「これを実現するよりエレガントな方法はありますか?」

それは難しい。温度はそれ自身の問題です。温度はそれ自体が平均であり、距離のようには足りません。さらにFからCへの変換は乗算ではありません。(それは他のすべての単位変換と同じように)

0

変換についての注意:多くの単位は線形関係にあり、「y = A + Bx」のような式を使って変換できます。ここで、AとBはそれぞれのペアでデータベースに格納できる定数です単位を変換する必要があります。例えば、摂氏から華氏への定数は、A = 32、B = 1.8です。

しかし、まれな例外もあります。例えば、対数単位と非対数単位の間の変換。体積あたりの質量と体積あたりのモル質量の間の変換(この場合、測定される化合物のモル質量を知る必要があります)。

もちろん、システムで必要とされるすべての変換が線形であることが確かであれば、過剰なエンジニアリングの必要はなく、2つの定数を格納するだけです。計算されたフィールドとの直接のSQL結合を使用して、データベースから標準化された結果を抽出できます。

関連する問題