1. ホーム
  2. データベース
  3. mssql2005

sql server null を設定するためのいくつかの提案

2022-01-09 04:27:17

テーブルを設計する際、フィールドにNull値を許可するかどうかで議論になることがあります。

データベースの魔術師、Kalen Delaneyがちょっとしたアドバイスをしています。

1, ユーザーテーブルでNULL値を許さない
2, ユーザー・テーブルの定義にNOT NULL制約を含める
3, NULL値の動作を制御するためにデータベースのプロパティに依存しないこと

<スパン 1点目について もしNULLが許されるなら、私たちにとってどんな意味があるのか、逆に言ってみましょう。

1、SQLは、NULL値を許容するカラムが実際にどのカラムに格納されているかを示すために、各行に特別なビットマップを設定します。もしNULLであれば、SQL Serverは各行にアクセスする際にこのビットマップをデコードしなければなりません。
2, NULLを許可すると、アプリケーションのコードも複雑になり、常にこのNULL値を処理するための特別なロジックが追加されるため、しばしばバグが発生するようになります。

<スパン 2点目 NULLは許可されていない場合は、NULLを許可しない列にいくつかのデフォルト値を含めるには、まだデフォルト値を追加していない、表示列の不在で挿入、それはINSERT、SQL Serverのデフォルトの失敗が発生します挿入NULLが表示されていない列。

最後のポイント 最後のポイントは、NULL値の比較に関連することです。IS NULL、IS NOT NULLで比較するのか、それとも=、<>で比較するのか、迷うところです。データベースオプションのANSI NULLSを変更することはできませんが(私たちの多くはDBAではありません)、データベースオプションのANSI NULLSと同等のセッション設定SET ANSI_NULLSを使用することができます。このオプションが真の場合、NULL値との比較はすべてFALSEになり、コードはIS NULL条件を使用しなければなりません。 このオプションが偽の場合、比較する値が両方ともNULLであれば、結果はTRUEになり、SQL ServerではIS NULLの同義語として=NULL、IS NOT NULLの同義語として <> NULLが認められています。

このオプションを忘れた場合は、IS NULLでNULLを判定し、IS NOT NULLで非NULLを判定することをお勧めします。

テストは以下の通りです。

t3テーブルには、このように2行のデータしかありません。


SET ANSI_NULLS OFFの場合。

SET ANSI_NULLS ONの場合

要約すると、最適なアプローチということになります。 テーブルを設計する際、フィールドにNULLを許さず、デフォルト値を付けること .