0

私のDBには、現在フロートデータがあります。すべての列は NULLABLE に設定されており、値が欠落している場合はそこに配置しNULLます。

私の DB は大きすぎます。値が 0 ~ 100 の範囲にあることがわかっている場合は、小数点以下 1 桁に丸めることができます。float を使用するとオーバーヘッドが発生するため、smallint を使用することを考えています (すべての float に 10 を掛けて、丸めた数値として格納します)。では、NULL価値観について。2 つのオプションがあります。

  1. まだ使うNULL

  2. 9999 などの「範囲外」の値を使用して表しNULLます (また、列に何も設定されていない場合は、この値をデフォルトにします)。ただし、クエリでは、これを行う必要があります。

    SELECT AVG(NULLIF(data, 9999)) AS data, ....

    ( を使用すると、値が計算されずに をNULL使用できます..)AVG(data)NULL

何を使うのが良いでしょう。それとももっと良いテクニックがありますか?

4

4 に答える 4

2

NULLすでに存在するのに、なぜ「独自の」機能を作ろうとするのでしょうか? あなたが説明したように、NULLs の使用法は正しく、完全に有効です。マジック ナンバーを人為的な NULL の代わりとして使用する利点はないと思います。エラーの可能性を導入するだけです。

TL;DR : を使用しNULLます。

于 2013-08-02T08:28:19.080 に答える
0

を使用しているときはNULL、この列を「なし」として設定することを意味し、2 番目のケースでは、列に を表す値を指定しますNULL

したがって、最初は列を設定していません。次に、それを示す値を設定しますNULL。それは、何をしたいかによって異なります。その列でデータベースにコミットしたい場合は、2 番目を使用しますNULL

于 2013-08-02T08:29:07.453 に答える