Динамические формы конструктора форм и базы данных? [закрыто]

30

Скажем, ваши пользователи могут создавать свои собственные веб-формы (текстовые поля, выборки и т. Д.) И публиковать их в Интернете, чтобы их пользователи могли заполнить их.

У кого-нибудь есть ресурс или какой-нибудь совет о том, как сконструировать базу данных, чтобы связать ее с динамическими формами?

Например, вы бы создали дочернюю таблицу для каждой формы или разные версии данной формы?

Джефф Борден
источник

Ответы:

35

Динамическое создание новых таблиц на основе пользовательского ввода обычно не очень хорошая идея. Если базовая структура форм изменится, все динамически созданные таблицы необходимо будет обновить, чтобы они включали новые столбцы или удаляли старые, что может вызвать проблемы с обслуживанием. Тогда возникает проблема с определением, какую таблицу запрашивать (что, вероятно, приведет к динамическому SQL, который открывает все новые проблемы). И, возможно, есть проблемы с производительностью, но я не уверен, насколько это будет плохо. Кроме того, таблица обычно используется для представления типа объекта (такого как «веб-форма») вместо того, чтобы иметь копии одной и той же таблицы для каждого нового экземпляра одного и того же объекта.

Я бы предложил одну таблицу для форм. Вам потребуется идентификатор в каждой форме, чтобы определить, чья это форма:

формы
-----
  id (PK)
  название
  owner_id (FK для users.id)
  (другие поля)

form_elements
-------------
  id (PK)
  form_id (от FK до forms.id)
  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для хранения возможных опций для списков, которые обычно имеют эти элементы.

FrustratedWithFormsDesigner
источник
2
Отличное решение. TY
Джефф Борден
Знаете ли вы о каких-либо существующих инструментах с графическим интерфейсом построителя веб-форм, которые можно использовать для случайного заполнения схемы таблицы, которую вы описали выше? Мы используем .NET, если это уместно. TY.
Джефф Борден
@JeffBorden: нет, но я уверен, что что-то есть.
FrustratedWithFormsDesigner
Итак, я предполагаю, что лучший способ записи отправленных форм будет с такой схемой: form_submissions id (PK) form_id (от FK до forms.id) user_id (от FK до users.id) ... form_submission_elements id (PK) form_submission_id (От FK до form_submissions.id) form_element_id (от FK до forms_elements.id) Значение Смотри правильно?
Джефф Борден
@FrustratedWithFormsDesigner Как выбрать для создания таблицы из полей формы и значений полей в этой схеме !?
Гермес Отран