2011-02-04 7 views
7

मेरे पास एक प्रश्नोत्तरी उत्पन्न करने के लिए एएसपीनेट एमवीसी साइट बनाने की एक परियोजना है। यहां विनिर्देश दिया गया है:एकाधिक-विकल्प क्विज़ इंजन के लिए डेटाबेस स्कीमा का अच्छा डिज़ाइन क्या है?

  1. प्रत्येक उपयोगकर्ता साइट पर जाने के लिए, उसे प्रश्नोत्तरी मिलती है।
  2. प्रत्येक प्रश्नोत्तरी में कुछ बहु-विकल्प समस्याएं होती हैं।
  3. प्रत्येक समस्या में एक प्रश्न और 5 पारस्परिक-अनन्य विकल्प होते हैं।

सरल मॉडल मैं के बारे में सोच सकते हैं इस प्रकार है:

public class Problem 
    { 
     public int ProblemId { get; set; } 
     public string Question { get; set; } 
     public string A { get; set; } 
     public string B { get; set; } 
     public string C { get; set; } 
     public string D { get; set; } 
     public string E { get; set; } 
    } 

मैं यह अच्छा है यकीन नहीं है। क्या आप मुझे बेहतर डिजाइन के लिए सुझाव दे सकते हैं? ई के माध्यम से

+2

"स्टैक ओवरफ़्लो"? साइट संवेदनशील हो गई है और सवाल भी पूछ रही है? –

+0

मुझे आश्चर्य है कि किसी को उस उपयोगकर्ता नाम को पहले नहीं मिला था। मैं लगभग उसे वोट देना चाहता हूं। –

+0

क्या आप प्रत्येक उत्तर के लिए एक से अधिक विकल्प चुन सकते हैं? –

उत्तर

3

सरल और: इस प्रकार मैं अपनी तालिका बाहर रखना चाहते हैं सहज ज्ञान युक्त डिजाइन हमेशा सर्वोत्तम होते हैं और चूंकि वे वास्तव में सरल होते हैं, हम खुद को संदेह करना शुरू करते हैं ;-)। आप अच्छा कर रहे हैं सिवाय इसके कि आप समस्या के साथ सही उत्तर भी स्टोर कर सकते हैं। तो यह अब सिर्फ एक समस्या नहीं है। तो अब यह समस्या और Answers या QuizItem है।

तो यह सब एकाधिक स्तंभों के रूप में एक एकल तालिका में स्टोर करने के लिए ठीक है। लेकिन आपको यह समझने की भी आवश्यकता है कि इसका क्या अर्थ है। इसका मतलब यह है कि आप एक धारणा है कि एक सवाल हमेशा 5 विकल्प हैं करने के लिए जा रहा है कर रहे हैं। यदि आपके पास 5 से कम होने वाला है तो यह ठीक है क्योंकि आप नल स्टोर कर सकते हैं। लेकिन क्या होगा यदि आप और अधिक होने जा रहे हैं? यह तब होता है जब एकल टेबल मॉडल अलग हो जाता है। अब आप सोच रहे एक प्रश्न वास्तव में 1 या अधिक विकल्प हो सकता है और माता पिता के बच्चे तालिकाओं में विभाजित करना चाहते हैं कि शुरू होगा .... अब आपके द्वारा किए गए एक अच्छी तरह से सूचित निर्णय ;-)

+2

मुझे नहीं पता। स्कीमा को बिल्कुल पांच उत्तरों तक सीमित करना बुरा लगता है। बेशक, यह वास्तव में आवश्यकता (आज) से मेल खा सकता है, लेकिन अगर जटिलता लागत पर बहुत अधिक सामान्यता नहीं है, तो मैं इसे और अधिक लचीला बना दूंगा। इसे आवश्यकता के रूप में सरल रखना (मॉड्यूलो थोड़ा सा रास्ता) अनुमति देता है, हालांकि यह एक अच्छा सिद्धांत है। – Thilo

4

गुण एक? नहीं धन्यवाद!

Quiz (int QuizId, ...) 
Problem (int ProblemId, int QuizId, string Question) 
Answer (int AnswerId, int ProblemId, int Index, string Answer) 

फ़ील्ड नाम स्वतः स्पष्ट (सूचकांक, एक भी सवाल का जवाब के लिए तरह सूचकांक है अगर उनके आदेश मामलों) होना चाहिए

3

तालिका Question एक id है और description, जो प्रश्न का पाठ है ("बिल्लियों गुप्त रूप से कुत्तों हैं?")।

संपादित करें: इसके अतिरिक्त, Question तालिका में correct_answer_id है, जो Answer तालिका में सही पंक्ति के अनुरूप है।

तालिका Answer एक question_id है, इसकी Question करने के लिए इसे वापस जोड़ने, और एक description, जो जवाब का पाठ है ("यह अपनी बिल्ली के रंग पर निर्भर करता है।")।

इस स्कीमा के साथ

, सवाल जवाब में से एक hardcoded संख्या नहीं है।

+1

प्लस सही उत्तर के लिए प्रश्न पर एक फ़ील्ड। या इसे पहली बार सही जवाब देने के लिए कठिन कोड किया जा सकता है, यदि आप उन्हें प्रदर्शित करते समय उन्हें घुमाने के लिए जा रहे हैं (लेकिन फिर प्रश्नों को सीधे छिपे हुए फ़ील्ड में उपयोग न करें, या उपयोगकर्ता धोखा देना शुरू कर देगा)। या एक क्षेत्र को सही करने के लिए एक उत्तर देने का उत्तर (जो कई सही उत्तरों वाले प्रश्नों के लिए सिस्टम को विस्तारित करने की अनुमति देगा)। – Thilo

+0

@ थिलो अनुस्मारक के लिए धन्यवाद! एक मामूली चूक ... – ClosureCowboy

1

मैं डेटाबेस संरचना का एक ही प्रकार पर काम कर रहा हूँ। एक विशिष्ट प्रश्न आईडी के खिलाफ विकल्पों को सम्मिलित करने के लिए एक विकल्प तालिका होना बेहतर है। प्रश्नोत्तरी आईडी एक अलग तालिका है जिसमें प्रश्नपत्र और परीक्षण की अवधि शामिल है।

संबंधित मुद्दे

 संबंधित मुद्दे