Membuat tabel baru secara dinamis berdasarkan input pengguna biasanya bukan ide yang baik. Jika struktur dasar formulir berubah, semua tabel yang dibuat secara dinamis perlu diperbarui untuk menyertakan kolom baru atau yang lama dihapus, dan ini dapat menyebabkan sakit kepala pemeliharaan. Lalu ada masalah untuk mengetahui tabel mana yang ingin ditanyakan (yang mungkin akan mengarah ke SQL dinamis yang membuka semua masalah baru). Dan mungkin ada masalah kinerja juga, tapi saya tidak yakin seberapa buruk itu. Juga, tabel biasanya digunakan untuk mewakili tipe entitas (seperti "formulir web") daripada memiliki salinan dari tabel yang sama untuk setiap instance baru dari entitas yang sama.
Saya sarankan satu tabel untuk formulir. Anda akan memerlukan pengenal pada setiap formulir untuk mengidentifikasi bentuk siapa itu:
formulir
-----
id (PK)
nama
owner_id (FK to users.id)
(bidang lain)
form_elements
-------------
id (PK)
form_id (FK to forms.id)
element_type_id (FK to element_types.id)
keterangan
(bidang lain)
element_types
-------------
id (PK)
nama
element_list_values
-------------------
id (PK)
element_id (FK to form_elements.id)
nama
nilai
(bidang lainnya ??)
Aplikasi web Anda dapat memungkinkan pengguna membuat formulir yang akan disimpan dalam formstabel, dengan referensi ke pengguna yang dibuat (dengan asumsi bahwa Anda melacak pengguna sebagai entitas yang tepat). Formulir diisi dengan form_elementsreferensi formstabel sehingga mereka tahu bentuk mana yang mereka milik, dan element_typessehingga mereka tahu jenis mereka. element_typesakan menyimpan daftar statis (kebanyakan) elemen-elemen berbeda yang bisa dimiliki formulir. Jenis dapat berupa: "text_field", "drop_down_list", "radio_buttons", "checkbox". Untuk jenis seperti "drop_down_list" dan "radio_buttons", Anda akan memerlukan tabel tambahan, mungkin dipanggil element_list_valuesuntuk menyimpan opsi yang mungkin untuk daftar yang biasanya dimiliki elemen-elemen ini.