Intereting Posts
SQL задает значения одного столбца, равного значениям другого столбца в той же таблице Разделить разделительную строку с разделителями на несколько столбцов и создать записи Определение столбца SQL: значение по умолчанию, а не null избыточное? Использование libpqxx для хранения данных навалом или использование оператора COPY в libpqxx Результаты Powershell Get-QADUser для таблицы SQL IndexDB, WebSQL через 4 месяца Как написать инструкцию MYSQL CASE WHEN с несколькими условиями поиска? Есть ли общий способ SQL для получения имен таблиц и создания таблиц? MYSQL Выбор возвратно-поступательных данных? PostgreSQL не использует частичный индекс Как отсортировать столбец VARCHAR на SQL-сервере, который содержит числа? Нельзя использовать круглые скобки при вызове Sub эффективно транспонировать с помощью proc sql SQL: прерывание запроса Вычисление и отображение Age Column на Sql Server as (xx Years, xx months)

Разработка базы данных для построителя пользовательских форм (и хранения результатов)

Я пытаюсь реализовать собственный построитель форм, аналогичный тем, которые предоставляются Wufoo и Google .

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

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

Вопросы:

  1. Есть ли лучший способ сохранить дизайн формы?
  2. Какие структуры данных / модели будут соответствовать сохранению результатов формы? Я видел, что EAV может быть возможностью, но из-за различных типов входных данных (выпадающего списка, checkbox, text, textarea) это может стать утомительным.
  3. Какая структура упростит поиск и позволит использовать предложения WHERE? Приведенный пример JSON не позволяет мне делать это так же хорошо

    EAV является допустимым вариантом – он может быть сложным и неудобным с тем, что эффективно становится нетипизированными данными.

    XML с XPath также можно было бы выбрать: http://dev.mysql.com/tech-resources/articles/xml-in-mysql5.1-6.0.html

    Я думаю, что в большинстве случаев вам потребуется генерировать динамический SQL, если поля для поиска могут отличаться.

    EAV работает достаточно хорошо, так как вы часто можете отображать значения карты в несколько базовых типов. В личном проекте у нас есть таблица с:

    entity_id : INTEGER REFERENCES entities(id) attr_id : INTEGER REFERENCES attributes(id) value_bool : BOOLEAN value_int : INTEGER value_string : VARCHAR value_text : TEXT 

    И информация о attr_id хранится в другой таблице, где мы можем найти тип и имя атрибута и т. Д. Также разница между строкой и текстом заключается в том, что текст может содержать индекс поиска «полный текст», а строка – только индексация основного соответствия.

    Когда вы хотите запросить attrbute, вы посмотрите его в таблице атрибутов, а затем сконструируете запрос, установив правильное условие типа WHERE attr_id = 12 AND value_string = 'sfds'.

    Чтобы ускорить запросы, сделайте условный индекс на двух столбцах, например:

     CREATE INDEX test ON eav(attr_id, value_int) WHERE value_int IS NOT NULL; 

    Альтернативой также является создание пользовательской функции db, которая может индексировать и искать столбец, содержащий поле JSON. Гораздо труднее работать …