web-dev-qa-db-ja.com

人の名前がNullの場合、データベースはどのように破壊されますか?

私はBBCの this 記事を読んでいました。ジェニファーヌルという人物の物語と、飛行機のチケットの予約、ネットバンキングなどのオンラインデータベースを使用しているときに、彼女が日々の問題にどのように直面しているかを説明しています。

私はデータベースに精通しておらず、あまり使用していません。学習用のWebサイトを作成したとき、サーバー側のフォーム検証では正規表現を使用していました。私が覚えていることから、それは「Null」という名前を喜んで受け入れます。私はそれを試していません。

この状況が発生するとき、誰かが専門性を説明できますか?フォーム検証はstring == NULL か何か?それでも私は思いませんNULL is same as "NULL"

55
Souradeep Nanda

Null列の文字列として「null」を返すデータベースインターフェイス(フレームワークライブラリなど)を見てきました。デバッグのためにこれをオンまたはオフにするフラグがあったと思います。このフラグにより​​、開発者は空のフィールドがnull値または空の値の結果であるかどうかを簡単に判断できます。これは、特に本番環境では不適切な設定であり、記事で説明されている問題を説明します。

「null」をnull値に変換する逆の処理では、名前フィールドのアプリケーションエラーが生成されます。これはかなり迅速に解決されると思います。

42
BillThor

あなたの混乱のかなりの部分がジャーナリストのものから生じる可能性が高いです。この記事では、データベースだけでなく、アプリケーションシステム全体の使用に関する問題について説明しています。これは大量消費を目的とした執筆であるので完全に合理的ですが、技術的な詳細は著者によって見落とされているか誤解されています。

これらの問題の多くは、DBのAPIではなく、アプリケーション層で発生する可能性があります。魔法の価値観は、業界から追い払うのが途方もなく難しいアンチパターンです。非常に簡単に、一部のプログラマーは「誰かが「null」と入力した?値がないことを意味するに違いありません。それがnullの意味だからです!」 SQLインジェクションを防止するための誤った試みは、Nullの言及された誤用、または標準のSQL文字列区切り文字でもある一重引用符を含むハワイの姓の原因である可能性もあります。

これらの値を誤ってNULLまたは空の文字列に変換するアプリケーションは、ビジネスロジックまたはDBの制約が異なるものを予期している場合、簡単にエラーを発生させる可能性があります。これは当然のことながら、記事で説明されているイライラするユーザーエクスペリエンスをもたらします。

25

記事自体には、問題を示す Stack Overflow question へのリンクが含まれています。それはコードが次のようなFlexアプリケーションにありました:

currentChild.appendChild("Fred");

word Fredを含む要素をXMLドキュメントに追加しますが、コードは次のとおりです。

currentChild.appendChild("null");

「null」というテキストを含む要素ではなく、空の要素を追加します。

XML自体は、text値「NULL」に問題がないため、そのようなテキストを含めても問題はありません。実際、NULLはXMLでは特別な意味を持ちません。

19
Dour High Arch

私が言及したことを私が見たとは思わない1つのこと:SQLについて話しているだけではありません。

名前はデータベースで開始/終了する可能性があります...しかし、そこに到達するには通常、複数のチャネルが関係します。データベース、Sql、php、html、javascript ... Java、C#、VB、Perl、Phython、Ruby、bash、batchなどなど...

パイプラインのこれらの各ステップでは、データをある形式から別の形式に変換する必要があります。 SQLテーブルから、json、xml、CSVなどへ...

この複雑なチェーンのどの時点でも、問題のあるプログラミングまたはファジープログラミング言語(JavaScript null処理 など)を1箇所だけ取得します...

したがって、データベースに存在する問題に限定しないでください。「スタック」のどこにでも存在する可能性があるためです。

13
WernerCD

この人気のある質問のコメントとして元々残っていたさまざまなリンクに対するコミュニティWikiの回答

8
Paul White 9

リレーショナルデータベースは、欠損値または無関係な値に対応する必要があります。たとえば、顧客のリストに携帯電話番号や性別を含めることができます。企業が顧客になりたい場合はどうすればよいですか-それはどのような性別を持つべきですか?

値がないことを示すために特別なインジケーターが使用されます。この特別なフラグはNULLです。そのため、ずさんなプログラミングにより、欠損値インジケータ-NULL-がJennifer Nullの姓と混同され、おそらく実際の値ではなく欠損値として彼女の姓が解釈される可能性があります。

銀行口座を開設するのに少し似ていますが、お金を預けません。残高はゼロです。これは、バランスが取れていないという意味ではありません。残高があり、その値は「0」です。しかし、ずさんなプログラミングは、ゼロを「存在しない」と誤って解釈し、アカウントがまったくないと判断する可能性があります。

4
Michael Green

Nullという名前の誰かとは奇妙に振る舞う、不十分に書かれたソフトウェアやフレームワークさえもたくさんあります。

しかし、人間の要素を忘れないでください。おそらく、人間が画面やプリントアウトで名前を見て、それを間違いだと思って、人を削除することも、おそらく別の原因でしょうか。

2
MGOwen