2016-06-17 8 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; 

ごとにこの

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'); 

ようtest_sheetテーブルを質問の数を変更することができます任意の時間私はこのような別のオプションを持っています

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です..上記の表は、試験が開始され、前回の質問は試行されているか、電気が試験中に消えてしまったので、私はそれぞれの質問にユーザーIDと選択されたオプションを保存しています... –

答えて

1

あなたの「別のオプションが」あります完璧。あなたは答えのために2番目のテーブルを使用します: ExamID、UserID、QuestionID、AnswerID。 1人のユーザーが同じ質問で再度テストシートを記入できる場合、ExamIDは重要です。後で、など

、答え-期間のようないくつかの他の情報とそれを拡張することができます

私は結果を格納するために2つのテーブルになるだろう(多分構文はkorrektされていない、私はMS-SQLを使用しusualy):

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、 –

+0

random_questionとは何ですか? – lvoros

+0

これはコンマで区切られた値で、すべての質問をランダムシーケンスで保存するのに使用され、試験が電源切断やシステムシャットダウンのように異常終了したときに使用されるので、試験の開始時にランダムシーケンスを保存します...! –

関連する問題