Tenho uma pergunta simples, mas não consegui encontrar uma resposta/explicação direta. Desculpe se estiver duplicado
Quero construir uma tabela de pontuação para um pequeno jogo de perguntas e respostas onde os usuários recebem perguntas e podem estar certos ou errados. Então, acho que tenho 2 opções, ou uma tabela com 1 linha = 1 resposta do usuário, assim:
ID do usuário | resposta correta | resposta errada |
---|---|---|
1 | 0 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
... | ... | ... |
Ou uma tabela com 1 linha = 1 pontuação global do usuário:
ID do usuário | certoRespostas | respostas erradas |
---|---|---|
1 | 42 | 21 |
2 | 100 | 0 |
3 | 12 | 13 |
... | ... | ... |
Tenho praticamente nenhuma experiência com otimização de banco de dados/sql, então não sei qual é o mais eficiente.
Aqui está meu processo de pensamento:
Primeira opção : Melhor(?)/Mais rápido(?) para adicionar/atualizar uma pontuação porque não me importo com o estado atual da tabela, só preciso inserir uma linha Mas, para obter a pontuação global de um usuário, eu precisaria de um pesado (?) consulta como
SELECT SUM(certo), SUM(errado) WHERE userId = x;
Como eu gostaria de mostrar a pontuação global de um usuário em cada página/solicitação, sinto que essa não é a escolha inteligente. Além disso, como 1 linha = 1 resposta do usuário, a tabela pode ficar muito grande.
Primeira opção : Mais lento(?) para adicionar uma pontuação, pois teria que atualizar uma linha existente. Significa SELECT e depois UPDATE, em cada resposta. Não é particularmente o meu caso, mas esta opção é menos flexível, pois - ao contrário da primeira opção - não poderei armazenar qual pergunta foi respondida correta/incorretamente. Mas, com isso posso obter a pontuação total de um usuário sem uma consulta pesada. Seria melhor se uma consulta UPDATE pudesse retornar a linha resultante, então não preciso UPDATE e depois SELECT para mostrar.
Por último, se você tiver a gentileza de dedicar algum tempo para me responder, poderia explicar brevemente um ou outro é tecnicamente melhor e como posso testá-lo (existe algum tipo de ferramenta/procedimento)
Obrigado