Динамическое создание новых таблиц на основе пользовательского ввода обычно не очень хорошая идея. Если базовая структура форм изменится, все динамически созданные таблицы необходимо будет обновить, чтобы они включали новые столбцы или удаляли старые, что может вызвать проблемы с обслуживанием. Тогда возникает проблема с определением, какую таблицу запрашивать (что, вероятно, приведет к динамическому 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
для хранения возможных опций для списков, которые обычно имеют эти элементы.