- ベストアンサー
データベース設計のための効率的な検索方法とは?
- データベース設計において、ユーザマスタの検索方法について悩んでいます。ユーザマスタには個人と企業のデータが入りますが、企業だけを検索したい要件があります。検索方法として、「企業フラグ」をつけた検索と代表者名の有無で検索する方法が考えられますが、どちらの方法が効率的なのか悩んでいます。
- (1)「企業フラグ」をつけた検索では、余分なカラムを持つことになるかもしれませんが、気分的には速いのではないかと感じます。(2)代表者名の有無で検索する方法は、カラムを持たず、値の有無で検索できますが、速度面で劣る可能性もあります。検索の効率を考えると、どちらの方法が適しているのでしょうか。
- データベースの設計において、ユーザマスタの効率的な検索方法について悩んでいます。データベースには個人と企業のデータが入りますが、企業だけを検索する際の方法がわかりません。企業フラグと代表者名の有無で検索する方法が考えられますが、どちらの方法がベストなのでしょうか。カラムの余分さと検索速度を考慮して、最適な方法を教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
関連するQ&A
- データーベース設計段階での質問です。
データーベース設計段階での質問です。 管理しなければならないフラグ項目が100近くあり、そのフラグがよく検索対象になります。ただし、1レコードにつけられるフラグは10個までと決まっています。現在使用中のデータベースでは10個のカラムをつくっていて、そこに対象フラグのIDを列挙しています。 例えば A項目に対して1,20,34,56,78 B項目に対して3,6,11,15,42,78,89 のフラグがたっている場合、 name f0 f1 f2 f3 f4 f5 f6 f7 f8 f9 ------------------------------------------------------ A 1 20 34 56 78 null null null null null B 3 6 11 15 42 78 89 null null null となっています。他に日付などのカラムが5項目ほどあります。 このままだと検索等でややこしいことになるため テーブルを整理したいと思っています。 1.100個のboolean型のカラムを作る 2.ビットフラグ(ビットフィールド)のカラムを4つほど作って、検索時ビット演算する 3.項目名(ID)とフラグNo、だけの2カラムで構成した別テーブルを作ってjoinする 4.文字列としてIDを格納し、フルテキストインデックスをはる などがあると思うのですが、効率のいい設計がいまいちよくわかっていません。 上記の方法以外にも何かいい方法があると思います。 このような場合の、テーブル設計の方法を教えて下さい。
- ベストアンサー
- その他(データベース)
- データベースの設計について教えてください。
データベースの設計について教えてください。 基本的な質問ですみません。宜しくお願いいたします。 単純なテーブルで表現しますが、 パターンA、Bのどちらのテーブルで設計するのが良いのでしょうか。 DBはmysqlで5000万件のデータで検索のみのデータベースです。 【前提】 ユーザは複数のメールアドレスを持ちます。 画面から、このユーザのもつメールアドレスを表示させる仕様だとします。 【userマスタ】 (PK)ユーザID ユーザ名 会社名 <パターンA> 【mailテーブル】 (PK)ユーザID (PK)ユーザメールアドレス モバイル用アドレス <パターンB> 【mailテーブル】 (PK)ユーザメールアドレス モバイル用アドレス ユーザID ←インデックスをはります。
- ベストアンサー
- MySQL
- データベーステーブル設計
簡単なアプリケーションを作ろうとしています。内容は、レストランのデータベースです。画面には、単純にレストラン名、住所、電話番号、営業時間、評価を表示させたいです。この「評価」は、このアプリケーションを使用する3人のユーザが入力する1~5の値の平均値としたいです(ユーザはメンテナンス画面から1レストランにつき1回まで評価値入力可能)。つまりユーザAが4、ユーザBが5、ユーザCが1を入力した場合、4+5+1/3=3.3を表示します。テーブルを設計した経験がないので教えてほしいのですが、この場合、どのようなテーブルを作れば最もシンプルできれいに出来るのでしょうか。まずレストランテーブルを作成する必要があると思いますが、「評価」があるために1テーブルでは不足だと思います。評価カラムの値はユーザが値を入力すれば変動することになるので、別テーブルを参照させるようにすべきなのでしょうか?評価テーブルというものを考えてみましたが、ユーザ名とレストランIDの複合をプライマリキーとし、評価値カラムをもたせるとしても、どこに平均値を持たせればいいのかわかりません。テーブル設計の模範例を教えて頂けると助かります。宜しくお願いします。
- ベストアンサー
- Oracle
- データベースのマスタ設計についての質問
現在データベースの設計を勉強しています。 マスタの設計について疑問があって質問しました。 【1】すべてのマスタデータを統合したテーブルを作成 カラム1:カテゴリID(PK) カラム2:カテゴリCD(PK) カラム3:値 【2】それぞれのカテゴリに応じたテーブルを作成 カラム1:カテゴリCD(PK) カラム2:値 ※私はパターン1の方が、カテゴリの追加等柔軟かなと考えています。 それぞれのパターンの長所・短所を教えてください。
- ベストアンサー
- その他(データベース)
- データベース設計支援ツール
いろんなプロジェクトでデータベースの設計を何度かやっていると、似たようなテーブル名やカラム名。 また、似たような定義になってきます。 テーブル定義書などは、Excelなどで管理しているのですが、ツールか何かで管理したいと思っています。 そうすれば、異なるプロジェクトでも共有できますし、生産性の向上に繋がると思っています。 できれば、似たようなテーブル(部門マスタテーブルなど)は自動で作ってくれるくらいが理想ですが・・・。 そのようなツールってありますでしょうか?
- ベストアンサー
- その他(データベース)
- データベース設計について
端末毎の ログイン時間を調べる為 postgres 8.15 でデータベースを 作成しようと思うのですがどう考えれば良いか教えてください。 要件 ・端末が150台程ある。 ・主にログイン時間 とログオフ時間を書き込む。 ・一日に何度もログインしたりログオフしたりする。 (365日ログインログオフの度に書き込みがある。) ・ログオンしっぱなしで何週間もログオフしないユーザーもいる。 ・ログイン、ログオフの時間をこのデータベースに書き込むツールは 別途用意できている。 ・後日このデータベースを使い端末毎の利用状況を調べる。(一日の内 何時 間ログインしているか?) こんな感じでよいのでしょうか? 初心者の為オーソドックスな考え方を教えてください。 1.No-オートで振られる用にする 2.端末名-テキスト 3・ログイン時間-日付、時刻型 4.ログオフ時間-日付、時刻型
- ベストアンサー
- その他(データベース)
- データベースについて(mysql)
プログラミング経験がほとんどないのですが、最近mysqlに携わり、検索時のSQL文の記述方法で分からないことがあるので誰か教えてください。 【説明】 地域テーブル、県テーブル、町テーブル、住所テーブル、存在管理テーブルの合計5つのテーブルが存在します。 地域テーブルには地域名と地域コードのカラムがあります。 県テーブルには県名と県コードのカラムがあります。 町テーブルには町テーブルと町コードのカラムがあります。 住所テーブルには地域コード、県コード、町コードと建物の名前のカラムがあります。 存在管理テーブルには、削除フラグというカラムがあります。 ここで削除フラグは、存在しない住所になると削除フラグに1を設定し、検索時には削除フラグに1が立っているものは検索できないようにするためのものです。普段は削除フラグは0になるように設定しています。 地域と県名と町名はプルダウンで選択できるようになっています。 【質問内容】 地域のプルダウンにある「関西」を選択すると選択された地域に該当する県名や町名、建物名が検索される。 また県名、町名についても同様に検索される。 地域、県名に「関西」「大阪」選択すると「関西」「大阪」に該当する町名、建物名が検索される。 さらに建物の名前の前方一致検索もできる。 ちなみにこれを1文で書きたいです。 以上のSQL文はどのようになるでしょうか。 mysqlのバージョンは4.0です。 どなたかお教えください。
- ベストアンサー
- MySQL
- 異なるデータベース間のテーブル結合
DB名:db1 TABLE名:得意先マスタ DB名:db2 TABLE名:ユーザマスタ 以上のように、異なるデータベースに存在する2つのテーブルをLEFT JOINさせたいです。 結合条件は ユーザマスタ.得意先コード = 得意先マスタ.得意先コード とします。 この場合の結合方法を教えてください。 以下のようなSQL文を書いても駄目でした。 SELECT * FROM db1.ADMINISTRATOR.得意先マスタ AS 得意先マスタ LEFT OUTER JOIN db2.ADMINISTRATOR.ユーザマスタ AS ユーザマスタ ON ユーザマスタ.得意先コード = 得意先マスタ.得意先コード よろしくお願いいたします。
- 締切済み
- その他(データベース)
- データベース検索で特定のレコードのみ除外するには
お世話になります。 データベースのkeyカラムに1~9999999までの数字がいろいろ入っている場合に、検索条件として百の位が9のレコードを検索結果から除外してfetchAll()で取得、一覧表示するにはどうすればよいでしょうか? カラム名 not like '%[900-999]'; とか カラム名 not like '%[9][ ]'; 等やってみたのですがどうも意図したように動いてない感じです。
- ベストアンサー
- PHP
- データベースのデータの持たせ方・取得方法について
Mysqlを使ってwebアプリ開発を行っています。 ユーザ情報として趣味を最大5件(3件は必須)で入力できるようにしたいのですが、 その場合のデータの持たせ方を以下のように考えていますが問題ないでしょうか。 もっとよい方法などがあればご教示をお願いします。(下記は一部だけ抜粋したテーブル定義です) ■テーブルA(ユーザデータ) ・ユーザID ・ユーザ名 ・趣味ID1 ・趣味ID2 ・趣味ID3 ・趣味ID4 ・趣味ID5 ■テーブルB(趣味マスタ) ・趣味ID・・・テーブルAの趣味ID1~5と紐づく ・趣味名 ■補足事項 ・ユーザは5つの入力ボックスに自由に入力できる。 ・値が入力されて登録ボタンが押された際に、入力値でテーブルBを検索し検索がヒットすれば そのIDをテーブルAに登録。検索がヒットしなければテーブルBにその値を新規登録し、テーブルAにもそのIDを登録。 またこのようなデータ構造にした場合、 データ(ユーザ名、趣味1~5の趣味名)を一覧表示する場合どのようなSELECT文でデータを取得すればよいでしょうか?テーブルAとテーブルBをJOINで結合すればよいと思いますが、結合させたいカラムが複数ある場合にどのようなクエリにすればよいのかがいまいちわかりません。 よろしくお願いします。
- ベストアンサー
- MySQL