
以前、知り合いからデータベースのINT型の項目には出来ればNULLを許可しない(NOT NULL)方がいいと聞いたことがあるのですが、本当でしょうか?
現在不動産の物件データを登録するためのシステムを作成しており、
データベースの設計を行なっている最中なのですが、
例えば金額や面積など数字しか入力されない項目はINT型にしたいと考えています。
※データベースはMySQLになります。
ただし、
物件データ登録時に数字項目に何も入力されなければ「NULL」、
0以上の数値を入力されている場合にはそのままその数値をデータベースに登録したいと考えています。
※0を入力されている場合には「0」をそのまま入れたいです。
INT型の項目にはNULLを入れるのを避けた方がいい場合には、0を入れるような仕様に変更しようと考えているのですが、その辺のことについて教えて頂けると助かります。
ざっくりとした質問で申し訳ございませんが、宜しくお願い致します。
No.3ベストアンサー
- 回答日時:
物件データ登録時に数字項目に何も入力されなければ「NULL」、0を入力されている場合には「0」
本来の意図としては正しいはずです。
Nullは本来、どの値を入れればいいのかわからない値ということなので、
数字がわからない=何も入力していない ということで、Nullを指定するのは正しいはずです。
しかし、
実際に使うときには、Nullは実に不自由なので、
Nullは使うなという話がでてきます。
## 私なら、入力区分 0=未入力、1=入力 と 数値(未入力は0)と別々に持つかもしれません。
というのは例えば、
金額 100万以上の物件は何件?
というSQLに対して、100件と答えがでて、
金額 100万未満の物件は何件?
というSQLに対して、50件と答えがでたとします。
じゃあ、全物件は?・・・172件だったりします。
何故?⇒Nullが22件だったためです。
(Nullは0とは違い、どちらの検索条件にも含まれません。)
・・・この不自由さを回避するために数値項目に、Not Null制約をつけることが多いです。
まさによく似た現象が発生して、一度お客さんから連絡を受けたことがありました。
お客さんが数値項目に敢えて「0」を入れられる可能性もあるのでNULLを入れるかどうか迷っていたのですが、
確かに、
>> 入力区分 0=未入力、1=入力
という項目を持たせると数値項目未入力の場合でも、データベースにはNULLではなく0を入れられますね。
非常に参考になりました。
ありがとうございます。
No.4
- 回答日時:
int型項目に限らず、極力nullは避けた方が無難です。
nullを含んだテーブルの検索は、しばしば直感に反した動作をします。
詳しくは下記のページを見て下さい。
http://codezine.jp/article/detail/532?p=1
http://www.geocities.jp/mickindex/database/db_ge …
参考URLのページを見てみると、やはりNULLは極力避けた方が良さそうですね。
確かにプログラムを組んでいる時に、NULLが悪さをして困ったこともありました。
ありがとうございます。
No.2
- 回答日時:
NULLはその項目のデータが存在しない意味ですので、SQLの結果が思わぬ誤動作やプログラム上のミス(たとえば空白とNULLを表示上どう区別するのか)の原因になる場合があります、どうしてもNULLが必要な場合を除きどの型においてもNOT NULLを宣言し、使わない事をお勧めします。
尚、INTには最大値と最小値があるので、INTを使用する場合は値が範囲に確実に入るかを確認する必要があります。確かにユーザー側にデータを表示させる時に、空白とNULLをどのように区別すればいいのか、悩むことが起こりそうですね。
ありがとうございます。
No.1
- 回答日時:
データ効率化のためにはNOT NULLにした方がいいですね。
たとえば件数カウントや平均をとったりする際は
NULLを許可した方がすっきりしたSQLがかける場合もあります。
個人的には特殊なケースを除きテーブル作成時はNOT NULLにしています。
確かにNULLが入っていることを意識してSQLを書くと複雑になる場合もあるので、NOT NULLの方がいいですね。
ありがとうございます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
int型フィールドにnullを登録できない・・・
MySQL
-
日付型のフィールドに空白を入れる方法を教えてください
その他(データベース)
-
Integer変数をカラにしたいのですが
Visual Basic(VBA)
-
4
テーブルに主キーを作らないデメリットは?
その他(Microsoft Office)
-
5
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
6
【SQL】他テーブルに含まれる値に合致する行を抽出
その他(データベース)
-
7
SQL文のwhere条件文で使う <> の意味はなんですか
その他(データベース)
-
8
GROUP BYを行った後に結合したい。
Oracle
-
9
テーブルタグの中にdivを含めてはダメ?
HTML・CSS
-
10
SELECT 文 GROUP での1件目を取得
SQL Server
-
11
SELECT INTOで一度に複数の変数へ代入をするにはどのようにすれがよいでしょうか?
PostgreSQL
-
12
postgreSQLのint型は桁数指定ができない??
PostgreSQL
-
13
Null値が入れられない
MySQL
-
14
exeファイルの中身を見ることは可能ですか?
フリーソフト
-
15
Viewにインデックスは張れますか?
Oracle
-
16
2つのテーブルから条件に一致しないデータ抽出
SQL Server
-
17
Eclipseのアンインストールの仕方
Java
-
18
Eclipseで、プロジェクト名のところに赤いバッテンのエラーマークが
Java
-
19
特定条件でWHERE句の条件を変更したい
SQL Server
-
20
SQLでUPSERTを一度に複数行やる方法
PostgreSQL
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
人気Q&Aランキング
-
4
Access2007 textboxに入力でき...
-
5
フォームで入力しても反映されない
-
6
Excelで入力したデータを自動的...
-
7
ACCESS 時間の入力方法
-
8
このオブジェクトに値を代入す...
-
9
ファイルメーカで経過月数を出...
-
10
アクセス コンボボックスのリ...
-
11
Accessで西暦の年だけ表示したい
-
12
Access(office)のマクロの「値...
-
13
Accessでの和暦の入力
-
14
入力規則違反-任意のエラーメ...
-
15
エクセルVBAのフォームで日時を...
-
16
EXCELのユーザーフォームで入力...
-
17
Access2007、フォームのテキス...
-
18
sqlldrの使用方法について
-
19
Accessフォームのコントロール...
-
20
Accessで小数の入力について
おすすめ情報
公式facebook
公式twitter