MySQL:为 90 个是或否问题调查建模并提供统计支持

MySQL: modeling for 90 yes or no questions survey with statistics support

我正在尝试为调查设计 MySQL tables。

问卷由6组问题组成,每组15个问题,共90个问题。 题型和出题顺序不会改变,有可能会增加新的套题(也是每套15题)

它们都是 'yes or no' 个问题,因此答案将以布尔方式保存为真或假。

我还保存了用户的性别、国籍、年龄,以供统计。

  1. 我想得到两个用户之间相同答案的百分比。
  2. 我想知道一个人和多数人的答案相同的百分比(多数是超过50%的答案)。
  3. 我想根据性别、国籍、年龄的组合获得每个问题是或否的统计数据。例如,66% 的韩国女性对问题 11 回答是或 12% 的韩国女性对问题 86
  4. 回答否

所以我制作了一个 table 来支持所有这些功能

questions table

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

users table

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

在一个 table 中有 94 列可以吗?恐怕列数会随着我添加一些问题集而增加。所以我将答案拆分为 table

set1 table

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

set2 table

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

等等。我现在有 6 组 table,如果我添加新组,我现在可以添加新的 table。 我对此进行了一些搜索,发现如果我有一个单独的 table 答案会更好

answer table

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

我担心答案 table 可能会变得太大,因为答案 table 每个用户得到 90 行。 我真的不确定哪种设计更好。我在 Whosebug 上搜索了答案,但找不到适合或否调查的合适答案。

创建所有这些列 q_x 很疯狂,您只需要创建一个名为 question_set 的 table 并提出所有问题,例如:

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

您应该规范化您的 table,放置所有这些列迟早会给您带来麻烦。如果您需要非规范化,最好为此创建视图。

我宁愿使用 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

然后您可以编写带有联接的复杂查询,以获得您需要的所有指标。这将为您提供足够的灵活性来添加新问题、集合和用户,而无需更改架构。