1レコードのデータ量は控えるべき?

このQ&Aのポイント
  • レコード数が多くなると検索を返すのが遅くなりますが1レコード内のデータ数が増える事で検索結果は遅くなりますか?
  • YESかNOの2拓を記録するデータベースがあったとします。と記録するかと記録するかで迷っています。レコード数は変わらないけど、1レコード内に記録される文字数(データ)の量がだいぶ変わります。数万件のレコード数になった時に、検索結果の返しに変化が無いのであれば前者の方が、CSVで出力した時とかの見栄えが良いので採用しようと思っています。
  • レコード数が多い場合、検索結果の返却が遅くなる可能性があります。また、1レコード内のデータ数が増えることで検索結果も遅くなる可能性があります。例えばYESかNOの2拓を記録するデータベースの場合、どちらの方式を採用するか迷うことがあります。ただし、レコード数は変わらないけれど、1レコード内に記録される文字数(データ)の量が大きく変わる場合、検索結果の返しに変化がないのであれば前者の方式を採用することも考えられます。
回答を見る
  • ベストアンサー

1レコードのデータ量は控えるべき?

レコード数が多くなると検索を返すのが遅くなりますが 1レコード内のデータ数が増える事で検索結果は遅くなりますか? 例えば YESかNOの2拓を記録するデータベースがあったとします         問1   問2   問3   問4   問5 ○○さん  YES   NO   YES   NO   YES □□さん  NO    YES   NO   NO   YES と記録するか         問1   問2   問3   問4   問5 ○○さん   Y          Y         Y □□さん        Y               Y と記録するかで迷っています。 レコード数は変わらないけど、1レコード内に記録される文字数(データ)の量がだいぶ変わります。 数万件のレコード数になった時に、検索結果の返しに変化が無いのであれば 前者の方が、CSVで出力した時とかの見栄えが良いので採用しようと思っています。

  • MySQL
  • 回答数3
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • mitoneko
  • ベストアンサー率58% (469/798)
回答No.2

 基本、言葉又は文字として意味がある場合を除いて、数値で表せるなら数値で保存する方が効率は良いです。これは、スペース・検索・集計などあらゆる場合においてそうです。  今回がその典型例。Y/Nでも、YES/NOでも、A/Bでも、定義に一貫性があれば何でも良いわけですから、1/0でも良いですよね。  検索結果としてYES/NOで表示したければ、それは、検索の時にSQL文でそう作れば良いだけのこと。後でなんとでもなります。  次に、NULL(何も入れない)というのは、できる限り避けるべきです。  検索・集計時に、NULLと言うのはとかくやっかいで、後々まで後悔することになります。元々、NULLというのは、「不定」とか「未定義」を表します。この意味で使うのであれば、OKです。  今回の場合であれば、「回答無し」であれば、NULLとしても良いかもしれないです。  間違っても、Noの代わりに使うことだけは避けましょう。  ちなみに、NULLを入れた場合も、HDDの領域としては、「N」を入れた場合と同じだけ使うと考えてください。  しかも、検索時にNULLを考えたSQLを組む必要があります。とかくSQL文が複雑になり、結果として、検索の速度も遅くなります。  私なら、 create table test( namae varchar(50), qnum tinyint, ans tinyint, primary key (namae));  としておくでしょうか。実は、こうすると、質問に書かれた表を再構築するのは少し難しくなるんですけど、領域としては最低限に抑えられますし、問い毎の集計がとても楽になります。また、突然「問6」が出現した時の被害も最小限ですみます。 せめて、 create table test2( namae varchar(50), q1 tinyint, q2 tinyint, q3 tinyint, q4 tinyint, q5 tinyint, primary key (namae)); ですね。  後者のテーブルで、質問の一つ目に書かれた表示を復元したければ、 select namae, case q1 when 1 then 'YES' when 0 then 'NO' else '?', case q2 when 1 then 'YES' when 0 then 'NO' else '?', case q3 when 1 then 'YES' when 0 then 'NO' else '?', case q4 when 1 then 'YES' when 0 then 'NO' else '?', case q5 when 1 then 'YES' when 0 then 'NO' else '?' from test2 where ・・・・・・・;  とでも書けば、OKです。もっというと、この数字からYES/NOへの変換は、SQLでやるより、アプリケーションプログラムでやった方が普通は楽です。

kzkz-16
質問者

お礼

ご回答ありがとうございます! お礼が遅れました・・・ まだまだ勉強不足なのを凄く痛感しました。 とても参考になりました!

その他の回答 (2)

回答No.3

正規化の考えで行くとそのテーブル設計自体が問題歩きがするけど やるなら ・ユーザマスターテーブル ユーザID,ユーザ名 ・成績テーブル ユーザID,問いNo,正誤 ってテーブル設計にしますけどね。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

二者択一でかならずどちらかが選ばれるなら ENUMなどで持つのが妥当かと

関連するQ&A

  • Access チェックボックスを利用した絞込検索のクエリ記述

    ここ数日、試行錯誤やgoogle検索したのですが、分からないためヒントを下さい。 Accessで、チェックボックス(Yes/No)を含むテーブルがあります。 検索フォームを作成し、ここにチェックを入れることで、テーブルから一致するデータを抽出したいです。 ただし、「Yes」のみが有意なデータで、「No」は無視したいです。    チェックA チェックB チェックC 1    Yes    No     No 2    Yes    Yes    No 3    Yes    Yes    Yes (得たい結果) チェックAをYesで検索…1,2,3 チェックA+BをYesで検索…1,2 チェックA+B+CをYesで検索…3 単に検索フォームのチェックボックスの値を「抽出条件」に入れますと、「No」まで一致するように抽出するので意図と違います。 チェックを入れなかった項目については無視して、クエリを働かせられればよいのですが...。 どのようにクエリを記述したらよいのでしょうか。 フォームにあるチェックボックスからのデータの取得や抽出結果のフォームへの表示などはできています。 よろしくお願いいたします。

  • アクセス クエリ検出方法

    お世話になります 初歩的な質問で申し訳ないのですが 下記のDBがあるとします すべてYes/No型です 可愛系|綺麗系|チェック済| Yes |No |Yes | Yes |yes |No | No |No |No | Yes |yes |Yes | Yes |yes |No | Yes |No |No | 上記の可愛系か綺麗系のどちらかにチェックが入っていれば(Yes)検出(両方チェックも有り) チェック済みがNoだけを残したいのですが 下記結果 可愛系|綺麗系|チェック済| Yes |yes |No | Yes |yes |No | Yes |No |No | 下記ここまではできました FROM データーベース WHERE (((データーベース.可愛系)=Yes)) OR (((データーベース.綺麗系)=Yes)); できないところはチェック済みのYesを除外したいのですが WHERE (((データーベース.可愛系)=Yes) AND ((データーベース.チェック済)=No)) OR (((データーベース.綺麗系)=Yes)); 上記を実行してもチェック済みYesを除外できません どなたか修正と修正に対して説明できるかた、ご教授願います

  • VBAで複数のCSVからレコードセットを作りたい

    D:\DATA\ORDER\SOURCE.CSVに売上のデータがあり、 D:\DATA\STOCK\SOURCE.CSVに在庫のデータがあります。 売上には 注文NO,売上日,売上額,在庫NO 在庫には 在庫NO,仕入日,仕入額 とあるとして 在庫.在庫NO,利益,滞留日数,売上.注文NOというような、2つのCSVを結合した結果をADOでレコードセットに格納したい場合どのようなソースになるのでしょうか? 一つのCSVからレコードセットに結果を格納するやりかたならネットに多々掲載されてますが、複数のCSVについてのやり方の掲載が探せなかったので質問します。

  • ACCESSでテーブルにあるチェックボックスを一括でYesにする方法を教えてください

    アクセスのテーブルにあるYes/No型のチェックボックスを、コマンドボタンを押すことによって、全てのレコードをYes(チェックが入っている状態)又はNo(チェックが入っていない状態)にする 方法を教えてください。自分で、参考書をみながら試みたのですが、NoをYesに変えられたのですが、全部Yesにならなくて困っています。 (NoはYesになりますが、元々YesだったところがNoになってしまう) まだ、VBA初心者ですので、小学生(実際は中年?)にも解るように教えていただければ幸いです。よろしくお願いします。

  • ファイルメーカーについて

    またまたファイルメーカー(Pro7)について質問いたします。 例 1つのレコードにYesもしくはNoを選択するAフィールドを作成 1.YES 2.No 3.Yes 4.Yes 5.No Yesの総計3を表示したいのですが、今までは 1つのレコードにもう1つBフィールドを作成 if(B="Yes" ;1;0)関数により答えを導き、 総計フィールド&パートを作成し、Bフィールドの合計を 表示してきました。 なにか他の方法でスマートなやり方や関数はないのでしょうか。 もしくは上記方法で間違いないのでしょうか。 宜しくお願い致します。

  • Accessのボタンコントロールについて

    Accessのフォームにて、ボタンからYes/No型の レコードを操作する手段としてはどのような方法が あるか教えて頂けませんでしょうか? イメージとしては、ボタンを押すと Yes/No型レコードのチェックをON/OFFできる形なのですが。

  • 検索とレコード数(CSVファイルより)

    PHP初心者です CSVファイルを参照して 項目で検索 検索した内容のレコード数(件数)を 表示させる関数(方法)を教えて頂きたいです 今までMysqlで操作していたのですが CSVファイルに変わって 困ってしまいました よろしくお願いします

    • 締切済み
    • PHP
  • 【エクセル】アンケート集計を簡単に集計する方法

    いつもお世話になっております 突然、アンケートの集計をすることになりましてパニックになっています。 どうか、お知恵をお貸しいただけないでしょうか。 (例)ある製品への満足度アンケート ・生まれの年代 ・満足か (YES/NO) ・YESの人はどこが満足か(デザイン/価格/性能/保証/サービス) の結果を、エクセルにて 誕生日 満足度 どこが満足か 80年代 YES    デザイン 50年代 YES    デザイン 40年代 NO    価格 80年代 YES    性能 70年代 YES    性能 60年代 NO    性能 70年代 YES    デザイン 70年代 NO    性能 80年代 YES    価格 と作成したとします。(このデータ1000件くらい) <結果> 80年代のYESの数 ○数 80年代のNOの数  ○数 80年代のどこが満足の数 デザイン ○数 価格 ○数 性能 ○数 と、言うように簡単に表示させたいのですが、 どのような方法や関数が手っ取り早いでしょうか。 結局、並べ替えをして、そのセルの数を数えているというアナログさ。 「データ」→「集計」をやってみたのですが、あまりうまくいかず・・・ わかりにくくて大変恐縮ではございますが、 どうぞよろしくお願いいたします。

  • ACCESS Yes/No型の集計

    ACCESSでチェックボックスが複数あるテーブルがあります。これら各々の個数を表示させたいと奮闘しております。複数のフィールドがあるので、やり方をご教授いただけますようお願いいたします。構造とやりたいことは下記に記します Yesはチェックボックスにチェックが入っている状態です テーブル ---------------------------------------------- グループ   分類1   分類2   分類3 ----------------------------------------------   A   |  Yes  |  No  |  Yes   A   |  No   |  No   |  Yes   A   |  Yes  |  Yes  |  No   B   |  Yes  |  No  |  Yes   B   |  No   |  No  |  Yes   B   |  Yes  |  No  |  Yes   ・   ・   ・   ZZ 上記のようなテーブルがあります。これを ----------------------------------------------------- グループ   グループ総数   分類1   分類2   分類3 -----------------------------------------------------   A    |   3     |   2   |  1   |  2   B    |   3     |   2   |  0   |  3   ・   ・   ・   ZZ とういうようにグループの総数とチェックボックスにチェックが入った数を算出させたいんです どうかご教授願います

  • テーブルに新しいレコードを追加する方法について

    ACCESS2007を使っています。 フィールドに以下のような項目があるテーブルAがあります。 日付 | 名称 | 項目 | MIN(数値) | MAX(数値) | チェック(Yes/No) また、以下のような項目があるテーブルBがあります。 日付 | 名称 | 項目 | ナンバー(数値) このテーブルAに以下のようなデータが入っているとして 1/1 | あああ | いいい | 10  | 100 | No 1/1 | あああ | ううう | 1 | 20 | Yes テーブルBに以下のようにレコードを追加したいのです。 1/1 | あああ | いいい | 10   1/1 | あああ | いいい | 11    ・  ・  ・ 1/1 | あああ | いいい | 100 1/1 | あああ | ううう | 1 1/1 | あああ | ううう | 2   ・  ・  ・ 1/1 | あああ | ううう | 20 1/1 | あああ | ううう | blank  最終的には、テーブルBをソースとしてラベル印刷したいと思っています。 レコードセットとFor~Nextなどを使えばできそうな気がするのですが、???です。 どなたかご指南いただけませんでしょうか?