सर्वेक्षण डेटाबेस डिजाइन: एक उपयोगकर्ता के लिए एक जवाब सहयोगी


12

मैं एक सर्वेक्षण डेटाबेस के लिए वैचारिक मॉडल कर रहा हूं।

लक्ष्य उपयोगकर्ताओं द्वारा दिए गए उत्तरों को संग्रहीत करता है (यह एक एंड्रॉइड ऐप होने जा रहा है)।

मेरे पास तीन इकाइयाँ हैं: उपयोगकर्ता, प्रश्न और विकल्प।

एक प्रश्न में एक या अधिक विकल्प होंगे (उदाहरण के लिए: आपके पास कितने कर्मचारी हैं? 1-40, 40-1000, +1000)।

विकल्पों में एक पाठ (1-40) और एक मूल्य (उपयोगकर्ता द्वारा चयनित मूल्य) होगा।

उपयोगकर्ता इन विकल्पों में से एक (या अधिक) का चयन करेगा।

मेरा वैचारिक डिजाइन है:

यहाँ छवि विवरण दर्ज करें

मुझे नहीं पता कि किसी उपयोगकर्ता के साथ उत्तर कैसे जोड़ना है।

मैं उस संबंध का प्रतिनिधित्व कैसे कर सकता हूं?
क्या मेरे पास विकल्प मूल्य का प्रतिनिधित्व करने के लिए एक और इकाई है?

यह मॉडल प्रश्नों और पूर्व-निर्मित उत्तरों (प्रस्तावित उत्तरों) को संग्रहीत करेगा और उन्हें विभिन्न सर्वेक्षणों में फिर से उपयोग करने की अनुमति देता है।

मुझे इस तरह प्रश्न का प्रतिनिधित्व करना है:

यहाँ छवि विवरण दर्ज करें

यह प्रश्न इस एक से संबंधित है: सर्वेक्षण डेटाबेस डिजाइन: पहला संस्करण। क्या कोई त्रुटियां हैं?


1
ऐसा लगता है कि उपयोगकर्ताओं और विकल्पों के बीच कई-से-कई संबंधों को संभालने के लिए आपको एक और तालिका की आवश्यकता होगी।
OliverAsmus

जवाबों:


7

आपको संभावित उत्तरों और चयनित उत्तरों के बीच अंतर करने की आवश्यकता है।

Optionतालिका दो तालिकाओं की जरूरत है। Optionतालिका 1 होना चाहिए: M के लिए Questionऔर है कि प्रश्न के लिए संभव जवाब शामिल करना चाहिए।

फिर आपको एक नया चौराहा इकाई बनाने की आवश्यकता है, इसे कॉल करें Selected_Optionजो बीच में बैठता है Userऔर Option

यदि आपका प्रश्न उपयोगकर्ता को एक उत्तर के रूप में मान भरने का अवसर देता है (यानी "OTHER: ...") तो यह मान Selected_Optionतालिका में संग्रहीत किया जाएगा । अन्यथा उपयोगकर्ता द्वारा चुना गया मूल्य में पाया जाने वाला मूल्य होगा Option


संपादित करें:

ओपी की आवश्यकताओं के स्पष्टीकरण के आधार पर: आपको निम्नलिखित तरीकों से एक विशिष्ट प्रश्नावली मॉडल की आवश्यकता नहीं है:

  • आपके प्रश्नों के उत्तर (कॉलम) के समान सेट हैं
  • आपके कुछ उत्तर (कॉलम) एक साथ समूहीकृत किए गए हैं।
  • सवालों के ब्लॉक एक साथ समूहीकृत किए जाते हैं।

एक गाइड के रूप में आपके फॉर्म स्नैपशॉट को लेते हुए, मैंने आपके फॉर्म के तत्वों को उन संस्थाओं में विभाजित किया है, जिन्हें मैंने रंग कोडित किया है:

रंग कोडित फ़ॉर्म उदाहरण

इसे निम्न तार्किक ईआरडी द्वारा नियत किया जा सकता है:

तार्किक ईआरडी

ध्यान दें कि मैंने ईआरडी में संस्थाओं को कोडित करने के लिए आपके नमूना फॉर्म के स्नैपशॉट के अनुरूप कोडित किया है।

इस मॉडल में एक धारणा यह है कि प्रत्येक ब्लॉक में क्सेटिटन्स (यानी एक QUESTION_GROUP) का केवल एक सेट होता है जो ब्लॉक में बाएं हाथ के कॉलम से मेल खाता है। यह एक सरल धारणा है।


मैंने एक टिपिकल सर्वेक्षण प्रश्न की एक छवि के साथ अपने प्रश्न को अपडेट किया है।
वंसफैनलाइन

1
@VansFannel - मैंने आपके संपादित प्रश्न को दर्शाने के लिए अपना उत्तर अपडेट कर दिया है।
जोएल ब्राउन

आपका बहुत बहुत धन्यवाद! आपने मेरी बहुत मदद की है। मैंने अपने अंतिम डिज़ाइन को एक प्रश्न के रूप में यहाँ जोड़ा है: dba.stackexchange.com/questions/16066/… आप चाहें तो इसे चेक कर सकते हैं।
VansFannel

एक प्रश्न: इसका क्या अर्थ है "अनुक्रम" और "मूल्य"? मैंने ERD (क्षमा) के साथ इतना काम नहीं किया है।
VansFannel

@VansFannel - ERD में विशेषता नोट तालिकाओं में केवल गैर-तुच्छ (या गैर-स्पष्ट) कॉलम हैं। मुझे उम्मीद है कि आप अनुमान लगा लेंगे कि आईडी, एफके, विवरण इत्यादि कहां रखें, क्योंकि sequenceमैं सुझाव दे रहा हूं कि आपको उस आदेश को नियंत्रित करना होगा / जिसमें आइटम प्रदर्शित होते हैं। क्योंकि valueमैं इंगित कर रहा हूं कि एक उपयोगकर्ता-दर्ज मूल्य (केवल एक विकल्प चयन नहीं) उपयुक्त हो सकता है।
जोएल ब्राउन

13

सर्वे डेटाबेस स्कीमा।

यह एक वास्तविक क्लासिक है, जिसे हजारों लोगों ने किया है। वे हमेशा 'काफी सरल' लगते हैं, लेकिन अच्छा होने के लिए यह वास्तव में बहुत जटिल है। रेल में ऐसा करने के लिए मैं संलग्न चित्र में दिखाए गए मॉडल का उपयोग करूंगा। मुझे यकीन है कि यह कुछ के लिए जटिल लगता है, लेकिन एक बार जब आप इनमें से कुछ का निर्माण कर लेते हैं, तो आपको पता चलता है कि डिज़ाइन के अधिकांश निर्णय बहुत ही क्लासिक पैटर्न हैं, जिन्हें एक गतिशील लचीली डेटा संरचना द्वारा सर्वोत्तम रूप से संबोधित किया जाता है शुरू।
नीचे अधिक जानकारी:

यहाँ छवि विवरण दर्ज करें

मुख्य तालिकाओं के लिए तालिका विवरण

जवाब

जवाब तालिका महत्वपूर्ण के रूप में यह उपयोगकर्ताओं द्वारा वास्तविक प्रतिक्रियाओं कब्जा है। आप करने के लिए कि उत्तर लिंक पर ध्यान देंगे question_options , नहीं सवाल । यह जानबूझकर किया गया है।

input_types

input_types प्रश्नों के प्रकार हैं। प्रत्येक प्रश्न केवल 1 प्रकार का हो सकता है, जैसे सभी रेडियो डायल, सभी पाठ क्षेत्र (ओं), आदि के लिए अतिरिक्त प्रश्नों का उपयोग करें जब (कहते हैं) 5 रेडियो-डायल और 1 चेक बॉक्स के लिए "शामिल हैं?" विकल्प या इस तरह के कुछ संयोजन। उपयोगकर्ताओं के दो प्रश्नों को लेबल के रूप में देखें, लेकिन आंतरिक रूप से दो प्रश्न हैं, एक रेडियो-डायल के लिए, एक चेक बॉक्स के लिए। इस मामले में चेकबॉक्स में 1 का समूह होगा।

option_groups

option_groups और option_choices आपको 'सामान्य' समूह बनाने देते हैं। एक उदाहरण, एक अचल संपत्ति आवेदन में सवाल हो सकता है 'संपत्ति कितनी पुरानी है?'। जवाब श्रेणी में वांछित हो सकते हैं: 1-5 6-10 10-25 25-100 100+

फिर, उदाहरण के लिए, यदि आस-पास की संपत्ति की आयु के बारे में कोई सवाल है, तो सर्वेक्षण उपरोक्त श्रेणियों को फिर से उपयोग करना चाहेगा, ताकि उसी विकल्प_ग्रुप और विकल्पों का उपयोग किया जा सके।

मापन की इकाई

यूनिट्स_ऑफ़_मर्ज़ जैसा लगता है वैसा ही होता है। चाहे वह इंच, कप, पिक्सेल, ईंटें या कुछ भी हो, आप इसे एक बार यहां परिभाषित कर सकते हैं।

FYI करें: हालांकि प्रकृति में सामान्य, कोई भी इसके ऊपर एक एप्लिकेशन बना सकता है, और यह स्कीमा रूबी ऑन रेल्स फ्रेमवर्क के लिए अच्छी तरह से अनुकूल है, जिसमें प्रत्येक तालिका के लिए प्राथमिक आईडी के लिए "आईडी" जैसे सम्मेलनों की रूपरेखा है। इसके अलावा रिश्ते सभी सरल हैं one_to_many की जरूरत नहीं है कई_to_many या has_many के माध्यम से। मैं शायद has_many को जोड़ना चाहूंगा: थ्रू और / या: प्रतिनिधियों को हालांकि एक व्यक्ति के उत्तर से सर्वेक्षण_नाम जैसी चीजें आसानी से प्राप्त करें।


महान! आपके उत्तर के लिए धन्यवाद। मैं इसके साथ बहुत कुछ सीखूंगा। धन्यवाद।
VansFannel

बहुत बढ़िया जवाब। बहुत उपयोगी है क्योंकि मैं अभी इसी तरह की डिजाइन समस्या से लड़ रहा हूं। :)
डॉ। माइक

यह चयनित उत्तर होना चाहिए था। बहुत मददगार, धन्यवाद!
dsignr

@Michael "आप देखेंगे कि प्रश्नावली के लिंक का उत्तर, प्रश्न नहीं। यह जानबूझकर है।" क्या आप कृपया आगे स्पष्टीकरण प्रदान कर सकते हैं कि क्यों? :)
पाक

@ मिचेल हाय, बढ़िया जवाब! यदि आप HTML पृष्ठ में कुछ प्रश्नों के CSS को कस्टमाइज़ करने में सक्षम होंगे, तो आप यह कैसे करेंगे? मैंने अपनी कंपनियों की तालिका में एक CssFile संपत्ति बनाई है, लेकिन मुझे एक प्रश्न स्तर में अधिक विशिष्ट होने की आवश्यकता है। धन्यवाद।
पैट्रिक

2

इस सामान्य विचार पर एक नज़र डालें:

यहाँ छवि विवरण दर्ज करें

(केवल सबसे आवश्यक फ़ील्ड उपर्युक्त मॉडल में शामिल हैं, संक्षिप्तता के लिए।)

इस मॉडल में निम्नलिखित विशेषताएं हैं:

  • एक एकल प्रश्न को कई सर्वेक्षणों में साझा किया जा सकता है (और एकल सर्वेक्षण, निश्चित रूप से, कई प्रश्न हो सकते हैं)। SURVEY_QUESTION "लिंक" तालिका है जो इस M: N संबंध को लागू करती है।
  • सर्वेक्षण में प्रश्नों का क्रम SURVEY_QUESTION.QUESTION_NO द्वारा निर्धारित किया जाता है। चूंकि {SURVEY_NO, QUESTION_NO} एक (वैकल्पिक) कुंजी है, जिसे U1ऊपर दिए गए आरेख में दर्शाया गया है, कोई भी दो प्रश्न समान सर्वेक्षण में एक ही "स्लॉट" पर कब्जा नहीं कर सकते हैं। अलग-अलग सर्वेक्षण में अलग-अलग क्रम में एक ही प्रश्न हो सकते हैं।
  • प्रत्येक प्रश्न में संभावित उत्तर या "विकल्प" की एक श्रृंखला होती है। विकल्पों का दृश्य क्रम OPTION.OPTION_NO द्वारा निर्धारित किया जाता है, और चूंकि यह PK में है, इसलिए कोई भी दो विकल्प समान प्रश्न के तहत एक ही "स्लॉट" पर कब्जा नहीं कर सकते हैं।
  • विभिन्न उपयोगकर्ता एक ही प्रश्न के अलग-अलग उत्तर प्रदान कर सकते हैं (और निश्चित रूप से, एक उपयोगकर्ता कई प्रश्नों का उत्तर दे सकता है)। यह M: N संबंध "लिंक" तालिका ANSWER के माध्यम से कार्यान्वित किया जाता है।
  • उपयोगकर्ता अपने अधिकांश विकल्पों में से किसी एक को चुनकर प्रश्न का उत्तर देता है । यह ANSWER के PK से OPTION_NO को छोड़कर सुनिश्चित किया गया है। यदि आप उपयोगकर्ता को कई विकल्पों का चयन करने की अनुमति देना चाहते हैं, तो PK में OPTION_NO को शामिल करें।

इस डेटा मॉडल में कुछ भी नहीं है जो उपयोगकर्ता को सभी सवालों के जवाब देने के लिए मजबूर करता है - यह कुछ ऐसा है जिसे आपको आवेदन स्तर पर करना होगा। बहरहाल, इस मॉडल के लिए एक अच्छी शुरुआत होनी चाहिए कि आपको क्या करना है ...


मैंने एक टिपिकल सर्वेक्षण प्रश्न की एक छवि के साथ अपने प्रश्न को अपडेट किया है।
VansFannel

1

उपयोगकर्ताओं के उत्तरों को रखने के लिए आपको एक और तालिका की आवश्यकता होगी।

user_answers
------------
  user_answer_id - अद्वितीय प्राथमिक कुंजी
  user_id - उपयोगकर्ता तालिका के लिए FK
  चुना गया है
  question_id - FK to Question table

यदि आप तय करते हैं कि आप चाहते हैं कि उपयोगकर्ता "अन्य" को एक विकल्प के रूप में चुन सकें और अपने स्वयं के मूल्य में भर सकें, तो मैं इसके लिए एक अलग तालिका सुझाऊंगा:

user_alt_answers
----------------
  user_alt_answer_id - पीके
  alt_answer_text - वह पाठ जो उपयोगकर्ता ने "अन्य" विकल्प के लिए दर्ज किया है।
  user_answeR_id - FK to user_answers तालिका

मैंने एक टिपिकल सर्वेक्षण प्रश्न की एक छवि के साथ अपने प्रश्न को अपडेट किया है।
VansFannel

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.