Как спроектировать эти две таблицы?

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

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

Я подумал, что хорошей идеей может быть группировка полей в соответствии с их типами. (тип 1: текстовое поле, тип 2: раскрывающийся список, тип 3: один список... и так далее). Я хочу спроектировать свои таблицы, чтобы я мог обновить свое приложение и добавить новый тип в любое время, когда захочу, без ИЗМЕНЕНИЯ моей схемы. Поэтому я подумал о том, чтобы иметь 2 таблицы, одну таблицу для хранения метаданных о поле: его тип, его имя, его положение, возможно, в форме, и другую таблицу для хранения фактического значения поля. Кажется, я не знаю, что именно должно быть в этих таблицах и как их правильно оформить. Ваша помощь высоко ценится.


person PeacefulSoul    schedule 11.12.2010    source источник
comment
Мирный, какова цель приложения? Если я правильно понимаю, вы хотите, чтобы любой пользователь мог создать свою собственную форму, которую, предположительно, другие могут использовать для заполнения информации? Было бы правильно думать об этом как о своего рода «SurveyMonkey», где люди могут создавать опросы для других?   -  person sscirrus    schedule 12.12.2010
comment
Последняя часть вашего вопроса является ответом на ваш вопрос. Одна таблица описывает поля формы, а другая содержит значения ответов. Эти различные фрагменты метаданных (тип, имя, положение) являются столбцами таблицы метаданных.   -  person Dan Grossman    schedule 12.12.2010
comment
Да, я знаю ! но я не знаю, что именно поместить в эти две таблицы, чтобы, если я захочу позже добавить другой тип ... мне не придется изменять схему ... скажем, сначала у меня были только текстовые поля и один список ... затем после. .Я решил позволить пользователям использовать раскрывающееся меню... какими должны быть эти две таблицы, чтобы дать мне гибкость в добавлении новых типов без изменения схемы.. лучше сказать, достаточно ли этих 2-х таблиц??   -  person PeacefulSoul    schedule 12.12.2010
comment
возможный дубликат , потерянный при разработке этих таблиц!   -  person agf    schedule 25.08.2011


Ответы (1)


**Form**     A Form Template
----
formID (PK)
authorID
Name



**FormField**    =  1 row for each new question on the form
----------   
FormFieldID (PK)
FormID   (FK)
FieldID  (FK)
SortOrder  INT


**FormFieldOptions**     - if the form field is a selectbox this will store the options availble to pick from
---------------
FormFieldID   (fk)
Name
SortOrder  INT


**Field**            -- The will be Text Short, Text Long, Checkbox, Radiobutton, Selectbox etc
------
FieldID   (PK)
Name      
TYPE    

То есть для создания форм. Для сохранения ответов/ответов пользователей на форму оставлю для упражнения для читателя ;)

person Daveo    schedule 13.12.2010