アカウント名:
パスワード:
Allow col IS NULL to use an index
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「毎々お世話になっております。仕様書を頂きたく。」「拝承」 -- ある会社の日常
他にもうれしい部分 (スコア:3, 参考になる)
まぁ、今回は8.1→8.2以上に変更点が多いとどこぞで聞いた記憶もあるので、移行には十分なテストが必要でしょうけど。
# 追跡していたのにリリースに気づいてなく、タレコミに先を越されたので悔しいからID
Re: (スコア:1, 興味深い)
元々SQLのNULLは、データ無しとか未入力とかいう意味じゃなく、
データが有るか無いかすら「不明」って意味だ。
(だから大抵の式(関数や演算子)にNULLを1つでも食わすと式全体の値がNULLになる。
不明を1つでも食わせりゃ全体が不明に汚染されるってことだ。)
一方「不明」なんてな状態を許す必要が有るカラムは
現実的にはそう多いわけでもない。
実際に欲しいのは「不明」ではなく「なし」や「未入力」のほうだということが多い。
(そういう意味では、NULLのときindexが効かないという制限をRDBが持つのはそれなりに合理的)
なのにSQLには「なし」「未入力」を表す合理的な道具が無
Re: (スコア:3, 興味深い)
元々も何も極初期のSQLにはnullなんてものはなかったはずだが。徹底的に正規化すれば「なし」に相当する値が必要になることはありません。存在しないデータは最初からDBに入れなければよいだけです。例えばユーザ表にIDとユーザ名と生年月日のカラムがあって、生年月日未入力がありえるなら、単にそれをユーザ名表とユーザ生年月日表に分ければよろしい。
そうしないで生年月日カラムにnullを入れるなら、それは単にパフォーマンスチューニングのために正規化をくずしているということなので、それなら効率化のためなら何でも遠慮なくできた方がいいでしょう。
Re:他にもうれしい部分 (スコア:0)
>元々も何も極初期のSQLにはnullなんてものはなかったはずだが。
>徹底的に正規化すれば「なし」に相当する値が必要になることはありません。
#私がいった「元々」はNULLの仕様についてであって、NULLの出自についてではありません。
それはそうとそれは興味深い話ですね。
SQLにとっての極初期つまり数十年も前においては、(マシンが弱かったため)今よりも遥かに追いにくかったであろう理想を、プログラマに要求する言語仕様だったわけですか。
えらくバランスの悪い言語だったんですね。
さて。
パフォーマンスのことは(特に現代では)置いといてもいい、としましょう。
でも、確かに「テーブルの」定義はそれで丸く収まるのですが、
任意の「Query」の、
特に「外部結合」の、
検索結果はどうなっちゃうのかが疑問です。
というのはNULLが表現不可能だとすると、
外部結合で「該当なし」だったときの検索結果が、
(RDBの流儀の範囲内では)表現不能になってしまうので。
#というか前述の原理原則を考えると、外部結合で該当なしのときはそれこそNULL(不明)ではなく「データなし(だと判ってる)」で表現してもらわないと困るはずなのに、実際の表現はNULLなのね。やっぱりSQLは歪んでいるorz
まさか(学者たる)Codd様が外部結合におけるNULLというか「なし」の必要性を理解してなかったとも思えないのですが…?
…おやおや?
http://ja.wikipedia.org/wiki/%E3%82%A8%E3%83%89%E3%82%AC%E3%83%BC%E3%8... [wikipedia.org]
>彼のキャンペーンはSQL言語にもおよび、コッドはこれを彼の理論の間違った実装であるとした。
なるほど。SQLが上記のようにオカシイのは、Coddさまのせいではなかったわけですか。