私のアプリケーションでは、ユーザーがいくつかのエンジニアリングデータ(長さや重みなどの物理量)を計算しています。
現在、コア式は英語のシステムで機能し、想定していますが、ユーザーはEnglish
またはMetric
システムを選択して作業できます。英語を選択した場合、特別な準備は不要で、すべてがEnglish
。
しかし、ユーザーがMetric
を選択した場合、一貫性を保つために、入力と出力の2つの変換が行われます。現在使用している既存のアプリケーションは、両方のユニットにデータを保存しています。
私の質問は、データベースにどの値を保存するかについてです-英国単位を使用している値、またはメートル法を使用している変換された値?
さらに、これは答えが「コインを投げる」である種類の質問ですか、それとも他のものよりも明確な利点がありますか?
ユーザーがメトリックの使用を選択したときに発生する可能性があることの詳細
最初の変換後、計算エンジンは英語の単位系番号を計算し、データベースに保存する準備ができました。ここに2つの選択肢があります。
方法1-データベースにメトリックデータを保存(英語のデータも保存)
方法2-データベースへの英語データの保存(英語のみ)
別の可能性:
測定値テーブルではなく、ユーザーテーブルに測定単位設定を格納します。
すべてのメジャーデータを一貫した形式(英語またはメートル法)で保存します。ユーザーの好みに基づいて、必要に応じて変換を行います。
また、データをエクスポートする必要がある場合、すべての値が一貫した形式であると作業が簡単になります。
値とともに測定システムを保存することもできるので、それが何であるかを正確に知ることができます。次のようになります:
id |値|測定システム|単位 ------ + ----------- + --------------------- -+ ----------------- 1 | 11.3 | METRIC |メートル 2 | 0.653 |インペリアル|クォート
次に、このテーブルの上にビューを配置して、データの計算を実行し、ビューから選択したときにすべてが一致するようにしますが、ユーザーが入力したとおりに保存し、ユーザーが混乱しても混乱しないようにします。将来のコードを見て、それがどのように格納されているかを推測してみてください。
ストレージはどの程度正確ですか?固定小数点、浮動小数点、またはその他の集約タイプで保管しますか?インペリアル測定は、単なる分数ではありません。それらは、分母に共通の値を持つ分数です。これらの分母は通常2の累乗です(1/2、1/4、1/8など)。インペリアル測定値を2つのinteger
sとして保存し、そのうちの1つをshort
にすることができます。 short
は分母で、もう1つは乗数/分子です。したがって、データベースレコードには、これら2つのフィールドに加えて、「カップ」や「マイル」などの単位があります。入力がインペリアルのみである可能性が高い場合は、測定値をdoubleなどのより大きな10進数型の単一フィールドとして保存するよりも、スペースを節約できる可能性があります。
あなたが試すことができます;
https://github.com/gnapse/metric
また、値を英語のテキストとして保持できます。
更新:別のライブラリ:
github.com/lahma/PhysicalMeasure