การสร้างตารางใหม่แบบไดนามิกโดยยึดตามการป้อนข้อมูลของผู้ใช้มักไม่ใช่ความคิดที่ดี หากโครงสร้างพื้นฐานของฟอร์มเปลี่ยนแปลงตารางที่สร้างขึ้นแบบไดนามิกทั้งหมดจะต้องได้รับการอัปเดตเพื่อรวมคอลัมน์ใหม่หรือลบคอลัมน์เก่าออกและอาจทำให้เกิดอาการปวดหัวในการบำรุงรักษา จากนั้นก็มีปัญหาในการรู้ว่าตารางใดในการสืบค้น (ซึ่งอาจนำไปสู่ไดนามิก 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
ให้จัดเก็บตัวเลือกที่เป็นไปได้สำหรับรายการที่องค์ประกอบเหล่านี้มีตามปกติ