Вопрос денормализации SQL Server - хранить данные пользователя в 1,3 или 21 таблицах?
-
26-09-2019 - |
Вопрос
Раздел нашего веб-сайта требует запроса пользователей 20 вопросов с множественным выбором о себе («профиль»). Эта часть веб-сайта будет часто просматриваться, а иногда обновлена. Ожидается, что веб-сайт будет разработать высокое количество трафика, поэтому некоторое внимание уделяется попытке попробовать и подготовиться к вопросам производительности.
3 способа, которыми я могу видеть, чтобы сохранить это в БД:
Создайте 1 таблицу для каждого вопроса, каждая таблица имела щивторидку и ответить, а затем таблица CustomerInfo для хранения данных профиля, с внешним ключами сопоставлены на вопросы.
Вопрос, question_type и ответы столы. Все в эти конструкции. Моя забота здесь в частности, вставляет 20 или около того, необходимые для обновления профиля. Это станет производительностью на высоком объемах трафика?
Денормализованная отдельная таблица, одно поле на вопрос, сложный код ответов в HTML и / или в объекте C #.
Я прилагаюсь к # 2 или # 3. Как вы думаете, что будет лучшим решением?
Решение
Я бы создал следующие таблицы:
Survey (PK:SurveyID)
Question (PK:QuestionID, FK:SurveyID)
QuestionAnswer (PK:QuestionAnswerID, FK:QuestionID)
QuestionResponse (PK:QuestionResponseID, FK:QuestionAnswerID, FK:UserID)
Вы можете минимизировать нагрузку, выполнив вставки в одном операторе, например:
insert into QuestionResponse
(QuestionAnswerID, UserID)
select 23, 3
union all
select 72, 3
union all
select 488, 3