Как спроектировать базу данных для реляционных динамических форм?

Мои требования:

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

отправленная форма Например: штатная форма:

  1. Имя (текстовое поле)
  2. Фамилия (текстовое поле)
  3. Отдел (выпадающий) -> должен быть привязан к форме отдела

Форма отдела:

  1. Название отдела (выпадающий)

Дополнительная информация:

  • Моя база данных является сервером SQL
  • Я ищу производительность
  • Каждая таблица может иметь более миллиона записей
  • В нашей системе более 1000 пользователей
  • Нам нужно получать разные отчеты по отправленной записи пользователем
  • Отчеты должны иметь функцию фильтрации по всем столбцам

Опции:

  1. Создать одну таблицу на форму
  2. добавьте 2 таблицы для структуры формы и структуры поля, затем еще 2 таблицы для значения-представленной формы и значения-представленного поля

Любой другой вариант или идея?

1 ответ

Ну, я бы, вероятно, создал структуру базы данных, например:

-- This table will hold the forms
CREATE TABLE tblForm
(
      Form_Id int IDENTITY(1,1) PRIMARY KEY
    , Form_Name varchar(100)
    -- Any other form related data such as create date, owner etc`
)

-- This table will hold the input types (i.e text box, combo box, radio buttons etc`)
CREATE TABLE tblInputType
(
      InputType_Id int IDENTITY(1,1) PRIMARY KEY
    , InputType_Name varchar(100)
)

-- This table will hold the inputs used in the form
CREATE TABLE tblFormInput
(
      FormInput_Id int IDENTITY(1,1) PRIMARY KEY
    , FormInput_Form int FOREIGN KEY REFERENCES tblForm(Form_Id)
    , FormInput_InputType int FOREIGN KEY REFERENCES tblInputType(InputType_Id)
    , FormInput_Name varchar(100)
    , FormInput_DisplayOrder numeric(18,18)
    , FormInput_DefaultText varchar(100)
)

-- This table will hold the texts and values used for combo boxes, radio buttons, check boxes etc`
CREATE TABLE tblFormInputExtraData
(
      FormInputExtraData_FormInput int FOREIGN KEY REFERENCES tblFormInput(FormInput_Id)
    , FormInputExtraData_Text varchar(100)
    , FormInputExtraData_Value varchar(100)
)

Точки интереса:

  1. Я использовал varchar(100) для всех текстовых данных, как произвольное число для этого примера. Вы должны выбрать подходящую длину контента для вашего приложения.

  2. Я использовал varchar также для хранения значений входов, таких как поля со списком и переключатели, поскольку это легко. Если вы намереваетесь использовать нетекстовые значения (например, объекты.Net или изображения), вам следует изменить этот тип данных на тот, который соответствует вашим потребностям - на ум приходят xml и varbinary.

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