人の名前がNullの場合、どのようにデータベースが破損しますか?


55

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

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

この状況が発生する場合、誰かが技術を説明できますか?フォームの検証は単にやっているstring == NULLことですか?それでも私は考えていないNULL is same as "NULL"


32
記事は明らかにジャーナリストによって書かれました。ヌルは多くの混乱の原因であり、ジャーナリストの混乱が少ないとは思わないでしょう。
ypercubeᵀᴹ

2
みんな:へのリンクコメント関連の質問や物品をされているに移動コミュニティのWikiの答え以下。このページにリンクを追加する代わりに、その回答を編集(または編集を提案)してください。
ポールホワイト

回答:


42

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

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


確かに-これは、すべてのデータが文字列に変換される型指定されていない言語のフレームワークでは非常に一般的です。作業を始めてから数年が経ちましたが、たとえば、ColdFusionの初期バージョンにはこの問題があったと思います。
ジュール

25

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

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

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


5
オブライアンがハワイ人だとは知りませんでした。
glglgl

19

記事自体には、問題を示すStack Overflow質問へのリンクが含まれています。コードが以下のFlexアプリケーションにありました。

currentChild.appendChild("Fred");

単語Fredを含む要素をXMLドキュメントに追加しますが、コードは次のようになります。

currentChild.appendChild("null");

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

XML自体は、テキスト値 "NULL"に問題はないため、このようなテキストを含めても問題はありません。実際、NULLXMLには特別な意味はありません。


13

私が言及したとは思わないことの1つは、SQLについて話しているだけではないということです。

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

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

この複雑なチェーンのどの時点でも、悪いプログラミングやファジーなプログラミング言語(Javascriptのnull処理など)を1箇所しか取りません。

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


8

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


4

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

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

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


2

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

しかし、人間の要素を忘れないでください。おそらく、人間は画面や印刷物で名前を見て、それが間違いだと思って、その人を削除することも別の原因になるでしょうか?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.