ما هي جداول قاعدة بيانات MySQL وتدعم العلاقات سؤال وجواب مع الأسئلة الشرطية؟ [مغلق

StackOverflow https://stackoverflow.com/questions/540885

سؤال

أنا أعمل على نظام مسح بسيط إلى حد ما الآن. سيكون مخطط قاعدة البيانات بسيطا: Survey الجدول، في علاقة واحدة إلى كثير مع Question الجدول، وهو في علاقة واحدة إلى كثير مع Answer الجدول ومع PossibleAnswers جدول.

أدرك العميل مؤخرا أنها تريد القدرة على إظهار بعض الأسئلة فقط للأشخاص الذين أعطوا إجابة واحدة معينة على بعض السؤال السابق (على سبيل المثال. هل تشتري السجائر؟ سوف يتبعها ما هي ماركة السجائر المفضلة لديك؟, ، ليس هناك أي وقت من طرح السؤال الثاني إلى غير مدخن).

بدأت الآن أتساءل ماذا ستكون أفضل طريقة لتنفيذ هذا الشرط أسئلة من حيث مخطط قواعد البيانات الخاصة بي؟ إذا question A لديه 2 إجابات محتملة: A و B، و question B يجب أن تظهر فقط للمستخدم إذا الجواب كان A?

تحرير: ما أبحث عنه هو وسيلة لتخزين هذه المعلومات حول المتطلبات في قاعدة البيانات. من المحتمل أن يتم التعامل مع البيانات على جانب التطبيق، حيث تمتص مهارات SQL الخاصة بي؛)

هل كانت مفيدة؟

المحلول

تصميم قاعدة بيانات المسح

آخر تحديث: 5/3/2015
الملفات الرسم البيانية وملفات SQL متاحة الآن في https://github.com/durrantm/survey.

enter image description here

إذا كنت تستخدم الإجابة هذه (أعلى) أو أي عنصر، فيرجى إضافة ملاحظات حول التحسينات !!!

هذا كلاسيكي حقيقي، فعله الآلاف. يبدو أنهم دائما "بسيطة إلى حد ما" للبدء ولكن ليكون جيدا في الواقع مجمع للغاية. للقيام بذلك في القضبان، أود استخدام النموذج الموضح في المخطط المرفق. أنا متأكد من أنه يبدو أن الطريقة المعقدة بالنسبة للبعض، ولكن بمجرد أن تقوم ببناء عدد قليل من هذه، على مر السنين، تدرك أن معظم قرارات التصميم هي أنماط كلاسيكية للغاية، والأفضل معالجتها بواسطة هيكل بيانات ديناميكي مرن في البداية.
مزيد من التفاصيل أدناه:

تفاصيل الجدول للجداول الرئيسية

إجابات

ال إجابات الجدول أمر بالغ الأهمية لأنه يلتقط الردود الفعلية من قبل المستخدمين. ستلاحظ أن الإجابات يرتبط السؤال:, ، ليس أسئلة. وبعد هذا مقصود.

input_types.

input_types. هي أنواع الأسئلة. يمكن أن يكون كل سؤال فقط من نوع واحد فقط، مثل جميع الأوجه الراديوية، وجميع حقل النصوص النصية، وما إلى ذلك. استخدم أسئلة إضافية عند وجود (Say) 5 خانة اختيار راديو و 1 ل "تشمل؟" الخيار أو بعض هذه المجموعة. قم بتسمية الأسئلةتين في عرض المستخدمين كواحد ولكن داخليا لديك سؤالان، واحدة للطلب الراديوي، واحد خانة الاختيار. ستحصل مربع الاختيار مجموعة من 1 في هذه الحالة.

Option_Groups.

Option_Groups. و option_choices. تتيح لك بناء مجموعات "مشتركة". مثال واحد، في تطبيق عقاري قد يكون هناك سؤال "كم عمر الممتلكات؟". قد تكون الإجابات مرغوبة في النطاقات: 1-5 6-10 10-25 25-100 100+

ثم، على سبيل المثال، إذا كان هناك سؤال حول عصر الممتلكات المجاورة، فسوف يرغب المسح في "إعادة استخدام" النطاقات المذكورة أعلاه، حتى يتم استخدام نفس Option_Group والخيارات.

وحدات القياس

وحدات القياس هو كما يبدو. سواء كانت بوصة أو أكواب أو بكسل أو الطوب أو أيا كان، يمكنك تحديدها مرة واحدة هنا.

لمعلوماتك: على الرغم من أنه عام في الطبيعة، يمكن للمرء إنشاء تطبيق على رأس هذا، وهذا المخطط مناسب تماما ل روبي على القضبان إطار مع اتفاقيات مثل "معرف" للمفتاح الأساسي لكل طاولة. أيضا العلاقات هي جميعها بسيطة One_to_many مع عدم وجود عدد منها حاجة ماسة إليها. ربما أضيف Has_many: المندوبون و / أو: المندوبون على الرغم من الحصول على أشياء مثل Survey_Name من إجابة فردية بسهولة دون. multiple.chaining.

نصائح أخرى

يمكنك أيضا التفكير في قواعد معقدة، والحصول على حقل شرط بناء على طاولة أسئلتك، وقبول / تحليل أي من هذه:

  • (1) = 3
  • (((1) = 3) و (A (2) = 4))
  • (3)> 2
  • ((3) = 1) و (A (17)! = 2) و C (1)

حيث يعني (x) = y "إجابة السؤال x هي y" و c (x) يعني حالة السؤال x (الافتراضي صحيح) ...

تحتوي الأسئلة على حقل أمر، وسوف تذهب من خلالهم واحدا تلو الآخر، تخطي الأسئلة التي تكون فيها الحالة خطأ.

يجب أن يسمح ذلك بإجراء استطلاعات من أي تعقيد تريده، يمكن لوجوي GUI تلقائيا إنشاء هذه تلقائيا في "الوضع البسيط" والسماح ب "الوضع المتقدم" حيث يمكن للمستخدم إدخال المعادلات مباشرة.

طريقة واحدة هي إضافة "متطلبات الأسئلة" مع الحقول:

  • سؤال Quication_id (رابط "ما هي العلامة التجارية؟" سؤال)
  • مطلوب_ question_id (رابط "هل تدخن؟" سؤال)
  • Result_answer_id (رابط إلى إجابة "نعم")

في التطبيق، يمكنك التحقق من هذا الجدول قبل أن تشكل سؤالا معينا. مع جدول منفصل، من السهل إضافة إجابات مطلوبة (إضافة صف آخر للإجابة "أحيانا" إلخ ...)

شخصيا، في هذه الحالة، أود استخدام الهيكل الذي وصفته واستخدام قاعدة البيانات كآلية تخزين غبية. أنا من محبي وضع هذه القيود المعقدة والمكونة في طبقة التطبيق.

أعتقد أن الطريقة الوحيدة لفرض هذه القيود دون بناء جداول جديدة لكل سؤال مع مفاتيح أجنبية للآخرين، هي استخدام الاشياء T-SQL أو غيرها من آليات البائع المحددة لبناء مشغلات قاعدة البيانات لفرض هذه القيود.

عند مستوى التطبيق، حصلت على المزيد من الاحتمالات، ومن الأسهل المنفذ، لذلك أود أن أفضل هذا الخيار.

آمل أن يساعدك ذلك في العثور على استراتيجية لتطبيقك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top