Как да проектираме тези две маси?

Искам да създам приложение, което позволява на потребителя да изгради свой собствен формуляр(и).
Потребителят може да въвежда данни във формуляра си и да прави запитвания към данните. Формулярът може да се редактира, след като бъде създаден и използван ( добавяне/премахване на полета от него ). Формулярът може да има малко текстово поле, голямо текстово поле, единичен списък, квадратче за отметка или падащо меню.

Четох и разпитвах кой подход е по-добър за изграждане на този вид бази данни и не получих прав/добър отговор. Прочетох, че в този вид приложение дизайнът, базиран на колони (и представянето на всяко поле като колона), не е добра идея, тъй като потребителят може да добавя много полета и това не е добра идея, тъй като трябва да има ограничение за броя на колоните в таблица. Не мога обаче да знам предварително колко полета ще добави потребителят. (Не съм сигурен какво означават. Ще помогне много, ако обясните допълнително, като дадете пример.)

Мислех, че добра идея може да е да групирате полетата според техните типове. (тип 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