質問

問題:

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

質問:

寸法の整合性が維持されるように、同様のデータベースを構築した人はいますか?提案がありますか?

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

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

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

役に立ちましたか?

解決

1年前にユニットを処理するためのデータベースサブスキーマを作成しました(ただし、少し誇張しますが、約20年前です)。幸いなことに、温度、電流、光度などではなく、単純な質量、長さ、時間ディメンションのみを処理する必要がありました。ゲームの通貨側はそれほど単純ではありませんでした-1つの通貨間で変換する無数の異なる方法がありましたもう1つは、変換率が有効だった日付、通貨、および期間によって異なります。これは物理ユニットとは別に処理されました。

基本的に、「id」列、単位の名前、略語、および一連の次元指数(質量、長さ、時間ごとに1つ)を含むテーブル「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つは、さまざまな国際関連会社がローカルに便利な単位でデータを報告することでしたが、HQシステムは元のデータを受け入れ、それでもマネージャーに適した単位で結果の集約データを提示する必要がありました。彼らのレポートに最適なユニットについて、独自のアイデアを持ちました(本社での国家的背景と職務期間に基づく)。

他のヒント

"テキストは、一意ではない重複の可能性があるため、多少心配しています。

そうです。したがって、テキストをキーとして使用しないでください。 IDをキーとして使用します。

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

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

変換に関する注意:多くの単位は線形に関連しており、「y = A + Bx」などの式を使用して変換できます。ここで、AとBは定数で、変換する必要がある単位。たとえば、摂氏から華氏への定数は、A = 32、B = 1.8です。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top