私はCSの学生として、長年にわたってまともな数のプログラミング言語を学びました。そのほとんどは、「null可能」または「オプション」タイプの概念を持っています。ここでは、nullポインターや参照、JavaScriptのような弱く型付けされた言語については触れていませんnull
。私が話していることの例には、boost::optional
(C ++)、java.util.Optional
(Java 8.0)、prelude.Maybe
(Haskell)、およびすべての「?」種類(例えばint?
、float?
、C#やKotlin)。これらは、厳密な静的型システム内で、以前はnullにすることができなかった型にnullの可能性を追加する構成体です。
SQLにも同様の概念があります。たとえば、INTEGER
null可能またはnull不可にできるような型ですが、ひねりがあります。SQLでは、INTEGER
デフォルトでnull可能であり、null INTEGER NOT NULL
不可になるように明示的に記述する必要があります。
NULLをデフォルトの動作にすることを許可することは非常に直観に反し、潜在的に危険であると私は思います。明らかに、SQLはこの時点で非常に長い間存在しており、(ほとんどの)SQL開発者はNULLの落とし穴について健全な認識を築いています。しかし、私は仕方がないのですが、初期の頃、NULLが予期せず問題のある場所に忍び込んでいたことを想像してみてください。
SQLは私が提供したすべての例よりも古いため、これは単に歴史的な進化の問題である可能性があります。それでも、私は尋ねなければなりません、言語がこのように設計され、型がデフォルトでnull可能であるという正当な理由はありますか?
もしそうなら、それは単なる歴史的な理由でしょうか、それとも今日のデータベース設計にロジックは耐えますか?
編集:なぜNULLがSQLの一部であるのか、またはNULL可能列がなぜ有用なのかは尋ねていません。列がデフォルトで null可能である理由を尋ねています。たとえば、次のように書くのはなぜですか。
column1 FLOAT,
column2 FLOAT NOT NULL
のではなく:
column1 FLOAT NULLABLE,
column2 FLOAT