รูปแบบตัวสร้างแบบไดนามิกและการออกแบบฐานข้อมูล? [ปิด]


30

สมมติว่าผู้ใช้ของคุณสามารถสร้างฟอร์มบนเว็บของพวกเขาเอง (กล่องข้อความเลือก ฯลฯ ) และเผยแพร่บนเว็บเพื่อให้ผู้ใช้กรอกข้อมูล

ใครบ้างมีทรัพยากรหรือคำแนะนำเกี่ยวกับวิธีการออกแบบฐานข้อมูลเพื่อผูกลงในแบบฟอร์มแบบไดนามิกหรือไม่

ตัวอย่างเช่นคุณจะสร้างตารางลูกสำหรับแต่ละฟอร์มหรือรุ่นที่แตกต่างกันของฟอร์มที่กำหนดหรือไม่


คำตอบ:


35

การสร้างตารางใหม่แบบไดนามิกโดยยึดตามการป้อนข้อมูลของผู้ใช้มักไม่ใช่ความคิดที่ดี หากโครงสร้างพื้นฐานของฟอร์มเปลี่ยนแปลงตารางที่สร้างขึ้นแบบไดนามิกทั้งหมดจะต้องได้รับการอัปเดตเพื่อรวมคอลัมน์ใหม่หรือลบคอลัมน์เก่าออกและอาจทำให้เกิดอาการปวดหัวในการบำรุงรักษา จากนั้นก็มีปัญหาในการรู้ว่าตารางใดในการสืบค้น (ซึ่งอาจนำไปสู่ไดนามิก SQL ซึ่งเปิดปัญหาใหม่ทั้งหมด) และอาจมีปัญหาเกี่ยวกับประสิทธิภาพด้วย แต่ฉันก็ไม่แน่ใจว่ามันจะแย่ขนาดไหน นอกจากนี้ตารางมักใช้เพื่อแสดงประเภทของเอนทิตี (เช่น "เว็บฟอร์ม") แทนที่จะมีสำเนาของตารางเดียวกันสำหรับแต่ละอินสแตนซ์ใหม่ของเอนทิตีเดียวกัน

ฉันขอแนะนำตารางเดียวสำหรับแบบฟอร์ม คุณจะต้องมีตัวระบุในแต่ละแบบฟอร์มเพื่อระบุว่าเป็นแบบฟอร์มใด:

รูปแบบ
-----
  id (PK)
  ชื่อ
  owner_id (FK ถึงผู้ใช้ id)
  (สาขาอื่น ๆ )

form_elements
-------------
  id (PK)
  form_id (FK เป็น formidid)
  element_type_id (FK ถึง element_types.id)
  คำบรรยายภาพ
  (สาขาอื่น ๆ )

element_types
-------------
  id (PK)
  ชื่อ

element_list_values
-------------------
  id (PK)
  element_id (FK ถึง form_elements.id)
  ชื่อ
  ราคา
  (สาขาอื่น ๆ ??)

เว็บแอปพลิเคชันของคุณสามารถให้ผู้ใช้สร้างฟอร์มซึ่งจะถูกบันทึกในformsตารางโดยมีการอ้างอิงถึงผู้ใช้ที่สร้างขึ้น (สมมติว่าคุณกำลังติดตามผู้ใช้เป็นเอนทิตีที่เหมาะสม) ฟอร์มนั้นบรรจุด้วยform_elementsการอ้างอิงformsตารางนั้นเพื่อให้พวกเขารู้ว่าพวกเขาอยู่ในรูปแบบใดและelement_typesเพื่อให้พวกเขารู้ว่าพวกเขาเป็นประเภทใด element_typesจะเก็บรายการแบบสแตติก (ส่วนใหญ่) ขององค์ประกอบต่าง ๆ ที่ฟอร์มสามารถมีได้ ประเภทอาจเป็น: "text_field", "drop_down_list", "radio_buttons", "checkbox" สำหรับประเภทเช่น "drop_down_list" และ "radio_buttons" คุณจะต้องมีตารางเพิ่มเติมซึ่งอาจถูกเรียกelement_list_valuesให้จัดเก็บตัวเลือกที่เป็นไปได้สำหรับรายการที่องค์ประกอบเหล่านี้มีตามปกติ


2
ทางออกที่ดี TY
Jeff Borden

คุณรู้จักเครื่องมือ GUI ของตัวสร้างเว็บฟอร์มใด ๆ ที่มีอยู่เพื่อใช้ในการเติมสคีมาของตารางที่คุณระบุไว้ข้างต้นโดยบังเอิญหรือไม่? เรากำลังใช้. NET หากเกี่ยวข้อง TY
Jeff Borden

@JeffBorden: ไม่ แต่ฉันแน่ใจว่ามีบางอย่างที่นั่น
FrustratedWithFormsDesigner

ดังนั้นฉันสมมติว่าวิธีที่ดีที่สุดในการบันทึกแบบฟอร์มที่ส่งจะมีสคีมาเช่น: form_submissions id (PK) form_id (FK ถึง forms.id) user_id (FK ถึงผู้ใช้ id) ... form_submission_elements id (PK) form_submission_id (FK ถึง form_submissions.id) ค่า form_element_id (FK ถึง form_elements.id) ค่าดูถูกต้องใช่ไหม?
Jeff Borden

@FrustratedWithFormsDesigner การเลือกเพื่อสร้างตารางจากเขตข้อมูลฟอร์มและค่าเขตข้อมูลในสคีมานี้จะเป็นอย่างไร
Hermes Autran
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.