Bentuk pembangun formulir dinamis dan desain basis data? [Tutup]

30

Katakanlah pengguna Anda dapat membuat formulir berbasis web mereka sendiri (kotak teks, pilih, dll) dan mempublikasikannya di web untuk diisi oleh pengguna mereka.

Adakah yang punya sumber daya atau saran tentang bagaimana membuat arsitek basis data untuk diikat ke dalam formulir dinamis?

Misalnya, apakah Anda akan membuat tabel anak untuk setiap formulir, atau versi berbeda dari formulir yang diberikan?

Jeff Borden
sumber
Saya suka posting ini: Membuat Antarmuka Pengguna Berbasis Data Dinamis
felipsmartins

Jawaban:

35

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.

FrustratedWithFormsDesigner
sumber
2
Solusi bagus TY
Jeff Borden
Apakah Anda tahu ada alat GUI pembangun formulir web yang ada untuk digunakan untuk mengisi skema tabel yang Anda uraikan di atas secara kebetulan? Kami menggunakan .NET jika relevan. TY.
Jeff Borden
@ Jeff Jorden: Tidak, tapi saya yakin ada sesuatu di luar sana.
FrustratedWithFormsDesigner
Jadi saya berasumsi bahwa cara terbaik untuk merekam formulir yang dikirimkan adalah dengan skema seperti: form_submissions id (PK) form_id (FK to forms.id) user_id (FK to users.id) ... form_submission_elements id (PK) form_submission_id (FK to form_submissions.id) form_element_id (FK to form_elements.id) nilai Tampak kan?
Jeff Borden
@FrustratedWithFormsDesigner Bagaimana cara memilih untuk menghasilkan tabel dari bidang formulir dan nilai bidang dalam skema ini !?
Hermes Autran