Правильный способ хранения пользовательских данных в SQL

Я хочу создать онлайн-конструктор форм, похожий на wufoo, который позволяет пользователям создавать и публиковать свои собственные веб-формы. Каждое представление должно быть сохранено в базе данных, где пользователь может впоследствии получить представление.

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

Я хотел бы иметь один тип поля таблицы, который содержит каждый тип поля, доступного для пользователей, т.е. textfield, emailfield и т. д.

Одна базовая таблица, которая будет содержать каждый идентификатор формы, URL и т. Д.

После этого у меня будет таблица полей формы, которая будет содержать ссылку на базовую форму и тип поля, эта таблица также может включать настраиваемую проверку для каждого поля.

Этот дизайн хорош в качестве базовой структуры? Я полагаю, что будет легко добавить новые типы полей в приложение, однако я не знаю, каковы потенциальные недостатки, так как я далеко не эксперт по SQL.

2 ответа

Решение

хранить пользовательские данные в SQL

Я думаю, что вы ищете модель базы данных Entity–attribute–value, в которой:

Основная идея заключается в хранении атрибутов и их соответствующих значений в виде строк в одной таблице.

Обычно таблица имеет как минимум три столбца: сущность, атрибут и значение. Хотя, если существует только одна релевантная сущность, например, таблица для конфигурации приложения или настройки параметров, столбец сущности может быть исключен.

Смотрите эти страницы как начало:

Я пометил ваш вопрос тегом /questions/tagged/entity-attribute-value, в котором вы можете просмотреть множество тем, относящихся к вашему делу.

Как пишет Махмуд Гамаль, модель, которую вы описываете, является "сущность / атрибут / ценность"; Как пишет Борис, с этой моделью известно много проблем.

В качестве альтернативы вы можете рассмотреть возможность сохранения записей формы в "документе" - например, XML или JSON - в реляционной модели.

Например, у вас может быть таблица в соответствии с:

FORM_SUBMISSION
--------------------
Submission_ID (pk)
Client_ID (fk to clients table)
Submission_date
SubmissionDocument

Я использую "клиент" для представления пользователей, которые создают форму; чтобы получить все представления для данного клиента, вы используете предложение where для client_id.

Эта модель усложняет выполнение SQL-запросов к отправке формы (хотя это становится сложным и для EAV, когда выходят за рамки очень простых запросов), но значительно упрощает постоянное решение.

Другие вопросы по тегам