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 forms
tabel, dengan referensi ke pengguna yang dibuat (dengan asumsi bahwa Anda melacak pengguna sebagai entitas yang tepat). Formulir diisi dengan form_elements
referensi forms
tabel sehingga mereka tahu bentuk mana yang mereka milik, dan element_types
sehingga mereka tahu jenis mereka. element_types
akan 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_values
untuk menyimpan opsi yang mungkin untuk daftar yang biasanya dimiliki elemen-elemen ini.