4

ほとんどの属性に単位があるデータベーステーブルを設計する必要があります。例えば:

Readings
--------

id   load (kW)   fuel_consumption (tonnes) - etc
1    1154        89.4
2    1199        54.2

デザインでユニットをキャプチャするための推奨される方法は何ですか?たとえば、次のことができます。

  • load_kWやfuel_consumption_tonnesなどの属性名内にユニットを格納します
  • ユニットを個別のテーブルに格納します。たとえば、各値は、値とユニットの列を持つ別のテーブルへの外部キーになります。
  • データベースの外部に保存します。たとえば、ビジネスロジックやドキュメントに保存します。
  • 他にありますか?

私はたまたまMySQLを使用していますが、これは一般的なデータベースの正規化の問題だと思います。

4

2 に答える 2

2

それは最終的にあなたがあなたの量で何をしようとしているのか、あるいは何をする必要があるのか​​に依存します。

(まれに)後で逆流するために値を記録するだけの場合、スカラー値はモデルにとって意味的な意味を持たないため、ユニットで何をするかは実際には重要ではありません。

システム内のスカラーがシステムにとって重要である可能性がはるかに高くなります。これは、たとえば、それらに対して計算を実行していることが原因である可能性があります。そのような場合、あなたのユニットは非常に重要です。

あなたがあなた自身のために答える必要がある次の質問は、単位が常に一貫していて、変更されることを許されてはならないかどうかです。ほとんどの場合、これは危険な結論だと思います。システムを通じて課すビジネスルールかもしれませんが、ビジネスルールには変更するという厄介な習慣があります。

このため、実際の測定値を表すすべてのスカラーで測定単位を保存することをお勧めします。このように明示的にすることは、少しのディスクスペースを必要としますが、それはあなたに明快さと柔軟性を与えます。

私が過去に行ったことは、測定単位モデルを拡張して、長さ、温度、体積、時間などの単位タイプを含めることです。各単位を単位タイプにマップするテーブルを保持すると、変換係数も保存できます。 。そうすれば、誰かがBHPとポンドの読み取り値を持ってあなたのところに来た場合、それをどうするか、そしてそれをkWとトンの典型的なエントリと比較する方法を知っているでしょう。

于 2012-10-25T14:12:10.467 に答える
1

興味深い質問...

2つの明白なルートがあります:

id   load_kW     fuel_consumption_tonnes
--------------------------------------------------
1    1154        89.4
2    1199        54.2

これは人間にとって読みやすく、かなり論理的です。ただし、一部の測定値が「キロ」で、他の測定値が「トン」である場合は、それらの測定値を「測定値」テーブルに収まるように変換する必要があります。このプロセスは「ロスレス」で、べき等でなければなりません。たとえば、企業が便宜上キロからトンに丸めることを選択したとしても、「89403キロ」の読み取り値は「89.4トン」ではありません。通常、直感に反する丸めが発生します...

その場合は、スキーマを変更できます。

id      load load_unit    fuel_consumption fuel_consumption_unit
--------------------------------------------------
1    1154  kW          89403              kg
2    1199  kW          54.2               t

「ユニット」テーブルを使用する場合、必要に応じて次のようにします。

unit_id    unit_name
--------------------
kg         kilogramme
t          Tonne

ただし、このモデルは人為的エラーにさらされています。「load」列を変更せずに「load_unit」列を変更するのは簡単で、データが破損します。これを回避するためにデータモデルに対して実際にできることは何もありません。また、一般的なクエリはかなりトリッキーになります。一貫した測定単位で「負荷」の合計を取得しようとすることを想像してみてください。

この場合、2つのテーブルを用意することをお勧めします。上記の形式の元のデータを含む「raw_readings」と、すべての読み取り値を一貫した測定単位に変換して入力する「normalized_readings」です。

于 2012-10-25T15:22:13.793 に答える