2016-06-17 32 views
0

我正在在線考試模塊,最初我創建了數據庫,它的工作正常,當問題的數量是固定的,在我的情況下,我有10個問題和多個用戶,現在要求是不同的,我想進行的第50題考試所以我應該怎麼做或任何時候管理員可以改變問題的數量按要求更好的方法來設計在線評估數據庫

CREATE TABLE `test_sheet` (
`user_id` varchar(200) NOT NULL, 
`q1` int(10) DEFAULT '0', 
`q2` int(10) DEFAULT '0', 
`q3` int(10) DEFAULT '0', 
`q4` int(10) DEFAULT '0', 
`q5` int(10) DEFAULT '0', 
`q6` int(10) DEFAULT '0', 
`q7` int(10) DEFAULT '0', 
`q8` int(10) DEFAULT '0', 
`q9` int(10) DEFAULT '0', 
`q10` int(10) DEFAULT '0', 
`ip_address` varchar(100) DEFAULT 'Not Available', 
`score` int(50) DEFAULT NULL, 
`start_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP, 
`random_question` varchar(500) DEFAULT NULL, 
`passedTime` varchar(500) DEFAULT NULL, 
`remainTime` varchar(500) DEFAULT NULL, 
`last_update_time` varchar(500) DEFAULT NULL, 
PRIMARY KEY (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1; 

現在test_sheet表這樣

insert into `test_sheet`(`user_id`,`q1`,`q2`,`q3`,`q4`,`q5`,`q6`,`q7`,`q8`,`q9`,`q10`,`ip_address`,`score`,`start_time`,`random_question`,`passedTime`,`remainTime`,`last_update_time`) values ('[email protected]',0,0,0,0,0,0,0,0,0,0,'Not Available',0,'2016-06-11 14:46:52','1,5,4,2,3,10,9,7,6,8','59','5258','2016-06-11 14:47:25'); 

我有一個替代選項,如

User_ID || Q_ID || ANS_ID 
[email protected] || 1  || 4 
[email protected] || 2  || 3 
[email protected] || 3  || 2 
[email protected] || 4  || 4 
[email protected] || 5  || 1 
[email protected] || 1  || 2 
[email protected] || 2  || 4 
[email protected] || 3  || 2 
[email protected] || 4  || 1 
[email protected] || 5  || 3 

現在我有50個或更多的問題和用戶對考試可能是300這樣的行會約15000以上這樣有什麼更好的方法或任何其他的想法

+0

您應該爲問題創建一個單獨的表格,如備用選項。那麼你不受考試問題數量的限制。 – DoubleT28

+1

先看到正常化。 – Kason

+0

我有問題的單獨表格,並且列是問題,qid,op1,op2,op3,op4,correct_op,no_per_question ..上面的表格在考試開始時使用,並且如果任何用戶想要檢查以前的問題是在考試期間嘗試或電力已經消失,所以我在每個嘗試的問題上存儲每個qid,userid和選定的選項... –

回答

1

你的「備用選項」是完善。您使用第二張表作爲答案: ExamID,UserID,QuestionID,AnswerID。如果一個用戶可以再次填寫具有相同問題的測試表,則ExamID非常重要。

以後你可以用一些其他的信息擴展它,就像答案,持續時間等

我會做兩個表來存儲結果(也許不是korrekt語法,我usualy使用MS-SQL):

CREATE TABLE test_sheet 
    (
    test_id int NOT NULL, 
    user_id varchar(200) NOT NULL, 
    ip_address varchar(100) NULL, 
    score int NULL, 
    start_time timestamp NULL, 
    passed_time int, 
    remain_time int, 
    ... 
    PRIMARY KEY (test_id) 
    ) 

CREATE TABLE test_sheet_answer 
    (
    test_id int NOT NULL, 
    question_id int NOT NULL, 
    question_order int NOT NULL, 
    answer_id int NULL, 
    answer_duration int DEFAULT(0), 
    PRIMARY KEY(test_id, question_id) 
    ) 

編輯:使用test_sheet_answer表來存儲問題的隨機順序。在開始時,您可以用隨機順序填充空行。如果問題尚未解答,請存儲在answer_id NULL或0.

+0

我應該在不同的表上分開得分,answer_duration,ip_address和random_question –

+0

什麼是random_question? – lvoros

+0

它是逗號分隔的值,用於存儲隨機序列的所有問題,當檢查異常終止時,例如斷電或系統關機,所以我會在開始考試時存儲隨機序列...! –