Скажем, ваши пользователи могут создавать свои собственные веб-формы (текстовые поля, выборки и т. Д.) И публиковать их в Интернете, чтобы их пользователи могли заполнить их.
У кого-нибудь есть ресурс или какой-нибудь совет о том, как сконструировать базу данных, чтобы связать ее с динамическими формами?
Например, вы бы создали дочернюю таблицу для каждой формы или разные версии данной формы?
architecture
database
webforms
Джефф Борден
источник
источник
Ответы:
Динамическое создание новых таблиц на основе пользовательского ввода обычно не очень хорошая идея. Если базовая структура форм изменится, все динамически созданные таблицы необходимо будет обновить, чтобы они включали новые столбцы или удаляли старые, что может вызвать проблемы с обслуживанием. Тогда возникает проблема с определением, какую таблицу запрашивать (что, вероятно, приведет к динамическому SQL, который открывает все новые проблемы). И, возможно, есть проблемы с производительностью, но я не уверен, насколько это будет плохо. Кроме того, таблица обычно используется для представления типа объекта (такого как «веб-форма») вместо того, чтобы иметь копии одной и той же таблицы для каждого нового экземпляра одного и того же объекта.
Я бы предложил одну таблицу для форм. Вам потребуется идентификатор в каждой форме, чтобы определить, чья это форма:
Ваше веб-приложение может позволить пользователям создавать формы, которые будут сохраняться в
forms
таблицах, со ссылкой на созданного пользователя (при условии, что вы отслеживаете пользователей как правильные объекты). Форма заполняетсяform_elements
этой ссылкой наforms
таблицу, чтобы они знали, к какой форме они принадлежат, иelement_types
поэтому они знают, к какому типу они относятся.element_types
будет хранить статический (в основном) список различных элементов, которые может иметь форма. Типы могут быть: «text_field», «drop_down_list», «radio_buttons», «checkbox». Для таких типов, как «drop_down_list» и «radio_buttons», вам понадобится дополнительная таблица, которая может быть вызванаelement_list_values
для хранения возможных опций для списков, которые обычно имеют эти элементы.источник