Мои навыки работы с базами данных в лучшем случае посредственные, и мне нужно разработать модель данных для данных опросов. Я подумал об этом и сейчас чувствую, что застрял между какой-то моделью EAV и дизайн, включающий сотни таблиц, каждая с сотнями столбцов (и тысячами записей). Должен быть лучший способ сделать это, и я надеюсь, что мудрые люди на этом форуме могут мне помочь.
Мой вопрос: как мне моделировать ответы на вопросы опроса в РСУБД? Использование SQL Server обязательно. Поэтому альтернативные системы хранения данных следует исключить из этого обсуждения. (Конечно, некоторые должны и будут оцениваться, но не здесь, пожалуйста.) Мне не нужно решение для всей модели данных, пока меня интересует только часть ответов.
Я уже искал различные форумы, но не нашел решения. Если это уже было где-то еще, извините, пожалуйста, и дайте мне ссылку, чтобы я мог ее прочитать.
Некоторые предположения о данных, с которыми мне приходится иметь дело:
- Каждый опрос состоит из от 1 до n анкет.
- Каждая анкета состоит из 100-2000 вопросов (пожалуйста, не обращайте внимания, что 2000 вопросов действительно звучат как много для ответа ...)
- Вопросы могут быть разных типов: с множественным выбором, произвольный текст, число (например, возраст, доход, проценты, ...)
- В каждом опросе участвуют 10-200 стран (это не респонденты. Фактически респонденты - это жители этих стран).
- В зависимости от типа анкеты на каждую анкету отвечают 100-20 000 респондентов в каждой стране.
- Страна может адаптировать анкеты для опроса, то есть добавлять, удалять или редактировать вопросы.
- Данные по одной стране собираются в отдельной базе данных в этой стране. С самого начала нет возможности для онлайн-интеграции.
- Данные по всем странам необходимо будет интегрировать позже. Это означает, например, что если страна удалила вопрос, эти данные должны каким-то образом быть получены из того, что они отправили, чтобы достичь единого дизайна для всех стран.
- I will have to write the integration and cleaning software, which will need to work with every country's data
- In the end the data needs to be exported to flat files, one rectangular grid per country and questionnaire.
Я уже обсуждал эту тему с людьми из разных слоев общества и еще не пришел к хорошему решению. В основном у меня есть два типа мнений.
- Эксперты в предметной области, которые привыкли работать с плоскими файлами (в виде электронных таблиц) для обработки и анализа данных, голосуют за денормализованную структуру с множеством таблиц и столбцов, как я описал выше (по одной таблице на страну и анкету). Для меня это звучит ужасно, потому что я узнал, что следует избегать широких таблиц, при работе с ними будет неприятно определять, какие столбцы на самом деле находятся в таблице, база данных будет загромождена сотнями таблиц (или мне даже нужно настроить несколько баз данных, каждая из которых имеет похожий, но немного другой дизайн) и т. д.
- O-программисты голосуют за строго «нормализованный» дизайн, который фактически приведет к центральной таблице, содержащей все ответы всех респондентов на все вопросы. Эта таблица должна содержать либо столбец типа sql_variant, либо несколько столбцов ответов с разными типами для хранения ответов разных типов (множественный выбор, произвольный текст, ..). Первый, по сути, был бы моделью EAV. Здесь я склонен следовать за Джо Селко, который категорически не рекомендует его использовать (он называет это OTLT или «One True Lookup Table»). Последнее будет означать, что каждая строка будет содержать пустые ячейки для неприменимых типов по дизайну.
Другой альтернативой, о которой я мог бы подумать, было бы создание одной таблицы для каждого типа ответа, то есть одну для вопросов с несколькими вариантами ответов, одну для вопросов с произвольным текстом и т. Д. подумайте, и мне придется добавить таблицу, если будет изобретен новый тип ответа.
Извините, что утомил вас всем этим текстом, и спасибо за ваш вклад!
Привет, Алекс
PS: я задал тот же вопрос здесь: http://www.eggheadcafe.com/community/aspnet/13/10242616/survey-data-model--how-to-avoid-eav-and-excessive-denormalization.aspx