web-dev-qa-db-ja.com

データにメートル法と英語の単位を使用するアプリケーションを再設計するとき、データベースにデータを保存するにはどうすればよいですか?

私のアプリケーションでは、ユーザーがいくつかのエンジニアリングデータ(長さや重みなどの物理量)を計算しています。

現在、コア式は英語のシステムで機能し、想定していますが、ユーザーはEnglishまたはMetricシステムを選択して作業できます。英語を選択した場合、特別な準備は不要で、すべてがEnglish

しかし、ユーザーがMetricを選択した場合、一貫性を保つために、入力と出力の2つの変換が行われます。現在使用している既存のアプリケーションは、両方のユニットにデータを保存しています。

私の質問は、データベースにどの値を保存するかについてです-英国単位を使用している値、またはメートル法を使用している変換された値?

さらに、これは答えが「コインを投げる」である種類の質問ですか、それとも他のものよりも明確な利点がありますか?

ユーザーがメトリックの使用を選択したときに発生する可能性があることの詳細

最初の変換後、計算エンジンは英語の単位系番号を計算し、データベースに保存する準備ができました。ここに2つの選択肢があります。

方法1-データベースにメトリックデータを保存(英語のデータも保存)

  1. 必要に応じて、データをメートル法システムに変換し、データベースに格納します(データはメートル法の単位であることに注意してください)。英語のデータをそのままデータベースに保存し、英語としてマーク
  2. データを表示するとき、変換は必要ありません

方法2-データベースへの英語データの保存(英語のみ)

  1. 英語のシステムを使用してデータを変換、保存しないでください(ただし、データは英語の単位であることに注意してください)
  2. データを表示するときに、ユーザーの要求に応じて、表示用にメトリックに変換します。
4
Dennis

別の可能性:

測定値テーブルではなく、ユーザーテーブルに測定単位設定を格納します。

すべてのメジャーデータを一貫した形式(英語またはメートル法)で保存します。ユーザーの好みに基づいて、必要に応じて変換を行います。

また、データをエクスポートする必要がある場合、すべての値が一貫した形式であると作業が簡単になります。

6
Jon Raynor

値とともに測定システムを保存することもできるので、それが何であるかを正確に知ることができます。次のようになります:

 id |値|測定システム|単位
 ------ + ----------- + --------------------- -+ ----------------- 
 1 | 11.3 | METRIC |メートル
 2 | 0.653 |インペリアル|クォート

次に、このテーブルの上にビューを配置して、データの計算を実行し、ビューから選択したときにすべてが一致するようにしますが、ユーザーが入力したとおりに保存し、ユーザーが混乱しても混乱しないようにします。将来のコードを見て、それがどのように格納されているかを推測してみてください。

ストレージはどの程度正確ですか?固定小数点、浮動小数点、またはその他の集約タイプで保管しますか?インペリアル測定は、単なる分数ではありません。それらは、分母に共通の値を持つ分数です。これらの分母は通常2の累乗です(1/2、1/4、1/8など)。インペリアル測定値を2つのintegersとして保存し、そのうちの1つをshortにすることができます。 shortは分母で、もう1つは乗数/分子です。したがって、データベースレコードには、これら2つのフィールドに加えて、「カップ」や「マイル」などの単位があります。入力がインペリアルのみである可能性が高い場合は、測定値をdoubleなどのより大きな10進数型の単一フィールドとして保存するよりも、スペースを節約できる可能性があります。

0
Greg

あなたが試すことができます;

https://github.com/gnapse/metric

また、値を英語のテキストとして保持できます。

更新:別のライブラリ:

github.com/lahma/PhysicalMeasure

0
myuce