質問: データベースのint型項目にnullはng? 以前、知り合いからデータベースのint型の項目には出来ればnullを許可しない(not null)方がいいと聞いたことがあるのですが、本当でしょうか? 現在不動産の物件データを登録するためのシステムを作成しており、 データベースの設計を行なっている最中なのですが、 例えば金額や面積など数字しか入力されない項目はint型にしたいと考えています。 ※データベースはmysqlになります。 ただし、 物件データ登録時に数字項目に何も入力されなければ「null」、 0以上の数値を入力されている場合にはそのままその数値をデータベースに登録したいと考えています。 ※0を入力されている場合には「0」をそのまま入れたいです。 int型の項目にはnullを入れるのを避けた方がいい場合には、0を入れるような仕様に変更しようと考えているのですが、その辺のことについて教えて頂けると助かります。 ざっくりとした質問で申し訳ございませんが、宜しくお願い致します。
回答: 物件データ登録時に数字項目に何も入力されなければ「null」、0を入力されている場合には「0」 本来の意図としては正しいはずです。 nullは本来、どの値を入れればいいのかわからない値ということなので、 数字がわからない=何も入力していない ということで、nullを指定するのは正しいはずです。 しかし、 実際に使うときには、nullは実に不自由なので、 nullは使うなという話がでてきます。 ## 私なら、入力区分 0=未入力、1=入力 と 数値(未入力は0)と別々に持つかもしれません。 というのは例えば、 金額 100万以上の物件は何件? というsqlに対して、100件と答えがでて、 金額 100万未満の物件は何件? というsqlに対して、50件と答えがでたとします。 じゃあ、全物件は?・・・172件だったりします。 何故?⇒nullが22件だったためです。 (nullは0とは違い、どちらの検索条件にも含まれません。) ・・・この不自由さを回避するために数値項目に、not null制約をつけることが多いです。