2017-10-17 6 views
0

調査のためにMySQLテーブルを設計しようとしています。MySQL:モデリングのための90回の質問があります。統計サポート付きのアンケート

アンケートは6組の質問で構成されており、それぞれの質問ごとに15の質問があるため、合計90問です。 質問と質問の順番は変更されませんし、新しい質問のセット(1セットにつき15質問)が追加される可能性もあります。

これらはすべて「はい」または「いいえ」の質問なので、回答はブール値で真または偽として保存されます。

また、統計のユーザーの性別、国籍、年齢も保存します。

  1. 私は2人のユーザー間で同じ回答のパーセンテージを取得したいと考えています。
  2. 私は、同じ回答のパーセンテージを1人と多数(大部分は50%以上の回答)得たいと思っています。
  3. 私は、性別、国籍、年齢の組み合わせで質問ごとに「はい」または「いいえ」の統計を取得したいと考えています。例えば、66%が質問第11号や韓国人女性の12%をyesと答えた質問第86号にはが

は、だから私はすべてのこれらの機能をサポートするためのテーブルを作っ答えない

質問表

q_id PK(1 to 90) 
q_text VARCHAR(100) 

ユーザーテーブル

u_id PK 
sex TINYINT 
nationality VARCHAR(20) 
age TINYINT UNSIGNED 
q_1 TINYINT 
q_2 TINYINT 
... 
q_90 TINYINT 

それが一つのテーブルに94列を持ってしても大丈夫ですか?私はいくつかの質問セットを追加すると列の数が増えることに気づいています。だから私はテーブル

SET1テーブル

s_id PK 
u_id users_table 
q_1 TINYINT 
q_2 TINYINT 
... 
q_15 TINYINT 

SET2テーブル

s_id PK 
u_id users_key 
q_16 TINYINT 
q_17 TINYINT 
... 
q_30 TINYINT 

などを設定するために答えをsplited。私は今6セットのテーブルを持って、私は今新しいセットを追加する場合、新しいテーブルを追加することができます。 私は答えテーブルがあまりにも成長することを恐れている回答テーブル

a_id PK 
u_id users_key 
q_no question number(1~90) 
answer TINYINT 

これについて少し検索し、私は答えを別のテーブルを持っている場合、それが良いだろうことを見た

答え表はユーザーあたり90行を取得するため、大きな値です。 どのデザインが良いかわからない。私は答えのためにstackoverflowを検索しましたが、私ははい、いいえアンケートのための適切な答えを見つけることができませんでした。遅かれ早かれよりもあなたを作成するすべてのこれらの列を入れて、あなたがあなたのテーブルを正規化する必要があり

s_id PK 
s_type (you can put 1, 2, 3 for set group) 
q_id FK(questions) 

:クレイジーですq_xすべてのこれらの列を作成

+0

同じ構造化データの行の数が非常に細かくなります。 DDLを変更して質問を追加すると、列が多く表示されなくなります。データを追加するのは、しばしば構造の変更よりも望ましいことです。 – xQbert

答えて

1

は、あなただけのような、すべての質問にquestion_setと呼ばれるテーブルを作成する必要があります問題。非正規化する必要がある場合は、ビューを作成する方がよいでしょう。

1

私はむしろforeign keysをより柔軟にするために使用します。

だから私は、作成します

set_table set_id PK set_name Text

question_table question_id PK

//This will help you put same question in multiple sets question_set set FK (set_table) question FK (question_table)

user_table user_id PK user_name Text sex Text

user_answer_table user FK(user_table) question FK(question_table) answers Bool

次に、必要なすべてのメトリックを取得するために、結合を使用して複雑なクエリを作成できます。これにより、スキーマを変更することなく、新しい質問、セット、ユーザーを追加することができます。

+0

question_setテーブルが必要です。各セットにどのような質問があり、質問を別のセットで再利用できるかを知ることができます。質問表にセットを置くと、質問の再利用が制限されます。 – xQbert

+0

ありがとう!!編集しました:) – Anshul

関連する問題