Pergunta

Uma seção do nosso site exige fazer ao usuário 20 perguntas de múltipla escolha sobre si mesmas (um "perfil"). Esta parte do site será visualizada com frequência e, ocasionalmente, atualizada. Espera -se que o site desenvolva uma grande quantidade de tráfego, portanto, está sendo considerada alguma consideração para tentar se preparar para problemas de desempenho.

As três maneiras que posso ver para armazenar isso no banco de dados são:

  1. Crie 1 tabela para cada pergunta, cada tabela possui questionídeo e responda e, em seguida, uma tabela CustomerInfo para armazenar os dados do perfil, com chaves estrangeiras mapeadas para as perguntas.

  2. Pergunta, question_type e respostas tabelas. Encamione tudo nessas construções. Minha preocupação aqui são, em particular, as 20 inserções necessárias para atualizar um perfil. Isso vai ser um sucesso de desempenho em volumes de tráfego alto?

  3. Tabela única desnormalizada, um campo por pergunta, codifique os códigos de resposta no HTML e/ou em um objeto C#.

Estou inclinado para #2 ou #3. Qual você acha que seria a melhor solução?

Foi útil?

Solução

Eu criaria as seguintes tabelas:

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

Você pode minimizar a carga fazendo as inserções em uma declaração, por exemplo:

insert into QuestionResponse
(QuestionAnswerID, UserID)
select 23, 3
union all
select 72, 3
union all
select 488, 3
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top