У меня есть веб-приложение, в котором пользователь может создавать формы данных на лету. Приложение находится в ASP.NET с MSSQL в бэкэнде. Чтобы создать форму, пользователь должен указать поля для формы. Чтобы добавить поле, пользователь должен указать метку поля, тип поля, например. (число, сумма, адрес электронной почты) и другие атрибуты. Ниже приведен пример конфигурации динамической формы.
Имя формы: Продажи
Метка поля: Имя клиента Тип поля: текст Длина: 100
Метка поля: Сумма Тип поля: деньги
Надеюсь, вы уловили суть. Таких форм может быть много. Для каждой формы могут быть тысячи строк. Конфигурация поля хранится в таблицах со схемой, как показано ниже:
Таблица: DataTypes Столбец: DataTypeId int, DataTypeName varchar (100)
Таблица: FormFields Столбцы: FieldId int, FieldLabel varchar (100), DataTypeId int
Есть два способа сохранить значения формы в базе данных.
Подход 1: Хранить данные в статических таблицах как пару ключ-значение. При таком подходе моя таблица будет выглядеть так:
Таблица: FormFieldValues Столбцы: FieldId int, Numeric_value numeric (18,5), Text_Value varchar (500), Money_Value деньги
Таким образом, строка в таблице FormFieldValues будет выглядеть так, как показано ниже
Идентификатор поля | Numeric_Value | Text_Value | Money_Value
1 100.512
2 Джон Уэйн
3 200,50 долларов США
Преимущество этого подхода заключается в том, что, поскольку структура таблицы является статической, динамический SQL не требуется, например, при выборке строк. Недостатком является преобразование строк в столбцы в коде.
Подход 2: Используя конфигурацию полей, создайте динамическую таблицу на лету. Итак, в приведенном выше примере я могу создать таблицу, как показано ниже
Таблица: Форма 1 Столбцы: Id int, CustomerName varchar (100), Amount money, Version numeric (15,5)
Строка в этой таблице выглядит так
CustomerName | Сумма | Версия
Джон Уэйн $ 200,50 100,512
Преимущество этого подхода в том, что каждый столбец создается в соответствии с точной точностью, указанной в конфигурации поля. Недостатком является необходимость динамического SQL для извлечения данных и их хранения.
Какой подход лучше? Какой подход будет более масштабируемым и более эффективным в долгосрочной перспективе?
Примечание: SO не поддерживает форматы таблиц, поэтому таблицы могут отображаться некорректно, но я надеюсь, что читатели поймут суть.
Нет. Но я решил использовать подход 1.
Вы нашли какое-либо решение / другие методы, которые помогут в этом? не могли бы вы поделиться своим ответом @devanalyst