0

Une section de notre site Web invite à poser à l'utilisateur 20 questions à choix multiple sur lui-même (un «profil»). Cette partie du site Web sera fréquemment consultée, et occasionnellement mise à jour. On s'attend à ce que le site Web développe une grande quantité de trafic, de sorte qu'on envisage d'essayer de se préparer aux problèmes de performance.Question de dénormalisation SQL Server - stockez les données utilisateur dans 1,3 ou 21 tables?

Les 3 façons que je peux voir pour stocker ceci dans le DB sont:

  1. Créer une table pour chaque question, chaque table a QuestionID et réponse, puis une table CustomerInfo pour stocker les données de profil, avec clés étrangères mappées aux questions.

  2. Tables Question, Question_Type et Réponses. Tout bourrer dans ces constructions. Ma préoccupation ici est en particulier la vingtaine d'insertions nécessaires pour mettre à jour un profil. Est-ce que cela va être un coup de performance à des volumes de trafic élevés?

  3. Dénormaliser un seul tableau, un champ par question, coder en dur les codes de réponse dans le HTML et/ou dans un objet C#.

Je penche vers # 2 ou # 3. À votre avis, quelle serait la meilleure solution?

Répondre

5

Je créerais les tableaux suivants:

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

Vous pouvez réduire la charge en faisant les insertions dans une déclaration, .: par exemple

insert into QuestionResponse 
(QuestionAnswerID, UserID) 
select 23, 3 
union all 
select 72, 3 
union all 
select 488, 3