การออกแบบฐานข้อมูลแบบสอบถาม - วิธีไหนดีกว่ากัน


15

ฉันมีหน้า html ยาวหนึ่งหน้าชุดคำถามหลายชุดแบ่งออกเป็นส่วนเล็ก ๆ (ประมาณ 15 ส่วนย่อยในหน้าเดียว) คำถามทั้งหมดมีประมาณ 100 คำถาม: แตกต่างกันไปจากอินพุตตัวเลือกหลายตัวเลือกช่องทำเครื่องหมายปุ่มตัวเลือกข้อความ และอัพโหลดไฟล์ คำถามหนึ่งข้ออาจมีคำตอบมากมายซึ่งได้มาจากกลุ่มของช่องทำเครื่องหมายกลุ่มของรายการที่เลือกกลุ่มของหลายตัวเลือกหรือทั้งหมดรวมกันเป็นคำตอบเดียว ฉันคิดว่าฉันจะใช้การออกแบบฐานข้อมูลด้านล่าง แต่พบว่าเมื่อเร็ว ๆ นี้ว่ามันไม่ใช่วิธีการที่ดี

  1. ลูกค้าหนึ่งรายสามารถมีคำถามได้หนึ่งชุดเท่านั้น: ลูกค้าหนึ่งรายต่อคำถาม 100 ข้อ
  2. สำหรับวิธีเก่าฉันไม่เก็บคำถามในฐานข้อมูล แต่กำหนดเป็นค่าคงที่ในการเข้ารหัส PHP แทน ปัญหาคือฉันต้องเปรียบเทียบคำถามใน PHP เพื่อให้ตรงกับคำตอบในฐานข้อมูล หากคำถามหนึ่งมีการเปลี่ยนแปลง / ลบ / ย้ายจาก PHP ฉันจะหลงทางเพื่อให้ตรงกับคำตอบในฐานข้อมูลแบบสอบถาม ทางออกที่ดีกว่า
  3. ฉันสามารถเก็บหลายคำตอบที่ได้รับจากองค์ประกอบหลายอย่างในรูปแบบลงในฟิลด์เดียวเป็นคำตอบเดียว ฉันจะดึงข้อมูลนี้และแสดงมันอีกครั้งเพื่อให้ลูกค้าดูในแบบฟอร์มได้อย่างไร?
  4. ฉันควรเลือกตัวเลือกใดด้านล่างนี้

ตัวเลือก 1: วิธีการแบบเก่า (1 ตาราง)

ตาราง: แบบสอบถาม

  • ID (PK)
  • รหัสลูกค้า
  • สถานะ
  • A1
  • A2
  • A3
  • .
  • .
  • .
  • A100

ตัวเลือกที่ 2: วิธีการใหม่ (2 ตาราง)

ตาราง: คำถาม

  • QID (PK)
  • คำถาม (varchar)

ตาราง: คำตอบ

  • เครื่องช่วย (PK)
  • รหัสลูกค้า
  • QID (int)
  • คำตอบ (varchar)

หรือตัวเลือก 3


คุณสามารถเพิ่มข้อมูลเพิ่มเติมเกี่ยวกับแอปพลิเคชันได้ไหม - สร้างแบบสอบถามแบบไดนามิกหรือไม่ IE: แบบสอบถามนี้ควรมีคำถามเหล่านี้ในขณะที่แบบสอบถามอื่นควรมีคำถามอื่น ๆ เหล่านี้ - มีคำถามสำหรับแบบสอบถามแบบไดนามิกหรือไม่ IE: ลูกค้าสามารถเพิ่มคำถามใหม่ได้ในภายหลัง ไม่ว่ามันจะเป็นระบบแบบไดนามิกหรือระบบคงที่คุณจะต้องเก็บผลลัพธ์ตอบคำถาม 1: 1 ต่างจาก 1: M คำถาม: คำตอบในฐานข้อมูล
Zambonilli

ใช่และไม่ใช่ตามลำดับ (คำถามแบบไดนามิกอาจมีในภายหลังในระยะที่ 2 แต่ไม่ใช่ตอนนี้)
โมดูลาร์

ฉันโหวตให้ปิดคำถาม 100 ข้อนี้: แตกต่างกันไปจากอินพุต, ตัวเลือกหลายตัว, ช่องทำเครื่องหมาย, ปุ่มตัวเลือก, textarea และการอัปโหลดไฟล์ที่กว้างเกินไปที่จะเป็นประโยชน์
Evan Carroll

คำตอบ:


17

แน่นอนว่าอย่าเขียนรหัสคำถามของคุณอย่างหนัก ใช้ฐานข้อมูลเชิงสัมพันธ์หรือไฟล์ xml ฉันเสนอตารางต่อไปนี้

  • Questionnaire: คำอธิบายทั่วไปของแบบสอบถาม ชื่อ, ชื่อของแบบสำรวจ, วันที่ออกแบบสอบถาม, รุ่นและอื่น ๆ

  • Section: มีการสร้างแบบสอบถามขึ้นในส่วนต่างๆ จำนวนของส่วนชื่อส่วนคำอธิบาย

  • Question: คำถามที่เป็นของส่วน จำนวนคำถามข้อความคำถามคำอธิบายประเภทคำถาม (ข้อความหลายตัวเลือก ฯลฯ )

  • Question_Choice: คำตอบที่เป็นไปได้ของคำถามที่เกี่ยวข้องกับช่องทำเครื่องหมายเดียวปุ่มตัวเลือกและอื่น ๆ ข้อความของตัวเลือกหมายเลขตัวเลือกคำสั่ง

  • Respondent: บุคคลที่ตอบคำถาม ข้อมูลส่วนบุคคลหมายเลขผู้ใช้

  • Interview: การสัมภาษณ์หรือการทดสอบหรือการสำรวจ (ขึ้นอยู่กับลักษณะของแบบสอบถาม) ที่เป็นของผู้ตอบหนึ่งคนและแบบสอบถามหนึ่งคำถาม หากผู้ตอบแบบสอบถามสามารถตอบแบบสอบถามได้เพียงแบบสอบถามเดียวเท่านั้น (หรือหากแบบสอบถามไม่ระบุชื่อ) ตารางนี้ล้าสมัยและสามารถรวมเข้ากับตารางผู้ตอบแบบสอบถามได้ วันสัมภาษณ์ (หรือวันทดสอบหรือวันที่สำรวจ) ผู้สัมภาษณ์ (ถ้ามี)

  • Answer: คำตอบที่เป็นของการสัมภาษณ์หนึ่งครั้ง (หรือผู้ตอบแบบสอบถาม, ดูด้านบน) และคำถามหนึ่งข้อ ตอบข้อความ (สำหรับคำถามประเภทข้อความ) ทางเลือก (สำหรับปุ่มตัวเลือก)

  • Answer_Choice: ตัวเลือกที่เป็นของหนึ่งคำตอบและหนึ่งคำถามที่เลือกเมื่อสามารถเลือกได้หลายตัวเลือก

นี่เป็นวิธีการปกติมาก อย่างไรก็ตามคุณสามารถเลือกที่จะต่อเชื่อมตัวเลือกต่างๆเข้าด้วยกันเป็นหนึ่งสายหรือเก็บไว้เป็นรูปแบบบิตหรือทำให้มันง่ายขึ้นด้วยวิธีอื่นตามความต้องการของคุณ


6

คุณต้องการตารางไม่กี่

1 - คำถาม (รหัสคำถาม, ประเภทอินพุต, มองเห็นได้, ประเภทคำถาม, ข้อความคำถาม, คำตอบที่คาดหวัง .... )

2 - คำตอบ (รหัสคำถาม, รหัสผู้ใช้, รหัสกิจกรรม, คำตอบ .... )

3 - ผู้ใช้ (ID ผู้ใช้ชื่อผู้ใช้ ...... )

4 - ตารางสำหรับเก็บคำถาม / คำตอบกิจกรรม (รหัสกิจกรรมข้อมูล / เวลารหัสผู้ใช้)

คุณอาจต้องการตารางที่ระบุคำถามที่ควรใช้สำหรับแต่ละกิจกรรม - จัดกลุ่มตามผู้ใช้หรืออาจจะรวบรวมคำถาม คีย์ต่างประเทศ / หลักจะเป็นคอลัมน์ที่มีชื่อเดียวกันในหลายตารางและควรทำดัชนี

หากคุณใช้โครงสร้างนี้คุณควรจะสามารถเพิ่มคำถามหรือผู้ใช้หรือเปลี่ยนคำตอบโดยไม่ต้องเปลี่ยนสคีมาหรือรหัสการนำเสนอของคุณ - ตรวจสอบให้แน่ใจว่ารหัสงานนำเสนอถูกสร้างขึ้นแบบไดนามิก ณ รันไทม์ - คุณเพียงแค่เพิ่มบันทึก ในสถานที่ที่เหมาะสม

วิธีนี้อาจใช้เวลานานกว่าในการพัฒนาเริ่มแรกกว่าวิธีการเข้ารหัสแบบยาก แต่จะง่ายกว่ามากในการรักษาเพราะคุณจะต้องเปลี่ยนข้อมูลเพื่อเปลี่ยนพฤติกรรม

(เคล็ดลับในการสร้างเลเยอร์การนำเสนอของคุณคุณจะต้องมีแบบสอบถามที่ได้รับคำถามที่เหมาะสมที่จะแสดงแล้ววนลูปผ่านชุดผลลัพธ์นี้และเรียกวิธีการแสดงคำถามบนหน้าจอวิธีการเลือกที่เหมาะสมกับ การนำเสนอของคำถามนั้น [กล่องข้อความกลุ่มวิทยุ ฯลฯ ])


+1 ไม่แน่ใจเกี่ยวกับตาราง # 4 แต่คำตอบที่ดีโดยรวม โดยเฉพาะฉันชอบการเปลี่ยนจากชื่อตารางเอกพจน์เป็นพหูพจน์เช่นคำถาม >> คำถาม
Leigh Riffel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.