2013-09-10 85 views
0

以下是我目前測驗數據庫結構的外觀:測驗的數據庫結構如何?

爲了測試和簡單起見,我只提出了3個問題。 這是我的表(測驗)的樣子:

| id | score | q1_answered | q2_answered | q3_answered | 
-------------------------------------------------------- 
| 1 | 210 |  0  |  1  |  0  | 
| 9 | 380 |  1  |  0  |  1  | 
| 5 | 210 |  1  |  1  |  1  | 
-------------------------------------------------------- 

每個問題列有從0到1,表示是尚未回答表明它已經被正確回答。

我想知道您是否有任何想法創建更好的結構或更好的效率。 是否還有一種有效的方法爲已解決特定問題的用戶添加時間戳?

舉例說明:如果用戶回答問題1,回答的時間將被記錄並顯示。

這個結構可以工作,但我一直認爲它可能不是有效的,如果我要添加說50多個問題。 任何幫助,將不勝感激。

回答

2

我將創建一個基於表的兩個表必須:

scores 
sID score testID 
1 210 1 
9 380 1 
// etc etc 

quests 
sID testID question answer anstime 
1  1 1   0  1231237128961 
1  1 2   1  1231237128964 
1  1 3   0  1231237128968 
9  1 1   1  1231237128961 
9  1 2   0  1231237128968 

基本上,你的方式,你可以輕鬆地添加更多的問題,而不需要修改表以任何方式正常化您的數據,你仍然有一個乾淨的桌子,你保持得分,很容易加入

你也可以那麼做更多有趣的查詢,例如,有多少人在一定的時間回答問題3,彙總數據很好,當然,如果您想顯示特定ID的所有結果,仍然可以將它加回到分數上。

我還在名爲testID的表中添加了兩列。這樣,您不僅能夠跟蹤一個測試的多個用戶,還能跟蹤多個測試的多個用戶。你將能夠看到一個學生是否在測試過程中有所改善,或者隨着這個主題的進行而逐漸變差。

編輯:從您的結構複製的數據將是一個有點惱人,但是這應該讓你開始至少在路徑上:

insert into quests (sID, question, answer) 
select sID, testID, q1_answered from yourTableName 

您可以通過使用一個選擇將數據插入到新結構就像我在上面向您展示的那樣,您的原始表格上的聲明

+0

感謝您的建議。但是,如何將「分數」表中的「id」列傳輸/複製到「任務」表中? –

+0

爲了完成,兩個表中不應該有一個離散的PK,還是多個列可以用作PK的快速解釋? – ChrisW

+0

@MaxWayne你的意思是你如何將當前數據複製到新結構中? – Fluffeh

0

簡而言之,您定義了一個問題表,一個用於用戶給出的答案:

問題: QuestionID,QuestionName,...

回答: AnswerID,用戶名,QuestionID ,AnswerGiven,AnswerCorrect,Date已回答

這樣如果你添加一個新問題,你不必改變表結構。

0

我不擔心50個問題的效率。只需要一些有趣的節目。嘗試一下。如果您有一百萬個問題或數十萬個問題,您可能會開始考慮效率。電腦真的很快。