4

問題:

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

質問:

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

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

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

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

4

3 に答える 3

4

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

基本的に、「id」列、単位の名前、略語、および一連のディメンション指数(質量、長さ、時間ごとに1つずつ)を含むテーブル「メジャー」を作成しました。これには、「体積」(長さ= 3、質量= 0、時間= 0)、「密度」(長さ= 3、質量= -1、時間= 0)などの名前が入力されます。

単位の2番目の表があり、メジャーを識別してから、特定の測定で使用された実際の単位を識別しました。たとえば、樽、立方メートル、およびその他のあらゆる種類の関連単位がありました。

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

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

私が説明したスキームでは、ほとんどの変換を1回記述でき(2週間あたりのハロンなどの仮想単位、または仮想的ではないが同様にあいまいな単位(米国外ではエーカーフィートなど)を含む)、変換を検証できます(たとえば、両方換算係数テーブルの単位は同じ測定値である必要がありました)。他のほとんどの単位を処理するように拡張できますが、角度(または立体角)などの無次元単位にはいくつかの興味深い問題があります。任意の変換を処理するサポートコードがありました-または、変換がサポートされなかったときにエラーを生成します。このシステムの理由の1つは、さまざまな国際的な関連会社が、現地の便利な単位でデータを報告することでした。

于 2009-08-03T22:11:46.537 に答える
0

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

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

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

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

于 2009-08-03T21:51:30.603 に答える
0

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

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

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

于 2009-09-20T01:12:58.867 に答える