MySQL:为 90 个是或否问题调查建模并提供统计支持
MySQL: modeling for 90 yes or no questions survey with statistics support
我正在尝试为调查设计 MySQL tables。
问卷由6组问题组成,每组15个问题,共90个问题。 题型和出题顺序不会改变,有可能会增加新的套题(也是每套15题)
它们都是 'yes or no' 个问题,因此答案将以布尔方式保存为真或假。
我还保存了用户的性别、国籍、年龄,以供统计。
- 我想得到两个用户之间相同答案的百分比。
- 我想知道一个人和多数人的答案相同的百分比(多数是超过50%的答案)。
- 我想根据性别、国籍、年龄的组合获得每个问题是或否的统计数据。例如,66% 的韩国女性对问题 11 回答是或 12% 的韩国女性对问题 86
回答否
所以我制作了一个 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
然后您可以编写带有联接的复杂查询,以获得您需要的所有指标。这将为您提供足够的灵活性来添加新问题、集合和用户,而无需更改架构。
我正在尝试为调查设计 MySQL tables。
问卷由6组问题组成,每组15个问题,共90个问题。 题型和出题顺序不会改变,有可能会增加新的套题(也是每套15题)
它们都是 'yes or no' 个问题,因此答案将以布尔方式保存为真或假。
我还保存了用户的性别、国籍、年龄,以供统计。
- 我想得到两个用户之间相同答案的百分比。
- 我想知道一个人和多数人的答案相同的百分比(多数是超过50%的答案)。
- 我想根据性别、国籍、年龄的组合获得每个问题是或否的统计数据。例如,66% 的韩国女性对问题 11 回答是或 12% 的韩国女性对问题 86 回答否
所以我制作了一个 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
然后您可以编写带有联接的复杂查询,以获得您需要的所有指标。这将为您提供足够的灵活性来添加新问题、集合和用户,而无需更改架构。