2017-07-31 107 views
1

我們正在創造一個在線測驗數據庫架構創建具有多個可能的答案測驗和文本框。會有幾類要求每一個用戶的問題,例如:Mysql數據庫設計用於解釋

類型1的問題。答案爲是/否的問題。

第2類問題。答案爲是/否的問題。如果用戶選擇是,那麼用戶必須寫幾句話來說明他爲什麼說是的。

類型3問題。答案爲是/否的問題。如果用戶選擇是,則給用戶幾個選擇。即你的車是否意外?如果用戶選擇是,那麼我們將顯示覆選框,如發動機故障,車身重新塗漆,洪水損壞,輪胎損壞等。用戶可以選擇一個或多個這些選擇。

我們要設計數據庫此牢記,它應該是靈活的添加/刪除/在網上問答更新特定類型的問題和數據應該快速檢索查詢任何給定用戶的答案。

我們正在考慮以下DB設計:

表用戶:用戶名|名稱|電子郵件|移動。

表問題:ID |類型|標題。 (此表中包含的所有問題的列表)

表QuestionChoice:ID | QuestionId |值。 (該表包含類型3問題的選擇值,例如發動機故障,車身重新塗漆等)

Table UserResponse:Id | UserId | QuestionId | IsYes | TextForYes

我在表格「QuestionChoice」中有幾個問題,我們應該將每個值保存在單獨的行中,還是隻能將它們保存爲單行中的逗號分隔值?

它是最好的數據庫設計或任何替代?

+1

永遠不要以逗號分隔保存任何內容 – Strawberry

回答

1

用戶:

ID |名稱|電子郵件|移動

問題:

ID |標題|鍵入

選項

ID | questionId |值

one [questionId] to many [value]。

取決於你有多少數據,而如果選擇[值]可用於倍數的問題,你可以創建一個表

ID |命名

,使選項

ID | questionId | VALUEID

userAnswers

ID | userId | questionId |選擇| optionId |輸入

要麼將​​所有三個表放在一張表中,要麼爲每種問題製作一張表。 [或甚至一個表格輸入,另一個選項/選項]

你不希望表格「鏈接」你的問題嗎? [或一部分與碼處理(?)]

linkQuestions:從和到是questionId,選擇是是/否]

|到| optionId |選擇

併爲您的顧慮: 請儘量避免在一行中保存的數據作爲逗號分隔值。 這是不好的做法,因爲「好」的原因。 [即:管理您的數據將是一個痛苦,SQL是關係型的,並且更容易以這種方式使用]

+0

如果只有一種類型的問題(多項選擇) 4個答案,可以將答案值直接添加到問題表中嗎? 'id |標題|答案1 |答案2 |答案3 | answer4'?儘管限於4個答案,這是否會導致任何負面結果? –

+1

如果你確定這將是4個答案,並且它不會改變,爲什麼不呢。 我覺得這有點不切實際,但那只是個人偏好。 – Sequoya