Модель данных опроса - Как избежать EAV и чрезмерной денормализации?

Мои навыки работы с базами данных в лучшем случае посредственные, и мне нужно разработать модель данных для данных опросов. Я подумал об этом и сейчас чувствую, что застрял между какой-то EAV-моделью и дизайном, включающим сотни таблиц, каждая с сотнями столбцов (и тысячами записей). Должен быть лучший способ сделать это, и я надеюсь, что мудрые люди на этом форуме могут мне помочь.

Мой вопрос: как мне моделировать ответы на вопросы опроса в РСУБД? Использование SQL Server обязательно. Так что альтернативные системы хранения данных следует исключить из этого обсуждения. (Конечно, некоторые должны и будут оценены, но не здесь, пожалуйста.) Мне не нужно решение для всей модели данных, пока меня интересует только часть ответов.

Я уже искал различные форумы , но я не мог Я действительно не могу найти решение. Если это уже было где-то еще, извините меня и дайте мне ссылку, чтобы я мог ее прочитать.

Некоторые предположения относительно данных, с которыми мне приходится иметь дело:

  1. Каждый опрос состоит из от 1 до n анкет.
  2. Каждая анкета состоит из 100–2000 вопросов (пожалуйста, не обращайте внимания на то, что 2000 вопросов действительно кажутся сложными. ..)
  3. Вопросы могут быть разных типов: с множественным выбором, произвольный текст, число (например, возраст, доход, проценты, ...)
  4. В каждом опросе участвуют 10-200 стран (это не респонденты На самом деле респондентами являются люди в странах.)
  5. В зависимости от типа анкеты, на каждую анкету отвечают 100-20 000 респондентов от страны.
  6. Страна может адаптировать анкеты для обследования, т. Е. Добавить: удалить или отредактировать вопросы
  7. Данные по одной стране собираются в отдельной базе данных в этой стране. С самого начала нет возможности для онлайн-интеграции.
  8. Данные по всем странам должны быть интегрированы позже. Это означает, например, что если страна удалила вопрос, эти данные должны каким-то образом быть получены из того, что они отправили, чтобы достичь единого дизайна для всех стран
  9. . Мне нужно будет написать программное обеспечение для интеграции и очистки, которое потребует работать с данными каждой страны
    1. В конце концов, данные нужно экспортировать в плоские файлы, по одной прямоугольной сетке на страну и анкету.

Я уже обсуждал эту тему с людьми из разных слоев общества и пока не пришел к хорошему решению. В основном у меня есть два типа мнений.

  1. Эксперты в предметной области, которые привыкли работать с плоскими файлами (в стиле электронных таблиц) для обработки и анализа данных, голосуют за денормализованную структуру с множеством таблиц и столбцов, как я описал выше (1 таблица по странам и анкеты). Это звучит ужасно для меня, потому что я узнал, что следует избегать широких таблиц, при работе с ними будет неприятно определять, какие столбцы на самом деле находятся в таблице, база данных будет загромождена сотнями таблиц (или мне даже нужно настроить несколько баз данных, каждая с похожим, но немного отличающимся дизайном) и т. д.
  2. ОО-программисты голосуют за строго «нормализованный» дизайн, который фактически приведет к центральной таблице, содержащей все ответы всех респондентов на все вопросы. Эта таблица должна содержать либо столбец типа sql_variant, либо несколько столбцов ответов с разными типами для хранения ответов разных типов (множественный выбор, произвольный текст, ..). Первый, по сути, был бы моделью EAV. Здесь я склонен следовать за Джо Селко, который категорически не рекомендует его использовать (он называет это OTLT или «One True Lookup Table»). Последнее будет означать, что каждая строка будет содержать пустые ячейки для неприменимых типов по дизайну.

Другой альтернативой, о которой я мог бы подумать, было бы создание одной таблицы для каждого типа ответа, то есть одной для вопросов с несколькими вариантами ответов, одной бесплатно текстовые вопросы и т. д. Это не так уж и часто, Alex

PS: Я задал тот же вопрос здесь: http://www.eggheadcafe.com/community/aspnet/13/10242616/survey-data-model--how-to-avoid-eav-and -excessive-denormalization.aspx

8
задан AlexDPC 9 January 2011 в 12:31
поделиться