Вопрос денормализации SQL Server - хранить данные пользователя в 1,3 или 21 таблицах?

StackOverflow https://stackoverflow.com/questions/2625442

Вопрос

Раздел нашего веб-сайта требует запроса пользователей 20 вопросов с множественным выбором о себе («профиль»). Эта часть веб-сайта будет часто просматриваться, а иногда обновлена. Ожидается, что веб-сайт будет разработать высокое количество трафика, поэтому некоторое внимание уделяется попытке попробовать и подготовиться к вопросам производительности.

3 способа, которыми я могу видеть, чтобы сохранить это в БД:

  1. Создайте 1 таблицу для каждого вопроса, каждая таблица имела щивторидку и ответить, а затем таблица CustomerInfo для хранения данных профиля, с внешним ключами сопоставлены на вопросы.

  2. Вопрос, question_type и ответы столы. Все в эти конструкции. Моя забота здесь в частности, вставляет 20 или около того, необходимые для обновления профиля. Это станет производительностью на высоком объемах трафика?

  3. Денормализованная отдельная таблица, одно поле на вопрос, сложный код ответов в 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top