Шимми, я написал статью из четырех частей, посвященную этой проблеме - см. Создание динамического пользовательского интерфейса привода данных . В статье рассказывается, как дать пользователю возможность определить, какие данные о клиентах хранить, поэтому это не точный анализ вашего вопроса, но он довольно близок. А именно, моя статья показывает, как позволить конечному пользователю определить тип данных для хранения, который соответствует желаемому.
Следующая диаграмма ER дает суть модели данных:
Здесь DynamicAttributesForClients
- это таблица, которая указывает, какие пользовательские атрибуты пользователь хочет отследить для своих клиентов. Короче говоря, каждый атрибут имеет значение DataTypeId
, которое указывает, является ли он логическим атрибутом, атрибутом Text, числовым атрибутом и т. Д. В вашем случае в этой таблице будут храниться вопросы опроса.
Таблица DynamicValuesForClients
содержит значения, сохраненные для конкретного клиента для определенного атрибута. В вашем случае в этой таблице будут храниться ответы на вопросы опроса. Фактическое значение сохраняется в столбце DynamicValue
, который имеет тип sql_variant
, что позволяет хранить в нем любые типы данных - числовые, битовые, строковые и т. Д.
В моей статье не рассматривается, как обрабатывать вопросы с несколькими вариантами ответов, когда пользователь может выбрать один вариант из предустановленного списка параметров, но расширение модели данных для обеспечения этого довольно просто. Вы должны создать новую таблицу с именем DynamicListOptions
со следующими столбцами:
DynamicListOptionId
- первичный ключ
DynamicAttributeId
- указывает, с каким атрибутом связаны эти вопросы
OptionText
- текст опции
Таким образом, если у вас есть атрибут с множественным выбором, вы должны заполнить раскрывающийся список в пользовательском интерфейсе параметрами, возвращаемыми из запроса:
SELECT OptionText
FROM DynamicListOptions
WHERE DynamicAttributeId = ...
Наконец, вы должны сохранить выбранное значение DynamicListOptionId
в столбце DynamicValuesForClients.DynamicValue
, чтобы записать выбранный ими вариант списка (или использовать NULL
, если они не выбирали элемент).
Прочитайте статью. Вы можете скачать полную рабочую демонстрацию, которая включает в себя полную базу данных и ее модель. Кроме того, четыре статьи, из которых состоит серия, подробно исследуют модель данных и показывают, как создать веб-интерфейс (ASP.NET), позволяющий пользователям определять динамические атрибуты, как отображать их для ввода данных и т. Д. .
Счастливого программирования!