Мои навыки работы с базами данных в лучшем случае посредственны, и мне нужно разработать модель данных для данных опроса. Я потратил некоторые мысли на это, и прямо сейчас я чувствую, что я застрял между каким-то EAV model и дизайном, включающим сотни таблиц, каждый из которых содержит сотни столбцов (и тысячи записей). Должен быть лучший способ сделать это, и я надеюсь, что мудрые люди на этом форуме могут мне помочь.Модель данных съемки - как избежать EAV и чрезмерной денормализации?
Мой вопрос: как я должен моделировать ответы на вопросы опроса в СУБД? Использование SQL Server является обязательным. Поэтому альтернативные системы хранения данных должны быть исключены из этого обсуждения. (Конечно, некоторые должны и будут оцениваться, но не здесь, пожалуйста.) Мне не нужно решение для всей модели данных, пока меня интересует только часть ответов.
Я уже искал различные форумы, но я не мог найти решение. Если это уже было дано в другом месте, пожалуйста, извините меня и сообщите мне ссылку, чтобы я мог ее прочитать.
Некоторые предположения о данных мне приходится иметь дело с:
- Каждое обследование состоит из 1 до п опросных
- Каждая анкета состоит из 100-2,000 вопросов (не обращайте внимания, что 2000 вопросов действительно звучать как много, чтобы ответить ...)
- Вопросы могут быть разных типов: множественный выбор, свободный текст, число (например, возраст, доход, проценты, ...)
- Каждое обследование включает 10-200 стран респонденты не являются респондентами. страны.)
- В зависимости от типа вопросника на каждый вопросник отвечает 100-20 000 респондентов на страну.
- Страна может адаптировать вопросники для опроса, то есть добавлять, удалять или редактировать вопросы
- Данные для одной страны собраны в отдельной базе данных в этой стране. С онлайн-интеграции нет возможности для онлайн-интеграции.
- Данные для всех стран должны быть интегрированы позже. Это означает, например, если страна удалила вопрос, эти данные должны каким-то образом быть получены из того, что они отправили для достижения единого дизайна во всех странах.
- Мне нужно будет написать программное обеспечение для интеграции и очистки, которое понадобится для работы со сведениями каждой страны
- В конце данные должны быть экспортированы в плоские файлы, одну прямоугольную сетку для каждой страны и вопросник.
Я уже обсуждал эту тему с людьми из различных слоев и не пришел к хорошему решению еще. В основном я получил два мнения.
- Эксперты домена, которые используются для работы с плоскими файлами (электронные таблицы стилей) для обработки и анализ данных голосования для денормализованнога структуры с нагрузками таблиц и столбцов, как я описал выше (1 таблицу для каждой страны и вопросника). Это звучит ужасно для меня, потому что я узнал, что следует избегать больших таблиц, будет очень сложно определить, какие столбцы находятся на самом деле в таблице при работе с ним, база данных будет забита сотнями таблиц (или мне даже нужно настроить несколько баз данных, каждый с похожим, но немного отличающимся дизайном) и т. д.
- O-O-программисты голосуют за сильно «нормализованный» дизайн, что эффективно приведет к созданию центральной таблицы, содержащей ответы всех респондентов на все вопросы. Эта таблица должна либо содержать столбец типа 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
Для меня это звучит как хороший кандидат на решение [EAV] (http://en.wikipedia.org/wiki/Entity-attribute-value_model). Как вы возражаете против этого маршрута? –
Как использовать документ или базу данных NoSQL? Может быть, проблема здесь заключается в адаптации вашей модели домена к реляционной инфраструктуре, так почему бы просто не избежать этого ...? См. Http://en.wikipedia.org/wiki/NoSQL. – rsenna
Модель EAV, кажется, делает ограничения целостности намного более громоздкими. В основном я хотел бы сжать значения разных типов данных в один столбец. См. Http://www.eggheadcafe.com/software/aspnet/32645959/generic-datatype-table.aspx – AlexDPC