質問

はい、別のNULL対空の文字列の質問。

NULLは設定しないことを意味し、空の文字列は「空の値」を意味するという考えに同意します。私の問題は次のとおりです。列のデフォルト値がNULLの場合、ユーザーがそのNULLを入力できるようにするにはどうすればよいですか。

システムに新しいユーザーが作成されたとします。姓と名のフィールドがあります。姓は必須ですが、名は必須ではありません。ユーザーを作成するときに、最初と最後の2つのテキスト入力が表示されます。ユーザーは姓のみを入力することを選択します。名は技術的には設定されていません。挿入時に、各フィールドの長さをチェックし、空のすべてのフィールドをNULLに設定します。

データベースを見ると、名が設定されていないことがわかります。すぐに頭に浮かぶ疑問は、多分彼らは(エラーのために)名のフィールドを見たことがないということです。しかし、そうではありません。空白の場合は残ります。

だから、私の質問は、ユーザー入力を受信するときにフィールドをNULLまたは空の文字列に設定するタイミングをどのように決定するのですか?ユーザーがフォーカスを検出せずにフィールドを設定しないこと、または値を削除したかどうか、または...または...をしたいことをどのように知っていますか?

関連質問: NULLを使用すべきかまたはテーブル列にデータがないことを表す空の文字列?

役に立ちましたか?

解決

実際のデータを参照するときにNULLを使用することはほとんどありません。外部キーに使用する場合、NULLは有効であると言いますが、ユーザーが入力したデータに対してはほとんど有効ではありません。おそらく非常に定期的に発生する例外の1つは、「termination_date」という名前の従業員データベースなど、存在しない日付の場合です。フィールド。その場合、現在のすべての従業員はそのフィールドにNULLの値を持つ必要があります。実際にヌル値を入力するようにするために、本当にヌル値が必要な値については、入力フィールドの横にチェックボックスを配置して、ユーザーがオンとオフをチェックしてヌルに対応する値を表示できるようにします(またはよりユーザーフレンドリーな方法で、なし)。チェックボックスを有効にしてフィールドをnullに設定すると、対応するテキストボックスが無効になり、null値が既に関連付けられている場合、無効として開始され、ユーザーがnullチェックボックスをオフにしたときにのみ有効になります。

他のヒント

パターンを破り、次の理由から、長さゼロの文字列には常にNULLを使用すると言います。

  1. 空白の意味を細かく切り始める場合、他のすべての開発者が空白を同じように読み書きすることをどうにかして確認する必要があります。

  2. どのようにアルファベット順にしますか?

  3. 意図的に空白のままにするのと比較して、ユーザーが値の入力を省略した時期を明確に判断できますか?

  4. どのように違いを明確に照会しますか?クエリ画面のユーザーは、標準入力フォームの構文を使用してNULLと空白を指定できますか?

  5. 実際には、このルールを使用して、デフォルトの驚くべき動作を使用してデータを読み書きすることを禁止されたことはありません。違いを知る必要がある場合は、ブールフィールドを使用しました(明確なUIデバイスへのマッピングが簡単です)。 1つのケースでは、トリガーを使用してTrue =&gtを強制しました。 null値ですが、BRレイヤーが条件を効果的に除外したため、呼び出されることはありませんでした。

ユーザーが空の文字列を指定した場合、データベースの観点から常にnullとして扱います。さらに、通常、文字列入力をトリムして先頭/末尾のスペースを削除し、空をチェックします。 varchar()型を使用したデータベースでの小さな勝利であり、 name is nullまたはname = ''の代わりに name is null のみをチェックする必要があるため、検索のケースも減少します。 別の方法で、nullを ''に変換することもできます。いずれにしても、方法を選択して一貫性を保ってください。

あなたがする必要があるのは、あなたが望む振る舞いを把握することです。名前の文字列がどのように解釈されるかについての固定代数はありません。

ここでステートマシンについて考えてみてください。複数の状態を持つフィールドがあります。 3番目といくつかの設定値。その割り当てを行い、プログラムの残りの部分と一貫性のあるものを見つけることができます。簡単なマッピングのように聞こえます

NULL→初期化されていない
"" →意図的に設定解除
名前→初期化されました。

私は物事をシンプルにしようとしています。この場合、first-name列をnull不可にし、空白を許可します。それ以外の場合、このフィールドを参照するすべての場所に対処する3つのケースがあります。

  1. 空の名
  2. ヌル名
  3. 非空白の名

「blank is null」または「null is blank」を選択すると、2つのケースになります。 2つのケースの方が3つよりも優れています。

あなたの質問にさらに答えるために:データを入力するユーザーは、おそらく「null」が何であるかについて何も知らない(そして、すべきではない) 「空」と比較する方法です。この問題は、システムではなくUIできれいに一貫して解決する必要があります。

あなたの例は主に文字列用ですが、数値フィールドとブール値フィールドにはnullを使用すると言いたいです。 0のaccountbalanceは、nullであるため私とは大きく異なります。ブール値についても同じです。人々が真と偽の答えで多肢選択テストを行う場合、誰かが真か偽かを答えたか、まったく答えなかったかを知ることは非常に重要です。 これらの場合にnullを使用しないと、誰かが質問に答えたかどうかを確認するために、追加のテーブルまたは別のセットアップが必要になります。たとえば、falseの場合は0、trueの場合は1を入力しない場合は-1を使用できますが、基本的にブール値の場合は数値フィールドを使用します。

実稼働コードでNULL値を使用したことはありません。空の文字列は、空白の名前フィールド、電話番号、または任意のアプリケーションの年間収入に対する適切なセンチネル値です。そうは言っても、あなたはそれを使用できると確信していますが、使いすぎだと思います。ただし、NULL値を使用するように した場合、空の値を表す任意の場所で使用することを想像します。

初期化されていない値には常に NULL を使用し、意図的に空の値には empty を、オフインジケータには 0 を使用しました。

これを常に行うことで、使用していない場合でも存在しますが、その区別が必要な場合は別のことをする必要はありません。

通常、 empty()をテストしていますが、 NULL <で false を評価する isset()をチェックすることもあります/ code>。これは、リマインダーが特定の質問に答えるのに役立ちます。 empty false 、または 0 の場合、質問に回答します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top