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

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

Я вижу 3 способа хранения этого в БД:

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

  2. Таблицы вопросов, типов вопросов и ответов. Запихните все в эти конструкции. В частности, меня беспокоит, что для обновления профиля требуется около 20 вставок. Будет ли это снижение производительности при больших объемах трафика?

  3. Денормализованная одиночная таблица, по одному полю на вопрос, жестко закодируйте коды ответов в HTML и / или в объекте C #.

Я склоняюсь к # 2 или # 3. Как вы думаете, что будет лучшим решением?

1 Ответ

5 голосов
/ 13 апреля 2010

Я бы создал следующие таблицы:

Survey (PK:SurveyID)
Question (PK:QuestionID, FK:SurveyID)
QuestionAnswer (PK:QuestionAnswerID, FK:QuestionID)
QuestionResponse (PK:QuestionResponseID, FK:QuestionAnswerID, FK:UserID)

Вы можете минимизировать нагрузку, вставляя один оператор, например ::100100

insert into QuestionResponse
(QuestionAnswerID, UserID)
select 23, 3
union all
select 72, 3
union all
select 488, 3
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...