2012-11-11 26 views
0

我正在製作一個類似於Moodle的網站。它基本上爲學生舉行測試。在測試中允許多種類型的問題以及如何創建表來存儲數據時,會出現混淆。用於測試的MySQL網站

test_info表中將包含測試ID和說明。 測試表將包含測試ID和問題ID對。 爲了得到測試的問題,這將需要一個「SELECT * FROM test WHERE testID = $ tID」,這將在數據庫變大時花費大量的時間來執行。

本來問題表中包含的問題,4個可能性和答案。

如何在數據庫中存儲多個問題和多種問題的數據?

例如:

測試51 - 「介紹數學的有關」

問題1:什麼是2 + 2? A:4 B:12 C:7 D:8

問題2:(0,103)是方程y = 2x /(100x)的範圍? 對錯

這會導致數據有2個不同大小

問題:

|問題| A | B | C | D |正確|

|問題|正確|

如果我存儲這些在一張桌子會浪費4 50Char VAR-個字符每個問題,如果我這些存儲在2個獨立的表中,如何將SELECT知道,從選擇哪個臺?

問題: | TestID | TableID | QuestionID |

問題1: | Ques | A | B | C | D |正確|

問題2: | Ques | A | B | C | D |正確|

什麼的噩夢。

+1

從表中選擇基於一個唯一的ID將採取「時間的大量」?我們以皮秒爲單位進行測量嗎? –

+0

如何在表格中插入答案選項 – polin

回答

0

把答案在自己的表:

answers (answer_id, question_id, description, sequence) 

,並把正確的answer_id的問題表。

0

我想你的數據結構是這樣的:

Table1 :Test 

id: 
TestName: 

Table2: Questions: 

id: 
test_id: 
Question: 
Answer: //say a,b,c,d 

Table3:Answers 

id: 
question_id: 
Anwser Option: //say a,b,c,d 
Answer: 

SQL進行數據表: 這些數據將幫助您瞭解的結構。

CREATE TABLE IF NOT EXISTS `Tests` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `Test` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ; 

-- 
-- Dumping data for table `test2` 
-- 

INSERT INTO `test2` (`id`, `Test`) VALUES 
(1, 'Test1'); 


////////////////////////////////////// 

CREATE TABLE IF NOT EXISTS `questions` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `test_id` int(11) NOT NULL, 
    `Question` varchar(255) NOT NULL, 
    `Answer` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ; 

-- 
-- Dumping data for table `questions` 
-- 

INSERT INTO `questions` (`id`, `test_id`, `Question`, `Answer`) VALUES 
(1, 1, 'question1', 'a'), 
(2, 2, 'Question2', 'd'); 

//////////////////////////////////////////////////// 

CREATE TABLE IF NOT EXISTS `answers` (
    `id` int(11) NOT NULL AUTO_INCREMENT, 
    `question_id` int(11) NOT NULL, 
    `answer_option` varchar(10) NOT NULL, 
    `Answer` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ; 

-- 
-- Dumping data for table `answers` 
-- 

INSERT INTO `answers` (`id`, `question_id`, `answer_option`, `Answer`) VALUES 
(1, 1, 'a', 'True'), 
(2, 1, 'b', 'False'), 
(3, 2, 'a', 'Asnwer1'), 
(4, 2, 'b', 'Answer2'), 
(5, 2, 'c', 'Answer3'), 
(6, 2, 'd', 'Answer4'), 
(7, 2, 'e', 'Answer5'); 
+0

將答案存儲在單獨的表格中而不是與問題內聯存在優勢嗎? 我希望這能夠處理大量的數據大學規模。例如: Ques | A | B | C | D |答案| 你能給一個問題和答案表的例子記錄嗎? 謝謝 – CoderWalker

+0

是的,在這裏您可以放置​​所有類型的問題(1個答案或2個答案或3個答案或4個答案或甚至更多的問題)。在線表中,您將被綁定到最多4個答案。我認爲這是更好的方法.... –

0

VARCHAR(50)只需要六位,這意味着它會(最有可能)佔用一個字節只在磁盤上。在VARCHAR中的VAR表示空間使用情況將適應實際數據。這意味着使用一個表格將「浪費」每個問題只有四個字節。

既然你有兩種類型的問題,你在代碼中以兩種不同的方式處理,你的雙表法也是可行的。

推薦的方法是:

注意四答題和是否問題是選擇題的兩種特殊情況。將這些存儲在數據庫中。一個可能的模式:

question: question_id (PK), test_id (FK), text 
answer: answer_id (PK), question_id (FK), text, is_correct 

PK =主鍵,FK =外鍵