• ベストアンサー

ヌル値は記憶容量を必要としないのか???

sasaki1985の回答

  • ベストアンサー
回答No.1

物によるんじゃないでしょうか。 可変長領域のカラムにNULLを入れるのであれば容量削減になるかと思いますが、INTやCHARの様にテーブルを作成した時点で最大容量を設定するタイプはNULLを入れようが最大値を入れようがディスクサイズは変わらないような気がします。 未検証です。すみません。 ただ、そのような理由でNULLを多用するのは止めた方が宜しいでしょう。 DBにおいてNULLってヤツはかなりのクセモノで、多用すると検索を掛ける時にかなり面倒くさい手法を取らなければならずシステムを遅くしてしまうと言う罠があります。 特にINDEX項目にNULLを入れるのはオススメできません。 詳しい理由は参考URLの「NULLにまつわる諸問題」を参照の事。 (余力があれば他の項目もじっくり見て見るとDB運用についての考え方がガラッと変わるですよ)

参考URL:
http://www.geocities.jp/mickindex/database/idx_database.html
zyousuke
質問者

お礼

こんばんは! 現在のテーブルの構成に限界を感じ、プログラム作成を中断し、テーブルを1からデザインしているところです・・・ 戻ることも進むことも出来ず、気が狂いそうな心境です^^; 例えば、 キー、値1、値2、値3のような列を持つテーブルの構成を、 キー1、キー2、値のように変更して3行で管理すべきか悩んでます。 値が1個しかない場合は、最初のテーブルでは、キー値、値1、NULL、NULLとなり、 変更したテーブルではキーが2つ必要になりますがNULLのない1行のデータとなります。 ただ、値4、値5・・・のように無制限にあるわけではなく、最大で値3までと決まっているのであれば、今のままの構成の方がいいような気がしてきました。 お教えいただいたサイトを途中まで読んで力尽きました。 ひとまずNULLは、いくらか問題ありと把握しておきます。 キー項目はNULLにしてないので、まあ良しとしよう。 さてと、テーブルデザインを続けるかな・・・

関連するQ&A

  • FDの記憶容量計算について。

    ただ今、J検3級に向けて勉強中です。 FDの記憶容量計算について、教えてください。 1セクタが512バイト,1トラックが9セクタ,片面80トラックでフォーマットされている両面記録可能なフロッピーディスクの記憶容量を計算してみる。 1トラック分の記憶容量=512×9(バイト) 1面分の記憶容量=1トラック分の記憶容量×80(バイト) したがって、総容量=1面分の記憶容量×2(両面分)=737280B(バイト) =737280÷1024=720KB(キロバイト) セクタサイズだけを1024バイトと変えた場合に、同様の計算をすると、その記憶容量は1.44MB(メガバイト)となる。 上記とあります。 専門用語が分からない私は、まず、何をどのようにイメージしたら分かりやすいでしょうか。 また、専門用語ではなく、分かりやすい言葉で書き換えてくださる方はいらっしゃいませんでしょうか。 よろしくお願いいたします。

  • null→数値にするには?

    何度も質問してすみません。 NULLが格納されているフィールドに 「0」や「1」といった値を入れる為には どういうINSERT INTO文をPHP内で記述すれば宜しいでしょうか? pg_field_is_nullを使ってみたのですが イマイチ値を変更する事ができません。 また、SQL文で「NOT NULL制約」という言葉があるのを知ったのですが、 ALTER TABLE文でテーブルを作る時に、 各フィールドにはnullではなく、「0」を最初から格納したい場合は どういった記述をすれば宜しいでしょうか? 宜しくお願い致します。

  • NULLが返ってこない…。

    原因がわからないため質問をさせて頂きます。 <%-- JSP <input type="text" name="name"> //名前 String name = request.getParameter("name"); Data data = new Data(); //コンストラクタをnew data.setName(name); --%> <%-- class(Bean) private String n = null; public void setName(String name){ if(name != null){ n = name; }else{ n = null; } public String getName(){ if(name != null){ return name; }else{ return name; } } --%> 値をgetParameter()メソッドで取得をして 値をsetName(name);でセットをしています。 セットした側でもし値があるのであれば その値を変数に格納。 もし値がなければnullを変数に格納しています。 しかし System.out.println(data.getName().equals("");//true System.out.println(data.getName().equals(null);//false; となりnullを返してくれません…。 このコードに何を足したらnullを返してくれるのか わかりません。 わかる方がいらっしゃいましたらよろしくお願い致します。

    • ベストアンサー
    • Java
  • NULLを含む列の足し算

    NULLを含むA列、B列の合計を取得する方法を教えてください。 列の値がNULLだった場合は0として扱い、 列A 列B 合計 NULL 100 100 100 20 120 50 NULL 50 としたいのですが、 単純に SELECT A+B FROM XXX とすると 列A 列B 合計 NULL 100 NULL 100 20 120 50 NULL NULL となります。 NULL=0として扱う方法はないものでしょうか? 宜しくお願いします。

    • ベストアンサー
    • MySQL
  • [VB6] 特定カラムのNULLチェックについて

    お世話になります。 現在、Visual Basic 6.0 にて 開発をおこなっております。 下記内容で DBからデータを取得し、スプレッドシートに データを表示させる必要があるのですが、 実現方法がよくわからず、非常に困っています。 ・スプレッドシートに取得データを表示する際、 すべての行において データがNULLの列に関しては、 その列自体を表示せず、その次の列を前につめて表示させる まず、上記を実現しようとする場合、 1. データ取得時のSQL文にて、上記内容を満たすようなデータを 取得する 2. 全レコードを取得後、Visual Basic側で構造体に格納した各列の値を 保持した変数の中身をひとつひとつNULLかどうかチェックをする の2つの方法を考えているのですが、1回で条件を満たすようなSQL文が 作成可能なのかどうかも、まだはっきりしていません。 また、上記1、2のどちらがより良い方法なのかも、よくわかりません。 (あるいは、それ以外の方法があれば、それをぜひ知りたいのですが、) どなたか、大変申し訳ないのですが、ご教授願えますか?

  • フロッピーディスクの記憶容量

    次の仕様の両面記憶可能のフロッピーディスク1枚の記憶容量(単位:kバイト、1kバイト=1024バイト)を求めよ。 トラック数(片面):80トラック セクタ数/トラック:26セクタ データ長:256バイト/セクタ 計算してみたのですが、どこが間違っているでしょうか 1トラック 256×26=6656バイト/トラック 1面 6656×80=532,480  ≒532kバイト 答え:532×2=1064kバイト どなたかお願いします

  • Null値が入れられない

    種別:Decimal(18,2) 属性:UNSIGNED NULL:はい デフォルト値:NULL のフィールドがあります。phpMyAdminを通じてデータを入力しております。Null値のチェックを入れれば良いのですが、空白のまま残したおいた場合には、デフォルト値であるNull値が格納されるものと思っておりましたが、空白ですと0.00に変換されてしまします。 また、同時に、スクリプトの方ではjqGridを使用しているのですが、こちらの方でデータ編集をする際には、Null値のチェックボタンはありませんので、空白のままで更新しなければなりません。上記と同様に、空白にしておくと、0.00に変換されてしまいます。 Null値を入れるためには、どのような方法があるのでしょうか? よろしくお願いします。

    • ベストアンサー
    • MySQL
  • データコンボのNullについて

    何度もすいませんm(__)m データコンボで 値が選択されてない場合は nullをデータベースに格納したいんですが、 できません。nullの使い方が不正です。と出ます。 教えてください。 VB6を使ってますデータベースはMySQLです。 Dim id As Integer If Me.DataCombo1.Text = "" Then id = Null Else id = Me.DataCombo1.SelectedItem End If datacombo1はInteger型のデータを データベースに格納します

  • NULLの定義について

    C言語で、NULLとの比較を行う関数として、 strcmp関数を使用したいと考えています。 ある、文字列変数に、 "あいうえお"が入っている場合、 ""(何もない)の場合、 下記の例で真の処理と偽の処理、 どちらを通るのでしょうか。 当然、文字列変数が"あいうえお"の場合は、 真の処理を通ると思いますが、 ""(何もない)の場合が分かりません。 例として、 ~中略~ if( strcmp( 文字列変数, NULL ) != 0 ){ 真の処理 }else{ 偽の処理 } ~中略~ の時です。 言語によって、NULLは「0」と定義されていたような 記憶もありますが・・ したい事は、文字列変数が""の場合、 偽の処理をするようにしたいです。 プログラムの作り方を教えて下さい。

  • NULLのみを保持した列を除外したレコード取得

    お世話になります。 現在、Visual Basic 6.0 にて 開発をおこなっております。 下記内容で DBからデータを取得し、スプレッドシート(GrapeCity社の製品)に データを表示させる必要があるのですが、 実現方法がよくわからず、非常に困っています。 ・スプレッドシートに取得データを表示する際、 すべての行において データがNULLの列に関しては、 その列自体を表示せず、その次の列を前につめて表示させる まず、上記を実現しようとする場合、 1. データ取得時のSQL文にて、上記内容を満たすようなデータを 取得する 2. 全レコードを取得後、Visual Basic側で構造体に格納した各列の値を 保持した変数の中身をひとつひとつNULLかどうかチェックをする の2つの方法を考えているのですが、1回で条件を満たすようなSQL文が 作成可能なのかどうかも、まだはっきりしていません。 また、上記1、2のどちらがより良い方法なのかも、よくわかりません。 (あるいは、それ以外の方法があれば、それをぜひ知りたいのですが、) どなたか、大変申し訳ないのですが、ご教授願えますか?