2017-10-17 106 views
0

我試圖設計MySQL表進行調查。MySQL:建模90是或不是問題統計支持調查

調查由6組問題組成,每組15個問題,共90個問題。 問題和問題的順序不會改變,並且有一些新的問題(每套15個問題)被添加的可能性。

他們都是'是或否'的問題,所以答案會以布爾方式保存爲真或假。

我還保存性別,國籍,用戶統計年齡。

  1. 我想得到兩個用戶之間相同答案的百分比。
  2. 我想得到一個人和多數人之間相同答案的百分比(多數是超過50%的答案)。
  3. 我想通過性別,國籍,年齡的組合來得到每個問題是或否的統計數據。例如,66%的回答是肯定的問題11號或韓國女性12%的人回答沒有對問題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列?恐怕列數會增加,因爲我添加了一些問題集。所以我splited答案設置表

設置1臺

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

設置2臺

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

等。我現在有6個表格,如果我添加新的表格,我現在可以添加新的表格。 我搜索一些關於這一點,我看到它會更好,如果我有答案

單獨的表

回答表

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

恐怕答案表可得增長因爲答案表每個用戶可以獲得90行。 我真的不確定哪種設計更好。我搜索了stackoverflow的答案,但我無法找到適當的答案是或不是。

+0

相同結構化數據上的更多行=非常好。添加更改DDL問題的更多列是糟糕的設計。添加數據通常比改變結構更好。 – xQbert

回答

1

創建所有這些列q_x是瘋了,你只需要創建一個名爲question_set與像所有的問題表:

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

你應該規範化表,把所有這些列將遲早創建你問題。在需要非規範化的情況下,最好爲此創建視圖。

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