2013-06-13 4 views
2

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

Я хочу, чтобы пользователь динамически создавал новые поля (с Javascript) для проекта (базовую форму) и выбирал пользовательские значения для каждого поля.

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

Значения (которые динамически создаются пользователем), скорее всего, будут основными данными, такими как имя, телефон, электронная почта и т. Д. Но есть также варианты для конкретных данных, таких как еда, адрес и т. Д. Я хочу, чтобы чтобы пользователь мог запрашивать любые данные, которые он видит необходимыми.

Итак, как мне создать структуру моей базы данных? Я не могу быть уверен, что и сколько полей пользователь собирается выбрать для своего проекта, я думал об этом приложении в традиционной реляционной базе данных, скорее всего Postgres или Mysql.

Нужно ли создавать столбцы для всех данных, которые я могу придумать (или разрешить пользователю создавать), или это можно сделать каким-то другим способом?

+0

Я просто скажу, что у нас есть что-то вроде этого, где я работаю, и это страшная боль, связанная с кодом и интерпретация данных. Если вы можете сделать то, что хотите, более структурированным способом, я сначала скажу об этом, но если не EAV, возможно, это хороший старт. – Leeish

+0

Спасибо всем, кто нашел время ответить на этот вопрос. Загляните в каждое решение и попытайтесь выяснить, что лучше для этого проекта. – stormpat

ответ

1

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

1

Ваша база данные должны содержать следующие столбцы в таблице для формы спецификации:

  • имени (имя поля, используемую как «имя» attrubute поля ввода формы в)
  • этикетке (Описание для печати в форме)
  • формате (если вы хотите, чтобы отличить вЫБИРАЕТ/входы/флажков)
  • проверки (если вы хотите, набор правил проверки)
  • value_type (INT/строка/дата/и т.д .. - typ e значения для принятия от пользователя. полезные для проверки)
1

Один из возможных вариантов:

стол: входы

  • Описание: накапливает различные типы входов (выбрать, выбрать несколько, вход, флажок, радио)
  • Поля:inputtypeid (первичный), input_type, status

стол: поля

  • Описание: Магазины отдельные поля, которые создал владелец проекта.
  • Поля:fieldid (первичные), inputtypeid (реф входы), label

таблица: значения

  • Описание: Stores значения (по умолчанию, и введенные пользователем) для полей.
  • Поля:valueid (первичные), fieldid (реф поля), value, default (BOOL да/нет)

стол: project_forms

  • Описание: Хранит список поля, применимые к проекту.
  • Поля:pfid (первичные), projid (ссылка проекта), fieldid (реф входы)

Одна заметка здесь. Убедитесь, что вы следите за тем, чтобы пользователи не могли хранить личную информацию в чем-то подобном. Или если вы это сделаете, убедитесь, что вы берете необходимые меры предосторожности для защиты этих данных, что немного отличается в этой настройке, чем в большинстве случаев.

1

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

  1. Определите, какие данные должны быть частью каждой формы (Id, submitter, datetime представления, название проекта, телефон) Сделайте эти столбцы элементов данных в своей таблице.
  2. Создайте дополнительный столбец для сериализованных данных. Здесь вы храните дополнительные атрибуты.

(только 1 стол требуется)

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

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

Смежные вопросы